<?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>84553</bug_id>
          
          <creation_ts>2012-04-22 15:09:58 -0700</creation_ts>
          <short_desc>DFG should have control flow graph simplification</short_desc>
          <delta_ts>2012-05-19 03:42:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>86918</blocked>
    
    <blocked>86939</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>607391</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-22 15:09:58 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607392</commentid>
    <comment_count>1</comment_count>
      <attachid>138277</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-22 15:13:50 -0700</bug_when>
    <thetext>Created attachment 138277
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607404</commentid>
    <comment_count>2</comment_count>
      <attachid>138280</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-22 17:06:19 -0700</bug_when>
    <thetext>Created attachment 138280
it seems to work

There appear to still be some issues, like that the fixpoint is not converging as fast as it probably should.  I&apos;ll investigate more and then start running bigger tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607408</commentid>
    <comment_count>3</comment_count>
      <attachid>138281</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-22 17:58:19 -0700</bug_when>
    <thetext>Created attachment 138281
getting close

Fixed the convergence problem, which was due to constant abstract values being deconstantified upon inter-block merging. This then revealed a bunch of bugs in constant folding of GetLocal. So I fixed them.

Right now the code is kind of performing as expected for simple code.  But I still need to test it more and do more investigation to ensure that I haven&apos;t introduced some horrible problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607426</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-22 19:48:55 -0700</bug_when>
    <thetext>Found some fun issues:

- Merging the taken successor when the branch condition is known is wrong if that successor has multiple predecessors. We should convert the branch to a jump in that case, and insert phantoms for those things that were live in the not-taken successor.

- The handling of constant folding on GetLocal is wrong. First, it fails to deref the child of the GetLocal, which means that the original SetLocal is still executed even if it need not be. This leads to the graph being in an inconsistent state where the SetLocal will have a ref count than is greater than the number of nodes using it. Second, it&apos;s not clear that it will correctly inform OSR exit of the value of the local, if the original SetLocal is killed. Likely the best way to fix this would be that for any block in which the valueAtHead is a constant, we insert a JSConstant/dead-SetLocal pair at the top of the block, and link variablesAtHead to that SetLocal. Link variablesAtTail to that SetLocal also, if variablesAtTail was equal to variablesAtHead. Constant folding a GetLocal ought to assert that the local has been relinked in this fashion in this basic block.

But this appears to be dangerous, since a subsequent run of the CFA might get massively confused. Consider that we might have a block that does not use a variable but knows that the variable is a constant. Then it will have a dead SetLocal at the top. But since it&apos;s dead, the CFA will assume that the block kills the variable. So the constant value that flowed through this block will not be propagated correctly. Ouch!  I need to think about this more.

All of this does bring up an interesting question: could we perform constant propagation as a block-local analysis separate from CFA, and then propagate results between blocks by observing when a block uses a GetLocal that is linked to SetLocal of a JSConstant. The problem with that approach is that it won&apos;t work cleanly with value speculation or sparse conditional constant propagation, since it will depend too much on interleaving with CFG simplification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608449</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-24 01:33:11 -0700</bug_when>
    <thetext>I&apos;ve decided that:

- We should have Phantom nodes in place of GetLocals in the constant folder. This means that Phantom nodes participate in operand-related liveness. So you may have Phantom(SetLocal), Phantom(Flush), Phantom(SetArgument), or Phantom(Phi). The control flow simplification will forward Phantom(operand instruction) to Phantom(source of the operand instruction) if the operand&apos;s value is known locally due to a SetLocal.

- We need to clean up unreachable blocks correctly. This means removing dead Phi edges. More subtly, it means that if we jettison a block - which may not render it unreachable, yet - then we must remove those Phi edges outgoing from that block that targeted the predecessor that we are killing.

- We need IR verification. Many of the invariants that we&apos;re allegedly upholding in this phase are not documented anywhere and may already be invalidated by bugs in other parts of the compiler. We need a phase that enforces the invariants that we&apos;re interested in. We can disable this phase for release builds, but it should always be on in debug builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608451</commentid>
    <comment_count>6</comment_count>
      <attachid>138517</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-24 01:35:09 -0700</bug_when>
    <thetext>Created attachment 138517
getting closer

- Implemented (hopefully) correct handling of Phantom keep-alive for children of GetLocals killed by constant folding.

- Implemented (hopefully) correct handling of Branch(constant), in that we now only merge blocks if the taken successor of the branch has only one predecessor.

- Implemented (hopefully) correct unreachable block destruction.

- Started to implement, but did not finish, the handling of jettisoned blocks with respect to Phi edges.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608466</commentid>
    <comment_count>7</comment_count>
      <attachid>138519</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-24 01:54:03 -0700</bug_when>
    <thetext>Created attachment 138519
more

- Implemented more of the handling of removing a block from the predecessors list.

- Also chose to rely on redundant phi elimination not being run, since that would only make things more complicated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609232</commentid>
    <comment_count>8</comment_count>
      <attachid>138683</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-24 16:35:41 -0700</bug_when>
    <thetext>Created attachment 138683
more

- Ensured that the state of variablesAtHead/variablesAtTail after constant folding and CFG simplification complies with our DFG-style CPS conventions.

- Fixed a bug where the value of the condition passed to Branch was not being interpreted correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609392</commentid>
    <comment_count>9</comment_count>
      <attachid>138720</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-24 19:27:23 -0700</bug_when>
    <thetext>Created attachment 138720
starting to run SunSpider

Fixed miscellaneous bugs.  I can now run some of the SunSpider benchmarks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609430</commentid>
    <comment_count>10</comment_count>
      <attachid>138729</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-24 20:32:52 -0700</bug_when>
    <thetext>Created attachment 138729
it appears to work

Runs SunSpider, V8, and Kraken.

Still need to test performance and run more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610357</commentid>
    <comment_count>11</comment_count>
      <attachid>138934</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-25 22:17:28 -0700</bug_when>
    <thetext>Created attachment 138934
almost there

This appears to work, and is performance neutral, except on Kraken, where it is an ever-so-slight win.  Still running more tests.  Will set to r? if I find it to work on all the relevant ones, otherwise it&apos;s back to work for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610364</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-25 22:41:59 -0700</bug_when>
    <thetext>Yup, I found another bug.  Consider that we have block A that branches to blocks B and C.  Both blocks B and C then jump to block D.  We notice that block A will always jump to block B, so we jettison block C.  We currently successfully clean up C&apos;s phis so that they do not point to A anymore. But let&apos;s assume that there are no other jumps to C, so C is unreachable now. We will fail to clean up D&apos;s incoming phis to reflect this.

Ooops!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611194</commentid>
    <comment_count>13</comment_count>
      <attachid>139123</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-26 19:37:49 -0700</bug_when>
    <thetext>Created attachment 139123
and now, passing more tests than ever!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611287</commentid>
    <comment_count>14</comment_count>
      <attachid>139140</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-27 00:10:31 -0700</bug_when>
    <thetext>Created attachment 139140
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611669</commentid>
    <comment_count>15</comment_count>
      <attachid>139140</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-04-27 10:50:26 -0700</bug_when>
    <thetext>Comment on attachment 139140
the patch

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

r=me, but make sure we don&apos;t have any custom toBoolean(CallFrame*) overrides in WebCore -- I recall that there was one, something like document.all -- but it&apos;s possible we hanlde that with the MasqueradesAsUndefined flag.

r+ with the few changes i suggested.

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:153
&gt; +            root-&gt;valuesAtHead.local(i).makeTop();

Sadness.  Maybe one day we&apos;ll be able to do some analysis of capture sites.  Oh well.

&gt; Source/JavaScriptCore/dfg/DFGAdjacencyList.h:45
&gt; +    #define AdjacencyListSize 3

could we use enum { AdjacencyListSize = 3 } rather than a #define here?  Aside from anything else #define&apos;s are hard to see in the debugger. (i&apos;d suggest static const but i see we use it as an array length below. Silly C++ const expr requirements.

&gt; Source/JavaScriptCore/dfg/DFGEdge.h:83
&gt; +    // use an Edge where you meant to use Edge::index(), you will instead get Edge::isSet(). Gross!

There&apos;s a horrible trick we use in other parts of the code where you can do this:

    typedef void* (DFGEdge::*UnspecifiedBoolType);
    operator UnspecifiedBoolType*() const { return isSet ? reinterpret_cast&lt;UnspecifiedBoolType*&gt;(1) : 0; }

This gives you (essentially) operator bool() but without the horrible implied int conversions.

&gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:130
&gt; -    if (mustGenerate) {
&gt; -        ASSERT(refCount);
&gt; +    if (mustGenerate)
&gt;          --refCount;

Seems reasonable to keep this assertion.

&gt; Source/JavaScriptCore/dfg/DFGNode.h:478
&gt; +            return 1;
&gt; +        case Branch:
&gt; +            return 2;

Mmmmmm tasty constants ;) (not saying that there&apos;s anything better though :-(

&gt; Source/JavaScriptCore/heap/Heap.cpp:860
&gt;      double lastGCEndTime = WTF::currentTime();
&gt;      m_lastGCLength = lastGCEndTime - lastGCStartTime;
&gt;      JAVASCRIPTCORE_GC_END();
&gt; -
&gt; +    
&gt;      (*m_activityCallback)();
&gt;  }
&gt;  

revert Heap.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611732</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-27 11:38:27 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 139140 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=139140&amp;action=review
&gt; 
&gt; r=me, but make sure we don&apos;t have any custom toBoolean(CallFrame*) overrides in WebCore -- I recall that there was one, something like document.all -- but it&apos;s possible we hanlde that with the MasqueradesAsUndefined flag.
&gt; 
&gt; r+ with the few changes i suggested.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:153
&gt; &gt; +            root-&gt;valuesAtHead.local(i).makeTop();
&gt; 
&gt; Sadness.  Maybe one day we&apos;ll be able to do some analysis of capture sites.  Oh well.

It&apos;s not that hard.  But I don&apos;t want to pile on more dangerous stuff all at once.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAdjacencyList.h:45
&gt; &gt; +    #define AdjacencyListSize 3
&gt; 
&gt; could we use enum { AdjacencyListSize = 3 } rather than a #define here?  Aside from anything else #define&apos;s are hard to see in the debugger. (i&apos;d suggest static const but i see we use it as an array length below. Silly C++ const expr requirements.

Ah, good point about using an enum.  I&apos;ll do that.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGEdge.h:83
&gt; &gt; +    // use an Edge where you meant to use Edge::index(), you will instead get Edge::isSet(). Gross!
&gt; 
&gt; There&apos;s a horrible trick we use in other parts of the code where you can do this:
&gt; 
&gt;     typedef void* (DFGEdge::*UnspecifiedBoolType);
&gt;     operator UnspecifiedBoolType*() const { return isSet ? reinterpret_cast&lt;UnspecifiedBoolType*&gt;(1) : 0; }
&gt; 
&gt; This gives you (essentially) operator bool() but without the horrible implied int conversions.

I&apos;ll add that.  Though, right now, nobody will use it.  I&apos;ve gotten used to having !!foo.child1() in places.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:130
&gt; &gt; -    if (mustGenerate) {
&gt; &gt; -        ASSERT(refCount);
&gt; &gt; +    if (mustGenerate)
&gt; &gt;          --refCount;
&gt; 
&gt; Seems reasonable to keep this assertion.

It isn&apos;t.  If you have this assertion and the validation fails, then instead of getting a nice pretty graph dump showing you why validation failed, you have a good chance of getting an assertion failure in the graph dump.

The graph dump should not try to validate the graph.  It should try hard to print it even if it&apos;s bogus.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGNode.h:478
&gt; &gt; +            return 1;
&gt; &gt; +        case Branch:
&gt; &gt; +            return 2;
&gt; 
&gt; Mmmmmm tasty constants ;) (not saying that there&apos;s anything better though :-(

They&apos;re infallible constants of nature and truth.  A jump has one successor because that&apos;s the definition of a jump.  A branch has two successors because that&apos;s the definition of a branch.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:860
&gt; &gt;      double lastGCEndTime = WTF::currentTime();
&gt; &gt;      m_lastGCLength = lastGCEndTime - lastGCStartTime;
&gt; &gt;      JAVASCRIPTCORE_GC_END();
&gt; &gt; -
&gt; &gt; +    
&gt; &gt;      (*m_activityCallback)();
&gt; &gt;  }
&gt; &gt;  
&gt; 
&gt; revert Heap.cpp?

Ooops!  Yes, will do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611932</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-27 15:06:08 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 139140 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=139140&amp;action=review
&gt; 
&gt; r=me, but make sure we don&apos;t have any custom toBoolean(CallFrame*) overrides in WebCore -- I recall that there was one, something like document.all -- but it&apos;s possible we hanlde that with the MasqueradesAsUndefined flag.

Would overrides be possible, given that toBoolean() is not in the methodTable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612006</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-04-27 16:35:08 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/115512</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628154</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-18 15:29:59 -0700</bug_when>
    <thetext>Merged in http://trac.webkit.org/changeset/117646</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138277</attachid>
            <date>2012-04-22 15:13:50 -0700</date>
            <delta_ts>2012-04-22 17:06:19 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>cfgsimplify_patch_1.diff</filename>
            <type>text/plain</type>
            <size>57431</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0ODYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNCBA
QAorMjAxMi0wNC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTUzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGlu
IHByb2dyZXNzLgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNW
YWx1ZVRvQm9vbGVhbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAg
ICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6
cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAg
ICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2Uu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChDRkdTaW1wbGlmaWNhdGlv
blBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpDRkdT
aW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpbmRPcGVyYW5kU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjprZWVwT3BlcmFuZEFsaXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlm
aWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpD
RkdTaW1wbGlmaWNhdGlvblBoYXNlOjptZXJnZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6
cGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NT
RVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cnVuKToKKyAgICAgICAg
KENTRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2xvYmJlcnNXb3JsZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuaDoKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5oOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3VjY2Vz
c29yRm9yQ29uZGl0aW9uKToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om51bVN1Y2Nlc3NvcnMpOgorICAgICAgICAo
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3JGb3JDb25kaXRpb24pOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR1BoYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6cnVuUGhh
c2UpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbik6CisgICAgICAgICog
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAg
ICAgICAqIGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpydW4pOgorICAgICAgICAo
SlNDOjpERkc6OnBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbik6CisgICAgICAgICogZGZn
L0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OnBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3Bw
OgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
RXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAqIHJ1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9v
bGVhbik6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAg
KEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjp0b0Jvb2xlYW4pOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjp0
b1Byb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4
cFByb3RvRnVuY1RvU3RyaW5nKToKKwogMjAxMi0wNC0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaGF2ZSBjb25zdGFudCBwcm9wYWdhdGlv
bgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9vbCBKU1ZhbHVlVG9Cb29sZWFuKEpT
Q29udGV4dFJlZiBjdHgsIAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKLSAgICByZXR1cm4ganNWYWx1
ZS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIGpzVmFsdWUudG9Cb29sZWFuKCk7CiB9CiAK
IGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1
ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MjYsOCArNTI2LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMy
KTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTAg
Kzk1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAv
LyBQYXJzZSBhIHNpbmdsZSBiYXNpYyBibG9jayBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMuCiAg
ICAgYm9vbCBwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KTsKLSAgICAvLyBGaW5kIHJlYWNoYWJs
ZSBjb2RlIGFuZCBzZXR1cCBwcmVkZWNlc3NvciBsaW5rcyBpbiB0aGUgZ3JhcGgncyBCYXNpY0Js
b2Nrcy4KLSAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOwotICAgIC8vIEVucXVldWUg
YSBibG9jayBvbnRvIHRoZSB3b3JrbGlzdCwgaWYgbmVjZXNzYXJ5LgotICAgIHZvaWQgaGFuZGxl
U3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4LCBC
bG9ja0luZGV4IHN1Y2Nlc3Nvcik7CiAgICAgLy8gTGluayBibG9jayBzdWNjZXNzb3JzLgogICAg
IHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxl
VGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5s
aW5rZWRCbG9ja3MsIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9zc2libGVUYXJnZXRzKTsKQEAgLTI1
ODUsNDEgKzI1ODEsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2tzKFZlY3RvcjxV
CiAgICAgfQogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9y
PEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJ
bmRleCBzdWNjZXNzb3JJbmRleCkKLXsKLSAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2dy
YXBoLm1fYmxvY2tzW3N1Y2Nlc3NvckluZGV4XS5nZXQoKTsKLSAgICBpZiAoIXN1Y2Nlc3Nvci0+
aXNSZWFjaGFibGUpIHsKLSAgICAgICAgc3VjY2Vzc29yLT5pc1JlYWNoYWJsZSA9IHRydWU7Ci0g
ICAgICAgIHdvcmtsaXN0LmFwcGVuZChzdWNjZXNzb3JJbmRleCk7Ci0gICAgfQotICAgIAotICAg
IHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOwotfQotCi12b2lk
IEJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQotewotICAgIFZlY3RvcjxC
bG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7Ci0gICAgd29ya2xpc3QuYXBwZW5kKDApOwotICAgIG1f
Z3JhcGgubV9ibG9ja3NbMF0tPmlzUmVhY2hhYmxlID0gdHJ1ZTsKLSAgICB3aGlsZSAoIXdvcmts
aXN0LmlzRW1wdHkoKSkgewotICAgICAgICBCbG9ja0luZGV4IGluZGV4ID0gd29ya2xpc3QubGFz
dCgpOwotICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIAotICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbaW5kZXhdLmdldCgpOwotICAgICAg
ICBBU1NFUlQoYmxvY2stPmlzTGlua2VkKTsKLSAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUg
PSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFs
KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaXNKdW1wKCkpCi0gICAgICAgICAgICBo
YW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsK
LSAgICAgICAgZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7Ci0gICAgICAgICAgICBoYW5kbGVT
dWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKLSAgICAg
ICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUubm90VGFrZW5CbG9j
a0luZGV4KCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpi
dWlsZE9wZXJhbmRNYXBzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhdmVCdWlsdE9wZXJh
bmRNYXBzKQpAQCAtMjgzMSw3ICsyNzkyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2Uo
KQogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAKICAgICBsaW5rQmxvY2tzKGlubGluZVN0YWNrRW50
cnkubV91bmxpbmtlZEJsb2NrcywgaW5saW5lU3RhY2tFbnRyeS5tX2Jsb2NrTGlua2luZ1Rhcmdl
dHMpOwotICAgIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOworICAgIG1fZ3JhcGguZGV0ZXJtaW5l
UmVhY2hhYmlsaXR5KCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQogICAgIGRhdGFMb2coIlByb2Nlc3NpbmcgbG9jYWwgdmFyaWFibGUgcGhpcy5cbiIpOwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2
aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBtX2NvdW50ID0gMDsKQEAg
LTY1LDEyICs2NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsK
ICAgICAgICAgICAgIHBlcmZvcm1Gb3J3YXJkQ0ZBKCk7CiAgICAgICAgIH0gd2hpbGUgKG1fY2hh
bmdlZCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiBwcml2
YXRlOgogICAgIHZvaWQgcGVyZm9ybUJsb2NrQ0ZBKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAg
ICB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCkKICAgICAgICAgICAgIHJldHVybjsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0xMjYsOSArMTMw
LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotdm9pZCBwZXJmb3JtQ0ZBKEdyYXBoJiBncmFw
aCkKK2Jvb2wgcGVyZm9ybUNGQShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Q0ZBUGhh
c2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q0ZBUGhhc2U+KGdyYXBoKTsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkFQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkFQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNz
IEdyYXBoOwogLy8gdGhlIGNvZGUgYmxvY2suIEl0J3MgYWxzbyByZXNwb25zaWJsZSBmb3IgaWRl
bnRpZnlpbmcgZGVhZCBjb2RlLCBhbmQgaW4gdGhlCiAvLyBmdXR1cmUgc2hvdWxkIGJlIHVzZWQg
YXMgYSBob29rIGZvciBjb25zdGFudCBwcm9wYWdhdGlvbi4KIAotdm9pZCBwZXJmb3JtQ0ZBKEdy
YXBoJik7Citib29sIHBlcmZvcm1DRkEoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFj
dFN0YXRlLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDRkdTaW1wbGlmaWNh
dGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBDRkdTaW1wbGlmaWNhdGlv
blBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIkNGRyBzaW1wbGlm
aWNhdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAg
ICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OyArKyBibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFj
aGFibGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9ncmFwaFtibG9jay0+bGFzdCgpXS5vcCgpKSB7CisgICAgICAgICAgICBj
YXNlIEp1bXA6IHsKKyAgICAgICAgICAgICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVj
ZXNzb3IgLT4gbWVyZ2UuCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9ibG9ja3NbbV9n
cmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNj
ZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnNbMF0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgID09IGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2Nrcyhi
bG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCksIE5vQmxvY2spOworICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEJsb2NrIG9ubHkgaGFzIGEganVt
cCAtPiByZW1vdmUuIFRoaXMgaXMgdHJpY2t5IHRob3VnaCBiZWNhdXNlIG9mCisgICAgICAgICAg
ICAgICAgLy8gbGl2ZW5lc3MuIFdoYXQgd2UgcmVhbGx5IHdhbnQgaXMgdG8gc2xhbSBpbiBhIHBo
YW50b20gYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBibG9jaywgYWZ0ZXIg
dGhlIHRlcm1pbmFsLiBCdXQgd2UgY2FuJ3QgcmlnaHQgbm93LiA6LSgKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgQnJhbmNoOiB7CisgICAgICAgICAgICAgICAgLy8gQnJhbmNoIG9uIGNvbnN0YW50IC0+IGpl
dHRpc29uIHRoZSBub3QtdGFrZW4gYmxvY2sgYW5kIG1lcmdlLgorICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoW21fZ3JhcGhbYmxvY2stPmxhc3QoKV0uY2hpbGQxKCldLmhhc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBjb25kaXRpb24gPSBtX2dyYXBoLnZhbHVlT2ZK
U0NvbnN0YW50KG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0uY2hpbGQxKCkpOworICAgICAgICAgICAg
ICAgICAgICBtZXJnZUJsb2NrcygKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgs
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihi
bG9jaywgY29uZGl0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vz
c29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gQnJhbmNoIHRvIHNh
bWUgZGVzdGluYXRpb24gLT4ganVtcC4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyB3
aWxsIGN1cnJlbnRseSBub3QgYmUgaGl0IGJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YganVtcC1vbmx5
CisgICAgICAgICAgICAgICAgLy8gYmxvY2sgc2ltcGxpZmljYXRpb24uCisgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSA9PSBtX2dyYXBoLnN1Y2Nlc3Nvcihi
bG9jaywgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwg
bV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApLCBOb0Jsb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChjaGFuZ2VkKSB7
CisgICAgICAgICAgICAvLyBJZiB3ZSBjaGFuZ2VkIHRoZSBncmFwaCwgdGhlbiBzb21lIGJsb2Nr
cyBtYXkgaGF2ZSBiZWNvbWUgdW5yZWFjaGFibGUuIE5lZWQgdG8KKyAgICAgICAgICAgIC8vIHBl
cmZvcm0gYSBibG9jayBHQyBvZiBzb3J0cy4KKyAgICAgICAgICAgIG1fZ3JhcGgucmVzZXRSZWFj
aGFiaWxpdHkoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7
CisgICAgfQorCitwcml2YXRlOgorICAgIE5vZGVJbmRleCBmaW5kT3BlcmFuZFNvdXJjZShjb25z
dCBPcGVyYW5kczxOb2RlSW5kZXgsIE5vZGVJbmRleFRyYWl0cz4mIHZhcmlhYmxlcywgaW50IG9w
ZXJhbmQpCisgICAgeworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gdmFyaWFibGVzLm9w
ZXJhbmQob3BlcmFuZCk7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgp
ID09IFNldExvY2FsKQorICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbm9kZUluZGV4XS5jaGls
ZDEoKS5pbmRleCgpOworICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIGludCBvcGVyYW5kKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGguaXNDYXB0dXJlZChvcGVyYW5kKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGZpbmRPcGVyYW5kU291
cmNlKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG9wZXJhbmQpOworICAgICAgICBpZiAobm9kZUlu
ZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFtX2dyYXBo
W25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgTm9kZUluZGV4IHBoYW50b21Ob2RlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAg
Tm9kZSBwaGFudG9tKFBoYW50b20sIG5vZGVJbmRleCk7CisgICAgICAgIHBoYW50b20ucmVmKCk7
CisgICAgICAgIG1fZ3JhcGguYXBwZW5kKHBoYW50b20pOworICAgICAgICBibG9jay0+YXBwZW5k
KHBoYW50b21Ob2RlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeFBvc3NpYmxlR2V0
TG9jYWwoQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSYgY2hp
bGQgPSBtX2dyYXBoW2VkZ2VdOworICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG1fZ3JhcGguaXNDYXB0dXJlZChjaGls
ZC5sb2NhbCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgTm9kZUluZGV4IG9yaWdp
bmFsTm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLmxvY2Fs
KCkpOworICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlSW5kZXggIT0gTm9Ob2RlKTsKKyAgICAg
ICAgTm9kZSogb3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5kZXhdOworICAg
ICAgICBBU1NFUlQob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgLy8g
UG9zc2liaWxpdGllczoKKyAgICAgICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlz
IGdldHRpbmcgdGhlIHZhbHVlIG9mIHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5CisgICAg
ICAgIC8vICAgICBhdmFpbGFibGUgaW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2Rl
SW5kZXguCisgICAgICAgIC8vIEdldExvY2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5n
IHRoZSB2YWx1ZSBvZiBzb21ldGhpbmcgdGhhdCB0aGUgZmlyc3QKKyAgICAgICAgLy8gICAgIGJs
b2NrIGFsc28gZ2V0cy4KKyAgICAgICAgLy8gUGhpIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tp
bmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdCBibG9jaworICAg
ICAgICAvLyAgICAgd2FzIGFsc28gYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uLgorICAgICAgICAv
LyBTZXRBcmd1bWVudCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZl
IG9uIGFuIG9wZXJhbmQgdGhhdCB0aGUKKyAgICAgICAgLy8gICAgIGZpcnN0IGJsb2NrIHdhcyBr
ZWVwaW5nIGFsaXZlIGJ5IHZpcnR1ZSBvZiB0aGUgZmlyc3RCbG9jayBiZWluZyB0aGUgcm9vdCBh
bmQKKyAgICAgICAgLy8gICAgIHRoZSBvcGVyYW5kIGJlaW5nIGFuIGFyZ3VtZW50LgorICAgICAg
ICAvLyBGbHVzaCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9u
IGFuIG9wZXJhbmQgdGhhdCB0aGUgZmlyc3QKKyAgICAgICAgLy8gICAgIGJsb2NrIHdhcyBmb3Jj
aW5nIHRvIGJlIGFsaXZlLCBzbyB0aGUgc2Vjb25kIGJsb2NrIHNob3VsZCByZWZlciBjaGlsZCBv
ZgorICAgICAgICAvLyAgICAgdGhlIGZsdXNoLgorICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5v
cCgpID09IEZsdXNoKSB7CisgICAgICAgICAgICBvcmlnaW5hbE5vZGVJbmRleCA9IG9yaWdpbmFs
Tm9kZS0+Y2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgIG9yaWdpbmFsTm9kZSA9ICZtX2dy
YXBoW29yaWdpbmFsTm9kZUluZGV4XTsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9yaWdp
bmFsTm9kZS5vcCgpKSB7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIEVk
Z2UgbmV3RWRnZSA9IG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICBFZGdlIG9s
ZEVkZ2UgPSBlZGdlOworICAgICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CisgICAgICAg
ICAgICBtX2dyYXBoLmRlcmVmKG9sZEVkZ2UpOworICAgICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdldExvY2FsOgor
ICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogeworICAgICAgICAg
ICAgRWRnZSBuZXdFZGdlID0gZWRnZTsKKyAgICAgICAgICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7
CisgICAgICAgICAgICBuZXdFZGdlLnNldEluZGV4KG9yaWdpbmFsTm9kZUluZGV4KTsKKyAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKG5ld0VkZ2UpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihv
bGRFZGdlKTsKKyAgICAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
dm9pZCBtZXJnZUJsb2NrcygKKyAgICAgICAgQmxvY2tJbmRleCBmaXJzdEJsb2NrSW5kZXgsIEJs
b2NrSW5kZXggc2Vjb25kQmxvY2tJbmRleCwgQmxvY2tJbmRleCBqZXR0aXNvbmVkQmxvY2tJbmRl
eCkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBhZGQgYWxsIG9mIHRoZSBub2RlcyBpbiBz
ZWNvbmRCbG9jayB0byBmaXJzdEJsb2NrLCBidXQgaW4gc28gZG9pbmcKKyAgICAgICAgLy8gaXQg
d2lsbCBhbHNvIGVuc3VyZSB0aGF0IGFueSBHZXRMb2NhbHMgZnJvbSB0aGUgc2Vjb25kIGJsb2Nr
IHRoYXQgcmVmZXIgdG8KKyAgICAgICAgLy8gU2V0TG9jYWxzIGluIHRoZSBmaXJzdCBibG9jayBh
cmUgcmVsaW5rZWQuIElmIGpldHRpc29uZWRCbG9jayBpcyBub3QgTm9CbG9jaywKKyAgICAgICAg
Ly8gdGhlbiBQaGFudG9tcyBhcmUgaW5zZXJ0ZWQgZm9yIGFueXRoaW5nIHRoYXQgdGhlIGpldHRp
c29uZWRCbG9jayB3b3VsZCBoYXZlCisgICAgICAgIC8vIGtlcHQgYWxpdmUuCisgICAgICAgIAor
ICAgICAgICBCbG9jayogZmlyc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbZmlyc3RCbG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgQmxvY2sqIHNlY29uZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tzZWNvbmRCbG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJlbW92ZSB0
aGUgdGVybWluYWwgb2YgZmlyc3RCbG9jayBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0IGFueW1vcmUu
CisgICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgp
KTsKKyAgICAgICAgZmlyc3RCbG9jay0+cmVtb3ZlTGFzdCgpOworICAgICAgICAKKyAgICAgICAg
aWYgKGpldHRpc29uZWRCbG9ja0luZGV4ICE9IE5vQmxvY2spIHsKKyAgICAgICAgICAgIEJsb2Nr
KiBqZXR0aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGV4
XS5nZXQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGltZSB0byBpbnNlcnQgZ2hv
c3RpZXMgZm9yIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUga2VwdCBhbGl2ZSBpbiBjYXNlIHdlIE9T
UgorICAgICAgICAgICAgLy8gZXhpdCBwcmlvciB0byBoaXR0aW5nIHRoZSBmaXJzdEJsb2NrJ3Mg
dGVybWluYWwsIGFuZCBlbmQgdXAgZ29pbmcgZG93biBhCisgICAgICAgICAgICAvLyBkaWZmZXJl
bnQgcGF0aCB0aGFuIHNlY29uZEJsb2NrLgorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZp
cnN0QmxvY2ssIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKTsgKytpKQorICAgICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoZmlyc3RCbG9jaywg
aSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2Vjb25kQmxvY2stPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gc2Vjb25kQmxvY2stPmF0KGkpOworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBHZXRMb2NhbCwgdGhlbiB3ZSBt
aWdodCBsaWtlIHRvIGZpeCBpdC4KKyAgICAgICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk
SWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgKytjaGlsZElkeCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBv
c3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkMSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hp
bGQyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBu
b2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpcnN0QmxvY2stPmFwcGVuZChub2RlSW5kZXgp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwgPSBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsOworICAgICAgICBmaXJzdEJsb2NrLT52
YWx1ZXNBdFRhaWwgPSBzZWNvbmRCbG9jay0+dmFsdWVzQXRUYWlsOworICAgICAgICAKKyAgICAg
ICAgLy8gRml4IHRoZSBwcmVkZWNlc3NvcnMgb2YgbXkgbmV3IHN1Y2Nlc3NvcnMuIFRoaXMgaXMg
dHJpY2t5LCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gcmVzZXQKKyAgICAgICAgLy8gYWxsIHByZWRl
Y2Vzc29ycyBhbnl3YXkgZHVlIHRvIHJlYWNoYWJpbGl0eSBhbmFseXNpcy4gQnV0IHdlIG5lZWQg
dG8gZml4IHRoZQorICAgICAgICAvLyBwcmVkZWNlc3NvcnMgZWFnZXJseSB0byBlbnN1cmUgdGhh
dCB3ZSBrbm93IHdoYXQgdGhleSBhcmUgaW4gY2FzZSB0aGUgbmV4dCBibG9jayB3ZQorICAgICAg
ICAvLyBjb25zaWRlciBpbiB0aGlzIHBoYXNlIHdpc2hlcyB0byBxdWVyeSB0aGUgcHJlZGVjZXNz
b3JzIG9mIG9uZSBvZiB0aGUgYmxvY2tzIHdlCisgICAgICAgIC8vIGFmZmVjdGVkLgorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGkt
LTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9j
a3NbbV9ncmFwaC5zdWNjZXNzb3IoZmlyc3RCbG9jaywgaSldLmdldCgpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgp
OyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29yc1tq
XSA9PSBzZWNvbmRCbG9ja0luZGV4KQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPm1f
cHJlZGVjZXNzb3JzW2pdID0gCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIEZpeCB0aGUgcHJlZGVjZXNzb3JzIG9mIG15IGZvcm1lciBzdWNjZXNzb3JzLiBB
Z2Fpbiwgd2UnZCByYXRoZXIgbm90IGRvIHRoaXMsIGJ1dCBpdCdzCisgICAgICAgIC8vIGFuIHVu
Zm9ydHVuYXRlIG5lY2Vzc2l0eS4gU2VlIGFib3ZlIGNvbW1lbnQuCisgICAgICAgIGlmIChqZXR0
aXNvbmVkQmxvY2tJbmRleCAhPSBOb0Jsb2NrKSB7CisgICAgICAgICAgICBCbG9jayogamV0dGlz
b25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0KCk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT5t
X3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChqZXR0aXNv
bmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldICE9IGZpcnN0QmxvY2tJbmRleCkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5t
X3ByZWRlY2Vzc29yc1tpXSA9IGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMubGFzdCgp
OworICAgICAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMucmVtb3Zl
TGFzdCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW3NlY29uZEJsb2NrSW5kZXhdLmNs
ZWFyKCk7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtQ0ZHU2ltcGxpZmljYXRpb24oR3JhcGgm
IGdyYXBoKQoreworICAgIHJldHVybiBydW5QaGFzZTxDRkdTaW1wbGlmaWNhdGlvblBoYXNlPihn
cmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOworCisvLyBDRkcgc2ltcGxpZmljYXRpb246CisvLworLy8ganVtcCB0byBz
aW5nbGUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UgYmxvY2tzCisvLyBicmFuY2ggb24gY29uc3RhbnQg
LT4ganVtcAorLy8gYnJhbmNoIHRvIHNhbWUgYmxvY2tzIC0+IGp1bXAKKy8vIGp1bXAtb25seSBi
bG9jayAtPiByZW1vdmUKKy8vIGtpbGwgZGVhZCBjb2RlCisKK2Jvb2wgcGVyZm9ybUNGR1NpbXBs
aWZpY2F0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDExIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1fcmVwbGFjZW1lbnRzW2ldID0gTm9Ob2RlOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJ1
bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9jayA9
IDA7IGJsb2NrIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2spCi0gICAgICAgICAg
ICBwZXJmb3JtQmxvY2tDU0UoKm1fZ3JhcGgubV9ibG9ja3NbYmxvY2tdKTsKKyAgICAgICAgICAg
IHBlcmZvcm1CbG9ja0NTRShtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrXS5nZXQoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOyAvLyBNYXliZSB3ZSdsbCBuZWVkIHRvIG1ha2UgdGhpcyByZWFzb24gYWJv
dXQgd2hldGhlciBpdCBjaGFuZ2VkIHRoZSBncmFwaCBpbiBhbiBhY3Rpb25hYmxlIHdheT8KICAg
ICB9CiAgICAgCiBwcml2YXRlOgpAQCAtMTQ2LDEyICsxNDcsNiBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gaXNOdW1iZXJQcmVkaWN0aW9uKGxlZnQpICYmIGlzTnVtYmVyUHJlZGljdGlvbihy
aWdodCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgbG9naWNhbE5vdElzUHVyZShOb2RlJiBub2Rl
KQotICAgIHsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIHJldHVybiBpc0Jvb2xlYW5QcmVkaWN0
aW9uKHByZWRpY3Rpb24pIHx8ICFwcmVkaWN0aW9uOwotICAgIH0KLSAgICAKICAgICBib29sIGJ5
VmFsSXNQdXJlKE5vZGUmIG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gbV9ncmFwaFtub2Rl
LmNoaWxkMigpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKQEAgLTE3NSw4ICsxNzAsNiBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CiAgICAgICAgIGNhc2UgQ29t
cGFyZUVxOgogICAgICAgICAgICAgcmV0dXJuICFpc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKTsK
LSAgICAgICAgY2FzZSBMb2dpY2FsTm90OgotICAgICAgICAgICAgcmV0dXJuICFsb2dpY2FsTm90
SXNQdXJlKG5vZGUpOwogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgcmV0dXJu
ICFieVZhbElzUHVyZShub2RlKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTYxMCw2ICs2MDMsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIElzU3RyaW5nOgogICAgICAgICBjYXNlIElzT2JqZWN0
OgogICAgICAgICBjYXNlIElzRnVuY3Rpb246CisgICAgICAgIGNhc2UgTG9naWNhbE5vdDoKICAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KHB1cmVDU0Uobm9kZSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKQEAgLTY0MywxNSArNjM3LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2Fs
Tm90OiB7Ci0gICAgICAgICAgICBpZiAobG9naWNhbE5vdElzUHVyZShub2RlKSkgewotICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShub2RlKTsKLSAg
ICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgbG9naWNhbE5v
dElzUHVyZShtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKLSAgICAgICAgICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgIC8vIEZpbmFsbHkg
aGFuZGxlIGhlYXAgYWNjZXNzZXMuIFRoZXNlIGFyZSBub3QgcXVpdGUgcHVyZSwgYnV0IHdlIGNh
biBzdGlsbAogICAgICAgICAvLyBvcHRpbWl6ZSB0aGVtIHByb3ZpZGVkIHRoYXQgc29tZSBzdWJ0
bGUgY29uZGl0aW9ucyBhcmUgbWV0LgogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKQEAgLTcw
NCw5ICs2ODksMTQgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIH0KICAgICAKLSAgICB2b2lkIHBl
cmZvcm1CbG9ja0NTRShCYXNpY0Jsb2NrJiBibG9jaykKKyAgICB2b2lkIHBlcmZvcm1CbG9ja0NT
RShCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrID0gJmJs
b2NrOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBMYXN0Tm9kZVR5cGU7ICsraSkKICAgICAgICAgICAgIG1fbGFzdFNlZW5baV0gPSBV
SU5UX01BWDsKIApAQCAtNzIzLDkgKzcxMyw5IEBAIHByaXZhdGU6CiAgICAgRml4ZWRBcnJheTx1
bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBtX2xhc3RTZWVuOwogfTsKIAotdm9pZCBwZXJmb3JtQ1NF
KEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVu
UGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdy
YXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw3IEBAIGNsYXNzIEdyYXBoOwogLy8gYSB3aWRlIHJhbmdlIG9mIHN1YmV4cHJlc3Npb24gc2lt
aWxhcml0aWVzLiBJdCdzIGtub3duIHRvIHByb2R1Y2UgYmlnIHdpbnMKIC8vIG9uIGEgZmV3IGJl
bmNobWFya3MsIGFuZCBpcyByZWxhdGl2ZWx5IGNoZWFwIHRvIHJ1bi4KIAotdm9pZCBwZXJmb3Jt
Q1NFKEdyYXBoJik7Citib29sIHBlcmZvcm1DU0UoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDEzICs0MywxNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAg
ICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgIAogICAgICAgICBBYnN0cmFjdFN0YXRlIHN0YXRlKG1fZ3JhcGgp
OwogICAgICAgICBJbnNlcnRpb25TZXQ8Tm9kZUluZGV4PiBpbnNlcnRpb25TZXQ7CiAgICAgICAg
IAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgaWYgKCFibG9jay0+Y2ZhRm91bmRDb25zdGFudHMpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwpAQCAtNzMsMTYg
Kzc3LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggcGhhbnRvbU5vZGVJ
bmRleCA9IG1fZ3JhcGguc2l6ZSgpOwogICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHBo
YW50b20pOwogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2Nr
LCBwaGFudG9tTm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHRydWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBzdGF0ZS5yZXNldCgpOwogICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoKmJsb2NrKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogfTsKIAotdm9pZCBwZXJmb3JtQ29uc3RhbnRGb2xkaW5n
KEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhHcmFwaCYgZ3JhcGgp
CiB7Ci0gICAgcnVuUGhhc2U8Q29uc3RhbnRGb2xkaW5nUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1
cm4gcnVuUGhhc2U8Q29uc3RhbnRGb2xkaW5nUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIEdyYXBoOwogLy8gaW5mZXJyZWQgY29uc3RhbnRz
LCBhbmQgcmVwbGFjZXMgdGhvc2Ugbm9kZXMgd2l0aCBjb25zdGFudHMgd2hpbHN0IGluamVjdGlu
ZwogLy8gUGhhbnRvbSBub2RlcyB0byBrZWVwIHRoZSBjaGlsZHJlbiBhbGl2ZSAod2hpY2ggaXMg
bmVjZXNzYXJ5IGZvciBPU1IgZXhpdCkuCiAKLXZvaWQgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhH
cmFwaCYpOworYm9vbCBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKEdyYXBoJik7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTEg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wg
cnVuKCkKICAgICB7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAg
ICAgICBmaXh1cEJsb2NrKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNTksOSArMzYwLDkgQEAg
cHJpdmF0ZToKICAgICBJbnNlcnRpb25TZXQ8Tm9kZUluZGV4PiBtX2luc2VydGlvblNldDsKIH07
CiAgICAgCi12b2lkIHBlcmZvcm1GaXh1cChHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1GaXh1
cChHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Rml4dXBQaGFzZT4oZ3JhcGgpOworICAg
IHJldHVybiBydW5QaGFzZTxGaXh1cFBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBHcmFwaDsK
IC8vIEZpeCBwb3J0aW9ucyBvZiB0aGUgZ3JhcGggdGhhdCBhcmUgaW5lZmZpY2llbnQgZ2l2ZW4g
dGhlIHByZWRpY3Rpb25zIHRoYXQKIC8vIHdlIGhhdmUuIFRoaXMgc2hvdWxkIHJ1biBhZnRlciBw
cmVkaWN0aW9uIHByb3BhZ2F0aW9uIGJ1dCBiZWZvcmUgQ1NFLgogCi12b2lkIHBlcmZvcm1GaXh1
cChHcmFwaCYpOworYm9vbCBwZXJmb3JtRml4dXAoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRzo6UGhhc2UKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsNiArMzYyLDU0IEBAIHZvaWQgR3JhcGg6
OnByZWRpY3RBcmd1bWVudFR5cGVzKCkKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGg6OmhhbmRsZVN1
Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9j
a0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KQoreworICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3Nbc3VjY2Vzc29ySW5kZXhdLmdldCgpOworICAgIGlm
ICghc3VjY2Vzc29yLT5pc1JlYWNoYWJsZSkgeworICAgICAgICBzdWNjZXNzb3ItPmlzUmVhY2hh
YmxlID0gdHJ1ZTsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3NvckluZGV4KTsKKyAg
ICB9CisgICAgCisgICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2tJbmRl
eCk7Cit9CisKK3ZvaWQgR3JhcGg6OmRldGVybWluZVJlYWNoYWJpbGl0eSgpCit7CisgICAgVmVj
dG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5hcHBlbmQoMCk7Cisg
ICAgbV9ibG9ja3NbMF0tPmlzUmVhY2hhYmxlID0gdHJ1ZTsKKyAgICB3aGlsZSAoIXdvcmtsaXN0
LmlzRW1wdHkoKSkgeworICAgICAgICBCbG9ja0luZGV4IGluZGV4ID0gd29ya2xpc3QubGFzdCgp
OworICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgIAorICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2luZGV4XS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKGJs
b2NrLT5pc0xpbmtlZCk7CisgICAgICAgIAorICAgICAgICBOb2RlJiBub2RlID0gYXQoYmxvY2st
Pmxhc3QoKSk7CisgICAgICAgIEFTU0VSVChub2RlLmlzVGVybWluYWwoKSk7CisgICAgICAgIAor
ICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3
b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICBlbHNlIGlm
IChub2RlLmlzQnJhbmNoKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlz
dCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICAgICAgaGFuZGxlU3Vj
Y2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KCkKK3sKKyAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRl
eC0tOykgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmdldCgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGJsb2NrLT5pc1JlYWNoYWJsZSA9IGZhbHNlOworICAgICAgICBibG9jay0+bV9wcmVkZWNl
c3NvcnMuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7
Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw2ICszNDYs
MjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaXNDYXB0dXJlZChzdGF0aWNfY2FzdDxpbnQ+
KHZpcnR1YWxSZWdpc3RlcikpOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNz
b3JzKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGJsb2NrLT5s
YXN0KCkpLm51bVN1Y2Nlc3NvcnMoKTsKKyAgICB9CisgICAgQmxvY2tJbmRleCBzdWNjZXNzb3Io
QmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGF0KGJsb2NrLT5sYXN0KCkpLnN1Y2Nlc3NvcihpbmRleCk7CisgICAgfQorICAgIEJsb2NrSW5k
ZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sqIGJsb2NrLCBib29sIGNvbmRpdGlv
bikKKyAgICB7CisgICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNjZXNzb3JGb3JD
b25kaXRpb24oY29uZGl0aW9uKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZXRlcm1pbmVSZWFj
aGFiaWxpdHkoKTsKKyAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgCiAgICAgSlNH
bG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAg
ICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKQEAgLTM2NCw2ICszODAsOCBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKIHByaXZhdGU6CiAgICAgCisgICAgdm9p
ZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2Nr
SW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCk7CisgICAgCiAgICAg
Ym9vbCBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIGFkZCwgTm9kZSYg
dmFyaWFibGUsIE5vZGUmIGltbWVkaWF0ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpbW1lZGlh
dGUuaGFzQ29uc3RhbnQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
cmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2OCw2ICs0NjgsMzcgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICByZXR1cm4gbV9vcEluZm8yOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNz
b3JzKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEp1bXA6
CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgICAg
ICByZXR1cm4gMjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbmRleCkgeworICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICByZXR1cm4gdGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgIHJldHVybiBub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIE5v
QmxvY2s7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQmxvY2tJbmRleCBzdWNjZXNzb3JG
b3JDb25kaXRpb24oYm9vbCBjb25kaXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoaXNCcmFu
Y2goKSk7CisgICAgICAgIHJldHVybiBjb25kaXRpb24gPyB0YWtlbkJsb2NrSW5kZXgoKSA6IG5v
dFRha2VuQmxvY2tJbmRleCgpOworICAgIH0KKyAgICAKICAgICBib29sIGhhc0hlYXBQcmVkaWN0
aW9uKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyAr
MTc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKElzU3Ry
aW5nLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKElzT2JqZWN0LCBOb2RlUmVzdWx0
Qm9vbGVhbikgXAogICAgIG1hY3JvKElzRnVuY3Rpb24sIE5vZGVSZXN1bHRCb29sZWFuKSBcCi0g
ICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTWlnaHRDbG9iYmVy
KSBcCisgICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNy
byhUb1ByaW1pdGl2ZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9i
YmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oU3RyQ2F0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEyMSw3ICsxMTIxLDcgQEAgc2l6ZV90IERGR19PUEVSQVRJ
T04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9i
YWxEYXRhLCBleGVjKTsKICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cCkudG9Cb29sZWFuKGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
KS50b0Jvb2xlYW4oKTsKIH0KIAogI2lmIERGR19FTkFCTEUoVkVSQk9TRV9TUEVDVUxBVElPTl9G
QUlMVVJFKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24g
MTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03MywxMCArNzMsMTAgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFBoYXNlVHlwZT4KLXZvaWQgcnVuUGhhc2UoR3JhcGgmIGdyYXBoKQorYm9vbCBydW5QaGFz
ZShHcmFwaCYgZ3JhcGgpCiB7CiAgICAgUGhhc2VUeXBlIHBoYXNlKGdyYXBoKTsKLSAgICBwaGFz
ZS5ydW4oKTsKKyAgICByZXR1cm4gcGhhc2UucnVuKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIG1fY291bnQgPSAwOwpA
QCAtNzcsNiArNzcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBkb1JvdW5kT2ZEb3VibGVWb3Rp
bmcoKTsKICAgICAgICAgICAgIHByb3BhZ2F0ZUJhY2t3YXJkKCk7CiAgICAgICAgIH0gd2hpbGUg
KG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
CiBwcml2YXRlOgpAQCAtODMxLDkgKzgzMyw5IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAgICAg
Ci12b2lkIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQorYm9vbCBw
ZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKEdyYXBoJiBncmFwaCkKIHsKLSAgICBydW5QaGFz
ZTxQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFz
ZTxQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBhcml0
aG1ldGljIG5vZGVzKSBkbyBub3QgcXVhbGlmeSBmb3IgYW55IG9mIHRoZXNlIGNhdGVnb3JpZXMu
IEJ1dCBhZnRlciBydW5uaW5nCiAvLyB0aGlzIHBoYXNlLCB3ZSdsbCBoYXZlIGZ1bGwgaW5mb3Jt
YXRpb24gZm9yIHRoZSBleHBlY3RlZCB0eXBlIG9mIGVhY2ggbm9kZS4KIAotdm9pZCBwZXJmb3Jt
UHJlZGljdGlvblByb3BhZ2F0aW9uKEdyYXBoJik7Citib29sIHBlcmZvcm1QcmVkaWN0aW9uUHJv
cGFnYXRpb24oR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRzo6UGhhc2UKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
ZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewogICAgICAgICBib29s
IGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgZG8gewpAQCAtNjMsNyArNjMsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQorICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTY2LDkg
KzE2Nyw5IEBAIHByaXZhdGU6CiAKIH07CiAKLXZvaWQgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1p
bmF0aW9uKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0aW9u
KEdyYXBoJiBncmFwaCkKIHsKLSAgICBydW5QaGFzZTxSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBo
YXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPFJlZHVuZGFudFBoaUVsaW1pbmF0aW9u
UGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlF
bGltaW5hdGlvblBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIEdyYXBoOwogLy8gV2UgaW5zZXJ0ZWQgbWFueSBjYW4t
YmUtcmVkdW5kYW50IFBoaSBub2RlcyB3aGVuIGJ1aWxkaW5nIHRoZSBncmFwaC4KIC8vIFRoaXMg
cGhhc2Ugd2lsbCBqdXN0IHJlbW92ZSB0aGVtLgogCi12b2lkIHBlcmZvcm1SZWR1bmRhbnRQaGlF
bGltaW5hdGlvbihHcmFwaCYpOworYm9vbCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24o
R3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShERUJVR19W
RVJCT1NFKQogICAgICAgICBkYXRhTG9nKCJQcmVzZXJ2ZWQgdmFyczogIik7CkBAIC0xMTQsMTIg
KzExNCwxNCBAQCBwdWJsaWM6CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAg
ICBkYXRhTG9nKCJOdW0gY2FsbGVlIHJlZ2lzdGVyczogJXVcbiIsIGNhbGxlZVJlZ2lzdGVycyk7
CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07CiAKLXZv
aWQgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmIGdyYXBoKQorYm9vbCBw
ZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVu
UGhhc2U8VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlPihncmFwaCk7CisgICAgcmV0dXJu
IHJ1blBoYXNlPFZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZT4oZ3JhcGgpOwogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgJ
KHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcg
QEAgY2xhc3MgR3JhcGg7CiAvLyBmb3IgbG9vay11cCB0YWJsZXMgZm9yIHRoZSBsaW5lYXIgc2Nh
biByZWdpc3RlciBhbGxvY2F0b3IgdGhhdCB0aGUgYmFja2VuZAogLy8gdXNlcy4KIAotdm9pZCBw
ZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYpOworYm9vbCBwZXJmb3JtVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4NSw3ICsy
NTg1LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAg
ICAqLwogICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHNy
YyA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFu
KCFjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNhbGxGcmFtZSkpOworICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbighY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1
ZSgpLnRvQm9vbGVhbigpKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAg
ICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKIApAQCAtMzkwNSw3ICszOTA1
LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgICovCiAgICAgICAgIGludCBjb25k
ID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihj
YWxsRnJhbWUpKSB7CisgICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRv
Qm9vbGVhbigpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAgICAgICAgICAgQ0hF
Q0tfRk9SX1RJTUVPVVQoKTsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTM5
MjUsNyArMzkyNSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICAqLwogICAgICAg
ICBpbnQgY29uZCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSB2UENb
Ml0udS5vcGVyYW5kOwotICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCku
dG9Cb29sZWFuKGNhbGxGcmFtZSkpIHsKKyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoY29uZCku
anNWYWx1ZSgpLnRvQm9vbGVhbigpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAg
ICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVPVVQoKTsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKQEAgLTM5NDIsNyArMzk0Miw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAg
ICovCiAgICAgICAgIGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHRh
cmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29uZCku
anNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7CisgICAgICAgIGlmIChjYWxsRnJhbWUt
PnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbigpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFy
Z2V0OwogICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgICAgICB9CkBAIC0zOTU4
LDcgKzM5NTgsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAqLwogICAgICAgICBp
bnQgY29uZCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0u
dS5vcGVyYW5kOwotICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9C
b29sZWFuKGNhbGxGcmFtZSkpIHsKKyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoY29uZCkuanNW
YWx1ZSgpLnRvQm9vbGVhbigpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAgICAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NTcsNyArMjg1
Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzQm9vbGVhbighc3JjLnRvQm9vbGVhbihjYWxsRnJhbWUpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzQm9vbGVhbighc3JjLnRvQm9vbGVhbigpKTsKICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
IH0KQEAgLTI4NzAsNyArMjg3MCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKGludCwgb3BfanRy
dWUpCiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwog
Ci0gICAgYm9vbCByZXN1bHQgPSBzcmMxLnRvQm9vbGVhbihjYWxsRnJhbWUpOworICAgIGJvb2wg
cmVzdWx0ID0gc3JjMS50b0Jvb2xlYW4oKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VO
RCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwNyw3ICs1MDcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X3Jl
Z2V4CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbm90KQogewogICAgIExMSU5UX0JF
R0lOKCk7Ci0gICAgTExJTlRfUkVUVVJOKGpzQm9vbGVhbighTExJTlRfT1BfQygyKS5qc1ZhbHVl
KCkudG9Cb29sZWFuKGV4ZWMpKSk7CisgICAgTExJTlRfUkVUVVJOKGpzQm9vbGVhbighTExJTlRf
T1BfQygyKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2VxKQpAQCAtMTExMCwxMyArMTExMCwxMyBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfam1wX3Njb3BlCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
anRydWUpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBMTElOVF9CUkFOQ0gob3BfanRydWUs
IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7CisgICAgTExJTlRfQlJB
TkNIKG9wX2p0cnVlLCBMTElOVF9PUF9DKDEpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSk7CiB9CiAK
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qZmFsc2UpCiB7CiAgICAgTExJTlRfQkVH
SU4oKTsKLSAgICBMTElOVF9CUkFOQ0gob3BfamZhbHNlLCAhTExJTlRfT1BfQygxKS5qc1ZhbHVl
KCkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBMTElOVF9CUkFOQ0gob3BfamZhbHNlLCAhTExJTlRf
T1BfQygxKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfamxlc3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc5Nyw3ICs3OTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwot
ICAgICAgICAgICAgaWYgKHJlc3VsdC50b0Jvb2xlYW4oZXhlYykpCisgICAgICAgICAgICBpZiAo
cmVzdWx0LnRvQm9vbGVhbigpKQogICAgICAgICAgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJl
Y3RJbmRleChleGVjLCBmaWx0ZXJJbmRleCsrLCB2KTsKICAgICAgICAgfQogICAgICAgICBpZiAo
ayA9PSBsZW5ndGgpCkBAIC04MTgsNyArODE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsK
IAogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKTsKLSAgICAgICAgaWYgKHJlc3Vs
dC50b0Jvb2xlYW4oZXhlYykpCisgICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFuKCkpCiAgICAg
ICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgZmlsdGVySW5kZXgrKywg
dik7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0QXJyYXkpOwpAQCAt
OTE3LDcgKzkxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
ICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAg
ICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgICAgICBpZiAoIXJl
c3VsdC50b0Jvb2xlYW4oY2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpKQorICAgICAgICAg
ICAgaWYgKCFyZXN1bHQudG9Cb29sZWFuKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTkzNCw3
ICs5MzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICAgICAgYm9vbCBwcmVkaWNhdGVSZXN1bHQg
PSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgZWFj
aEFyZ3VtZW50cykudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBib29sIHByZWRpY2F0ZVJlc3Vs
dCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBl
YWNoQXJndW1lbnRzKS50b0Jvb2xlYW4oKTsKICAgICAgICAgaWYgKCFwcmVkaWNhdGVSZXN1bHQp
IHsKICAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTEwMjUsNyArMTAyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1i
ZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsK
ICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAg
ICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbihjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkp
CisgICAgICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbigpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTEwNDIsNyArMTA0Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgICAgICBib29sIHByZWRp
Y2F0ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBw
bHlUaGlzLCBlYWNoQXJndW1lbnRzKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJvb2wgcHJl
ZGljYXRlUmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBh
cHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbigpOwogICAgICAgICBpZiAocHJlZGlj
YXRlUmVzdWx0KSB7CiAgICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4odHJ1ZSk7CiAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xl
YW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksNyArNDksNyBAQCB2b2lkIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24oCiBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVj
dDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNh
bGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAg
b2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFuKGFyZ3Mu
YXQoMCkudG9Cb29sZWFuKGV4ZWMpKSk7CisgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwganNCb29sZWFuKGFyZ3MuYXQoMCkudG9Cb29sZWFuKCkpKTsKICAgICBy
ZXR1cm4gb2JqOwogfQogCkBAIC02OCw3ICs2OCw3IEBAIENvbnN0cnVjdFR5cGUgQm9vbGVhbkNv
bnN0cnVjdG9yOjpnZXRDb24KIC8vIEVDTUEgMTUuNi4xCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihleGVjLT5hcmd1bWVudCgwKS50
b0Jvb2xlYW4oZXhlYykpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihl
eGVjLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oKSkpOwogfQogCiBDYWxsVHlwZSBCb29sZWFuQ29u
c3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpA
QCAtOTYsNyArOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQmFzaWMgY29udmVy
c2lvbnMuCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhl
Y1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0
UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29u
c3Q7Ci0gICAgICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBi
b29sIHRvQm9vbGVhbigpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBkb3VibGUg
dG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
T2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyMiwxMSArNDIyLDYgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZXhlYywg
b2JqZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJvb2wgSlNP
YmplY3Q6OnRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwot
fQotCiBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsK
ICAgICBKU1ZhbHVlIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9u
IDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAg
ICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5
cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVO
dW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25zdDsKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0Owog
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZyogdG9TdHJpbmcoRXhlY1N0YXRlKikg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3Bw
CShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNyBAQCBib29sIEpTU3RyaW5n
OjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29s
IEpTU3RyaW5nOjp0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QKK2Jvb2wgSlNTdHJpbmc6OnRv
Qm9vbGVhbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGVuZ3RoOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTUsNyArMjE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShF
eGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0
UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29u
c3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVj
dCopIGNvbnN0OwogICAgICAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CkBA
IC00MzUsMjMgKzQzNSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBib29sIGlz
SlNTdHJpbmcoSlNWYWx1ZSB2KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIHYuYXNDZWxsKCktPmNs
YXNzSW5mbygpID09ICZKU1N0cmluZzo6c19pbmZvOyB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU0Nl
bGw6OnRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgaW5saW5lIGJvb2wgSlND
ZWxsOjp0b0Jvb2xlYW4oKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzU3RyaW5nKCkpIAot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhpcyktPnRv
Qm9vbGVhbihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0
cmluZyo+KHRoaXMpLT50b0Jvb2xlYW4oKTsKICAgICAgICAgcmV0dXJuICFzdHJ1Y3R1cmUoKS0+
dHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgLy8gLS0t
IEpTVmFsdWUgaW5saW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgCi0gICAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAg
ICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjp0b0Jvb2xlYW4oKSBjb25zdAogICAgIHsKICAgICAgICAg
aWYgKGlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybiBhc0ludDMyKCk7CiAgICAgICAgIGlm
IChpc0RvdWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGFzRG91YmxlKCkgPiAwLjAgfHwgYXNE
b3VibGUoKSA8IDAuMDsgLy8gZmFsc2UgZm9yIE5hTgogICAgICAgICBpZiAoaXNDZWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gYXNDZWxsKCktPnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgICAg
IHJldHVybiBhc0NlbGwoKS0+dG9Cb29sZWFuKCk7CiAgICAgICAgIHJldHVybiBpc1RydWUoKTsg
Ly8gZmFsc2UsIG51bGwsIGFuZCB1bmRlZmluZWQgYWxsIGNvbnZlcnQgdG8gZmFsc2UuCiAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0g
Tm9QcmVmZXJlbmNlKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhl
Y1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKTsKIAotICAgICAgICBib29sIHRvQm9v
bGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsK
IAogICAgICAgICAvLyB0b051bWJlciBjb252ZXJzaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHNpZGUg
ZWZmZWN0IGZyZWUgaWYgYW4gZXhjZXB0aW9uIGhhcwogICAgICAgICAvLyBiZWVuIHNldCBpbiB0
aGUgRXhlY1N0YXRlIGFscmVhZHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxNCwxNCArMjE0LDE0IEBAIHN0YXRpYyBib29sIHRvUHJvcGVydHlEZXNj
cmlwdG9yKEV4ZWNTdGEKIAogICAgIFByb3BlcnR5U2xvdCBlbnVtZXJhYmxlU2xvdChkZXNjcmlw
dGlvbik7CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUsIGVudW1lcmFibGVTbG90KSkgewotICAgICAgICBk
ZXNjLnNldEVudW1lcmFibGUoZW51bWVyYWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmVudW1lcmFibGUpLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgIGRlc2Mu
c2V0RW51bWVyYWJsZShlbnVtZXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuZW51bWVyYWJsZSkudG9Cb29sZWFuKCkpOwogICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUHJv
cGVydHlTbG90IGNvbmZpZ3VyYWJsZVNsb3QoZGVzY3JpcHRpb24pOwogICAgIGlmIChkZXNjcmlw
dGlvbi0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25maWd1
cmFibGUsIGNvbmZpZ3VyYWJsZVNsb3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxl
KGNvbmZpZ3VyYWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bmZpZ3VyYWJsZSkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgZGVzYy5zZXRDb25maWd1cmFi
bGUoY29uZmlndXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y29uZmlndXJhYmxlKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yMzYsNyArMjM2LDcg
QEAgc3RhdGljIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YQogCiAgICAgUHJvcGVy
dHlTbG90IHdyaXRhYmxlU2xvdChkZXNjcmlwdGlvbik7CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlLCB3cml0
YWJsZVNsb3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0V3JpdGFibGUod3JpdGFibGVTbG90LmdldFZh
bHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSkudG9Cb29sZWFuKGV4ZWMp
KTsKKyAgICAgICAgZGVzYy5zZXRXcml0YWJsZSh3cml0YWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw3ICsy
NTEsNyBAQCB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlCiAKIHZvaWQg
c2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
YmFzZU9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBhc1JlZ0V4cENvbnN0cnVjdG9yKGJh
c2VPYmplY3QpLT5zZXRNdWx0aWxpbmUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBhc1Jl
Z0V4cENvbnN0cnVjdG9yKGJhc2VPYmplY3QpLT5zZXRNdWx0aWxpbmUodmFsdWUudG9Cb29sZWFu
KCkpOwogfQogCiAvLyBFQ01BIDE1LjEwLjQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3LDExICsxNDcsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWdFeHBQcm90bwogCiAgICAgY2hhciBwb3N0Zml4WzVdID0geyAnLycsIDAsIDAsIDAsIDAg
fTsKICAgICBpbnQgaW5kZXggPSAxOwotICAgIGlmICh0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmdsb2JhbCkudG9Cb29sZWFuKGV4ZWMpKQorICAgIGlmICh0aGlz
T2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmdsb2JhbCkudG9Cb29sZWFu
KCkpCiAgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnZyc7Ci0gICAgaWYgKHRoaXNPYmplY3Qt
PmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaWdub3JlQ2FzZSkudG9Cb29sZWFuKGV4
ZWMpKQorICAgIGlmICh0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmlnbm9yZUNhc2UpLnRvQm9vbGVhbigpKQogICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2kn
OwotICAgIGlmICh0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm11
bHRpbGluZSkudG9Cb29sZWFuKGV4ZWMpKQorICAgIGlmICh0aGlzT2JqZWN0LT5nZXQoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLm11bHRpbGluZSkudG9Cb29sZWFuKCkpCiAgICAgICAgIHBv
c3RmaXhbaW5kZXhdID0gJ20nOwogICAgIFVTdHJpbmcgc291cmNlID0gdGhpc09iamVjdC0+Z2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zb3VyY2UpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICAvLyBJZiBzb3VyY2UgaXMgZW1wdHksIHVzZSAiLyg/OikvIiB0byBhdm9p
ZCBjb2xsaWRpbmcgd2l0aCBjb21tZW50IHN5bnRheAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138280</attachid>
            <date>2012-04-22 17:06:19 -0700</date>
            <delta_ts>2012-04-22 17:58:19 -0700</delta_ts>
            <desc>it seems to work</desc>
            <filename>cfgsimplify_patch_2.diff</filename>
            <type>text/plain</type>
            <size>80828</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0ODYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNCBA
QAorMjAxMi0wNC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTUzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGlu
IHByb2dyZXNzLgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNW
YWx1ZVRvQm9vbGVhbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAg
ICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6
cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAg
ICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2Uu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChDRkdTaW1wbGlmaWNhdGlv
blBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpDRkdT
aW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpbmRPcGVyYW5kU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjprZWVwT3BlcmFuZEFsaXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlm
aWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpD
RkdTaW1wbGlmaWNhdGlvblBoYXNlOjptZXJnZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6
cGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NT
RVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cnVuKToKKyAgICAgICAg
KENTRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2xvYmJlcnNXb3JsZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuaDoKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5oOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3VjY2Vz
c29yRm9yQ29uZGl0aW9uKToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om51bVN1Y2Nlc3NvcnMpOgorICAgICAgICAo
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3JGb3JDb25kaXRpb24pOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR1BoYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6cnVuUGhh
c2UpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbik6CisgICAgICAgICog
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAg
ICAgICAqIGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpydW4pOgorICAgICAgICAo
SlNDOjpERkc6OnBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbik6CisgICAgICAgICogZGZn
L0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OnBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3Bw
OgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
RXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAqIHJ1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9v
bGVhbik6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAg
KEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjp0b0Jvb2xlYW4pOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjp0
b1Byb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4
cFByb3RvRnVuY1RvU3RyaW5nKToKKwogMjAxMi0wNC0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaGF2ZSBjb25zdGFudCBwcm9wYWdhdGlv
bgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9vbCBKU1ZhbHVlVG9Cb29sZWFuKEpT
Q29udGV4dFJlZiBjdHgsIAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKLSAgICByZXR1cm4ganNWYWx1
ZS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIGpzVmFsdWUudG9Cb29sZWFuKCk7CiB9CiAK
IGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1
ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw4IEBACiAJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZEMTQ3
MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYzQjNBMUExNTNF
NjhGMjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE3MTUzRTY4RUYwMDNFRDBG
RiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGM0IzQTFCMTUzRTY4
RjQwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8q
IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyogREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDUxNDYwQ0JBQjAw
MTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJl
Z2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNEIxNDYwQ0Q2RTAw
MTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc2OCw2ICs3
NzAsOCBAQAogCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCM0ExODE1M0U2
OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNCM0EyNDE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NGR1NpbXBsaWZp
Y2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMDQ1LDYgKzIwNDksOCBAQAogCQkJCTBGN0IyOTQ4MTRDM0NE
MjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLywKIAkJCQkwRkZGQzk0QjE0RUY5MDk1
MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTRDMTRFRjkwOTUwMEM3
MjUzMiAvKiBERkdDRkFQaGFzZS5oICovLAorCQkJCTBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAv
KiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjNCM0EyNTE1NDRDOTkx
MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovLAogCQkJCTBGRkZDOTRE
MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVG
OTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEZEODJFMUUxNDE3MkMyRjAw
MTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8sCkBAIC0yNTgzLDYgKzI1ODksNyBAQAog
CQkJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJs
ZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0
NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYz
QjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMzE0Nyw2ICszMTU0LDcgQEAKIAkJCQk4NjQyQzUxMjE1MUMwODNEMDA0
NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2
RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8q
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDYgKzk5LDggQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0
aWFsaXplKEdyYXBoJiBncgogICAgIFBST0ZJTEUoRkxBR19GT1JfQkxPQ0tfSU5JVElBTElaQVRJ
T04pOwogICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKTsKICAg
ICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICByb290LT5jZmFIYXNWaXNpdGVk
ID0gZmFsc2U7CisgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlhYmxlc0F0SGVh
ZC5hcmd1bWVudChpKV07CiAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0QXJndW1lbnQp
OwpAQCAtMTQzLDExICsxNDUsMzMgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdy
YXBoJiBncgogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChQ
cmVkaWN0RmxvYXQ2NEFycmF5KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcm9vdC0+dmFs
dWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKKyAgICAgICAgCisgICAgICAgIHJvb3Qt
PnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwogICAgIH0KICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsK
LSAgICAgICAgaWYgKCFncmFwaC5sb2NhbElzQ2FwdHVyZWQoaSkpCisgICAgICAgIGlmIChncmFw
aC5sb2NhbElzQ2FwdHVyZWQoaSkpCisgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9j
YWwoaSkubWFrZVRvcCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmxvY2Fs
KGkpLmNsZWFyKCk7CisgICAgfQorICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMSA7
IGJsb2NrSW5kZXggPCBncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
ICghYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJv
b3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5tYWtlVG9wKCk7CisgICAgICAgIGJsb2NrLT5jZmFT
aG91bGRSZXZpc2l0ID0gZmFsc2U7CisgICAgICAgIGJsb2NrLT5jZmFIYXNWaXNpdGVkID0gZmFs
c2U7CisgICAgICAgIGJsb2NrLT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgKytpKSB7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkp
LmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNs
ZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgYmxvY2st
PnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVl
c0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC01MjYs
OCArNTUwLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKICAg
ICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDYg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAvLyBQYXJz
ZSBhIHNpbmdsZSBiYXNpYyBibG9jayBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMuCiAgICAgYm9v
bCBwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KTsKLSAgICAvLyBGaW5kIHJlYWNoYWJsZSBjb2Rl
IGFuZCBzZXR1cCBwcmVkZWNlc3NvciBsaW5rcyBpbiB0aGUgZ3JhcGgncyBCYXNpY0Jsb2Nrcy4K
LSAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOwotICAgIC8vIEVucXVldWUgYSBibG9j
ayBvbnRvIHRoZSB3b3JrbGlzdCwgaWYgbmVjZXNzYXJ5LgotICAgIHZvaWQgaGFuZGxlU3VjY2Vz
c29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4LCBCbG9ja0lu
ZGV4IHN1Y2Nlc3Nvcik7CiAgICAgLy8gTGluayBibG9jayBzdWNjZXNzb3JzLgogICAgIHZvaWQg
bGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0
cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRC
bG9ja3MsIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9zc2libGVUYXJnZXRzKTsKQEAgLTI1ODUsNDEg
KzI1ODEsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2tzKFZlY3RvcjxVCiAgICAg
fQogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2Nr
SW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBz
dWNjZXNzb3JJbmRleCkKLXsKLSAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2dyYXBoLm1f
YmxvY2tzW3N1Y2Nlc3NvckluZGV4XS5nZXQoKTsKLSAgICBpZiAoIXN1Y2Nlc3Nvci0+aXNSZWFj
aGFibGUpIHsKLSAgICAgICAgc3VjY2Vzc29yLT5pc1JlYWNoYWJsZSA9IHRydWU7Ci0gICAgICAg
IHdvcmtsaXN0LmFwcGVuZChzdWNjZXNzb3JJbmRleCk7Ci0gICAgfQotICAgIAotICAgIHN1Y2Nl
c3Nvci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOwotfQotCi12b2lkIEJ5dGVD
b2RlUGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQotewotICAgIFZlY3RvcjxCbG9ja0lu
ZGV4LCAxNj4gd29ya2xpc3Q7Ci0gICAgd29ya2xpc3QuYXBwZW5kKDApOwotICAgIG1fZ3JhcGgu
bV9ibG9ja3NbMF0tPmlzUmVhY2hhYmxlID0gdHJ1ZTsKLSAgICB3aGlsZSAoIXdvcmtsaXN0Lmlz
RW1wdHkoKSkgewotICAgICAgICBCbG9ja0luZGV4IGluZGV4ID0gd29ya2xpc3QubGFzdCgpOwot
ICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIAotICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbaW5kZXhdLmdldCgpOwotICAgICAgICBBU1NF
UlQoYmxvY2stPmlzTGlua2VkKTsKLSAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaXNKdW1wKCkpCi0gICAgICAgICAgICBoYW5kbGVT
dWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKLSAgICAg
ICAgZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7Ci0gICAgICAgICAgICBoYW5kbGVTdWNjZXNz
b3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKLSAgICAgICAgICAg
IGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4
KCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpidWlsZE9w
ZXJhbmRNYXBzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhdmVCdWlsdE9wZXJhbmRNYXBz
KQpAQCAtMjgzMSw3ICsyNzkyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAg
IHBhcnNlQ29kZUJsb2NrKCk7CiAKICAgICBsaW5rQmxvY2tzKGlubGluZVN0YWNrRW50cnkubV91
bmxpbmtlZEJsb2NrcywgaW5saW5lU3RhY2tFbnRyeS5tX2Jsb2NrTGlua2luZ1RhcmdldHMpOwot
ICAgIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOworICAgIG1fZ3JhcGguZGV0ZXJtaW5lUmVhY2hh
YmlsaXR5KCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAg
IGRhdGFMb2coIlByb2Nlc3NpbmcgbG9jYWwgdmFyaWFibGUgcGhpcy5cbiIpOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24g
MTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBtX2NvdW50ID0gMDsKQEAgLTY1LDEy
ICs2NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAg
ICAgICAgIHBlcmZvcm1Gb3J3YXJkQ0ZBKCk7CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiBwcml2YXRlOgog
ICAgIHZvaWQgcGVyZm9ybUJsb2NrQ0ZBKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7CiAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
aWYgKCFibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCkKICAgICAgICAgICAgIHJldHVybjsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0xMjYsOSArMTMwLDkgQEAg
cHJpdmF0ZToKICNlbmRpZgogfTsKIAotdm9pZCBwZXJmb3JtQ0ZBKEdyYXBoJiBncmFwaCkKK2Jv
b2wgcGVyZm9ybUNGQShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Q0ZBUGhhc2U+KGdy
YXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q0ZBUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkFQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZB
UGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkFQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIEdyYXBo
OwogLy8gdGhlIGNvZGUgYmxvY2suIEl0J3MgYWxzbyByZXNwb25zaWJsZSBmb3IgaWRlbnRpZnlp
bmcgZGVhZCBjb2RlLCBhbmQgaW4gdGhlCiAvLyBmdXR1cmUgc2hvdWxkIGJlIHVzZWQgYXMgYSBo
b29rIGZvciBjb25zdGFudCBwcm9wYWdhdGlvbi4KIAotdm9pZCBwZXJmb3JtQ0ZBKEdyYXBoJik7
Citib29sIHBlcmZvcm1DRkEoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRl
LmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisj
aW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDRkdTaW1wbGlmaWNhdGlvblBo
YXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBDRkdTaW1wbGlmaWNhdGlvblBoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIkNGRyBzaW1wbGlmaWNhdGlv
biIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBi
b29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArKyBi
bG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3
aXRjaCAobV9ncmFwaFtibG9jay0+bGFzdCgpXS5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEp1
bXA6IHsKKyAgICAgICAgICAgICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3Ig
LT4gbWVyZ2UuCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5z
dWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3Io
YmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnNbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ID09IGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0lu
ZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCksIE5vQmxvY2spOworICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEJsb2NrIG9ubHkgaGFzIGEganVtcCAtPiBy
ZW1vdmUuIFRoaXMgaXMgdHJpY2t5IHRob3VnaCBiZWNhdXNlIG9mCisgICAgICAgICAgICAgICAg
Ly8gbGl2ZW5lc3MuIFdoYXQgd2UgcmVhbGx5IHdhbnQgaXMgdG8gc2xhbSBpbiBhIHBoYW50b20g
YXQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBibG9jaywgYWZ0ZXIgdGhlIHRl
cm1pbmFsLiBCdXQgd2UgY2FuJ3QgcmlnaHQgbm93LiA6LSgKKyAgICAgICAgICAgICAgICAvLyBJ
ZGVhOiB3aGF0IGlmIEkgc2xhbSB0aGUgZ2hvc3RpZXMgaW50byBteSBzdWNjZXNzb3I/IE5vcGUs
IHRoYXQncworICAgICAgICAgICAgICAgIC8vIHN1Ym9wdGltYWwsIGJlY2F1c2UgaWYgbXkgc3Vj
Y2Vzc29yIGhhcyBtdWx0aXBsZSBwcmVkZWNlc3NvcnMgdGhlbiB3ZSdsbAorICAgICAgICAgICAg
ICAgIC8vIGJlIGtlZXBpbmcgYWxpdmUgdGhpbmdzIG9uIG90aGVyIHByZWRlY2Vzc29yIGVkZ2Vz
IHVubmVjZXNzYXJpbHkuCisgICAgICAgICAgICAgICAgLy8gV2hhdCB3ZSByZWFsbHkgbmVlZCBp
cyB0aGUgbm90aW9uIG9mIGVuZC1vZi1ibG9jayBnaG9zdGllcyEKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
QnJhbmNoOiB7CisgICAgICAgICAgICAgICAgLy8gQnJhbmNoIG9uIGNvbnN0YW50IC0+IGpldHRp
c29uIHRoZSBub3QtdGFrZW4gYmxvY2sgYW5kIG1lcmdlLgorICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoW21fZ3JhcGhbYmxvY2stPmxhc3QoKV0uY2hpbGQxKCldLmhhc0NvbnN0YW50KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgYm9vbCBjb25kaXRpb24gPSBtX2dyYXBoLnZhbHVlT2ZKU0Nv
bnN0YW50KG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0uY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1lcmdlQmxvY2tzKAorICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJ
bmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGJsb2NrLCBjb25kaXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5z
dWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssICFjb25kaXRpb24pKTsKKyAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBCcmFuY2gg
dG8gc2FtZSBkZXN0aW5hdGlvbiAtPiBqdW1wLgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB0
aGlzIHdpbGwgY3VycmVudGx5IG5vdCBiZSBoaXQgYmVjYXVzZSBvZiB0aGUgbGFjayBvZiBqdW1w
LW9ubHkKKyAgICAgICAgICAgICAgICAvLyBibG9jayBzaW1wbGlmaWNhdGlvbi4KKyAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApID09IG1fZ3JhcGguc3VjY2Vz
c29yKGJsb2NrLCAxKSkgeworICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0lu
ZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCksIE5vQmxvY2spOworICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGNoYW5n
ZWQpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGNoYW5nZWQgdGhlIGdyYXBoLCB0aGVuIHNvbWUg
YmxvY2tzIG1heSBoYXZlIGJlY29tZSB1bnJlYWNoYWJsZS4gTmVlZCB0bworICAgICAgICAgICAg
Ly8gcGVyZm9ybSBhIGJsb2NrIEdDIG9mIHNvcnRzLgorICAgICAgICAgICAgbV9ncmFwaC5yZXNl
dFJlYWNoYWJpbGl0eSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gY2hh
bmdlZDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTm9kZUluZGV4IGZpbmRPcGVyYW5kU291cmNl
KGNvbnN0IE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiYgdmFyaWFibGVzLCBp
bnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSB2YXJpYWJs
ZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisg
ICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhd
Lm9wKCkgPT0gU2V0TG9jYWwpCisgICAgICAgICAgICByZXR1cm4gbV9ncmFwaFtub2RlSW5kZXhd
LmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgfQorICAg
IAorICAgIHZvaWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Jsb2NrKiBibG9jaywgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIGlmIChtX2dyYXBoLmlz
Q2FwdHVyZWQob3BlcmFuZCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBmaW5kT3BlcmFuZFNvdXJjZShibG9jay0+dmFyaWFibGVzQXRUYWlsLCBv
cGVyYW5kKTsKKyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIE5vZGVJbmRleCBwaGFudG9tTm9kZUluZGV4
ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgIE5vZGUgcGhhbnRvbShQaGFudG9tLCBjb2RlT3Jp
Z2luLCBub2RlSW5kZXgpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChwaGFudG9tKTsKKyAgICAg
ICAgbV9ncmFwaC5yZWYocGhhbnRvbU5vZGVJbmRleCk7CisgICAgICAgIGJsb2NrLT5hcHBlbmQo
cGhhbnRvbU5vZGVJbmRleCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZml4UG9zc2libGVHZXRM
b2NhbChCYXNpY0Jsb2NrKiBibG9jaywgRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIE5vZGUm
IGNoaWxkID0gbV9ncmFwaFtlZGdlXTsKKyAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9j
YWwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX2dyYXBoLmlzQ2FwdHVyZWQo
Y2hpbGQubG9jYWwoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIE5vZGVJbmRleCBv
cmlnaW5hbE5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChjaGlsZC5s
b2NhbCgpKTsKKyAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZUluZGV4ICE9IE5vTm9kZSk7Cisg
ICAgICAgIE5vZGUqIG9yaWdpbmFsTm9kZSA9ICZtX2dyYXBoW29yaWdpbmFsTm9kZUluZGV4XTsK
KyAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAg
IC8vIFBvc3NpYmlsaXRpZXM6CisgICAgICAgIC8vIFNldExvY2FsIC0+IHRoZSBzZWNvbmRCbG9j
ayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhpbmcgdGhhdCBpcyBpbW1lZGlhdGVseQor
ICAgICAgICAvLyAgICAgYXZhaWxhYmxlIGluIHRoZSBmaXJzdCBibG9jayB3aXRoIGEga25vd24g
Tm9kZUluZGV4LgorICAgICAgICAvLyBHZXRMb2NhbCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgZ2V0
dGluZyB0aGUgdmFsdWUgb2Ygc29tZXRoaW5nIHRoYXQgdGhlIGZpcnN0CisgICAgICAgIC8vICAg
ICBibG9jayBhbHNvIGdldHMuCisgICAgICAgIC8vIFBoaSAtPiB0aGUgc2Vjb25kQmxvY2sgaXMg
YXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9wZXJhbmQgdGhhdCB0aGUgZmlyc3QgYmxvY2sK
KyAgICAgICAgLy8gICAgIHdhcyBhbHNvIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbi4KKyAgICAg
ICAgLy8gU2V0QXJndW1lbnQgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1h
bGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlCisgICAgICAgIC8vICAgICBmaXJzdCBibG9jayB3
YXMga2VlcGluZyBhbGl2ZSBieSB2aXJ0dWUgb2YgdGhlIGZpcnN0QmxvY2sgYmVpbmcgdGhlIHJv
b3QgYW5kCisgICAgICAgIC8vICAgICB0aGUgb3BlcmFuZCBiZWluZyBhbiBhcmd1bWVudC4KKyAg
ICAgICAgLy8gRmx1c2ggLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2
ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlIGZpcnN0CisgICAgICAgIC8vICAgICBibG9jayB3YXMg
Zm9yY2luZyB0byBiZSBhbGl2ZSwgc28gdGhlIHNlY29uZCBibG9jayBzaG91bGQgcmVmZXIgY2hp
bGQgb2YKKyAgICAgICAgLy8gICAgIHRoZSBmbHVzaC4KKyAgICAgICAgaWYgKG9yaWdpbmFsTm9k
ZS0+b3AoKSA9PSBGbHVzaCkgeworICAgICAgICAgICAgb3JpZ2luYWxOb2RlSW5kZXggPSBvcmln
aW5hbE5vZGUtPmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBvcmlnaW5hbE5vZGUgPSAm
bV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRleF07CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChv
cmlnaW5hbE5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAg
ICAgRWRnZSBuZXdFZGdlID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKTsKKyAgICAgICAgICAgIEVk
Z2Ugb2xkRWRnZSA9IGVkZ2U7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKKyAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CisgICAgICAgICAgICBlZGdlID0gbmV3
RWRnZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2V0TG9j
YWw6CisgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7CisgICAg
ICAgICAgICBFZGdlIG5ld0VkZ2UgPSBlZGdlOworICAgICAgICAgICAgRWRnZSBvbGRFZGdlID0g
ZWRnZTsKKyAgICAgICAgICAgIG5ld0VkZ2Uuc2V0SW5kZXgob3JpZ2luYWxOb2RlSW5kZXgpOwor
ICAgICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CisgICAgICAgICAgICBtX2dyYXBoLmRl
cmVmKG9sZEVkZ2UpOworICAgICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIG1lcmdlQmxvY2tzKAorICAgICAgICBCbG9ja0luZGV4IGZpcnN0QmxvY2tJbmRl
eCwgQmxvY2tJbmRleCBzZWNvbmRCbG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9j
a0luZGV4KQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFkZCBhbGwgb2YgdGhlIG5vZGVz
IGluIHNlY29uZEJsb2NrIHRvIGZpcnN0QmxvY2ssIGJ1dCBpbiBzbyBkb2luZworICAgICAgICAv
LyBpdCB3aWxsIGFsc28gZW5zdXJlIHRoYXQgYW55IEdldExvY2FscyBmcm9tIHRoZSBzZWNvbmQg
YmxvY2sgdGhhdCByZWZlciB0bworICAgICAgICAvLyBTZXRMb2NhbHMgaW4gdGhlIGZpcnN0IGJs
b2NrIGFyZSByZWxpbmtlZC4gSWYgamV0dGlzb25lZEJsb2NrIGlzIG5vdCBOb0Jsb2NrLAorICAg
ICAgICAvLyB0aGVuIFBoYW50b21zIGFyZSBpbnNlcnRlZCBmb3IgYW55dGhpbmcgdGhhdCB0aGUg
amV0dGlzb25lZEJsb2NrIHdvdWxkIGhhdmUKKyAgICAgICAgLy8ga2VwdCBhbGl2ZS4KKyAgICAg
ICAgCisgICAgICAgIEJhc2ljQmxvY2sqIGZpcnN0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Zp
cnN0QmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEJhc2ljQmxvY2sqIHNlY29uZEJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tzZWNvbmRCbG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFJlbW92ZSB0aGUgdGVybWluYWwgb2YgZmlyc3RCbG9jayBzaW5jZSB3ZSBkb24ndCBu
ZWVkIGl0IGFueW1vcmUuIFdlbGwsIHdlIGRvbid0CisgICAgICAgIC8vIHJlYWxseSByZW1vdmUg
aXQ7IHdlIGFjdHVhbGx5IHR1cm4gaXQgaW50byBhIFBoYW50b20uCisgICAgICAgIEFTU0VSVCht
X2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgQ29kZU9y
aWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uY29k
ZU9yaWdpbjsKKyAgICAgICAgbV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLnNldE9wQW5kRGVm
YXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBBU1NFUlQobV9ncmFwaFtmaXJzdEJsb2NrLT5s
YXN0KCldLnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIAorICAgICAgICBpZiAoamV0dGlzb25l
ZEJsb2NrSW5kZXggIT0gTm9CbG9jaykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogamV0dGlz
b25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0KCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRpbWUgdG8gaW5zZXJ0IGdob3N0aWVzIGZv
ciB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGtlcHQgYWxpdmUgaW4gY2FzZSB3ZSBPU1IKKyAgICAg
ICAgICAgIC8vIGV4aXQgcHJpb3IgdG8gaGl0dGluZyB0aGUgZmlyc3RCbG9jaydzIHRlcm1pbmFs
LCBhbmQgZW5kIHVwIGdvaW5nIGRvd24gYQorICAgICAgICAgICAgLy8gZGlmZmVyZW50IHBhdGgg
dGhhbiBzZWNvbmRCbG9jay4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3Vt
ZW50cygpOyArK2kpCisgICAgICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShmaXJzdEJsb2Nr
LCBib3VuZGFyeUNvZGVPcmlnaW4sIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUo
Zmlyc3RCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBzZWNvbmRCbG9jay0+YXQoaSk7
CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAg
ICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBjaGlsZCBpcyBhIEdldExvY2FsLCB0aGVuIHdlIG1pZ2h0IGxpa2UgdG8gZml4IGl0LgorICAg
ICAgICAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSAr
IG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICArK2NoaWxkSWR4
KQorICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2Nr
LCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKG5vZGUuY2hpbGQxKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZml4UG9zc2li
bGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hp
bGRyZW4uY2hpbGQzKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKG5vZGVJbmRl
eCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0
VGFpbCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWw7CisgICAgICAgIGZpcnN0QmxvY2st
PnZhbHVlc0F0VGFpbCA9IHNlY29uZEJsb2NrLT52YWx1ZXNBdFRhaWw7CisgICAgICAgIAorICAg
ICAgICAvLyBGaXggdGhlIHByZWRlY2Vzc29ycyBvZiBteSBuZXcgc3VjY2Vzc29ycy4gVGhpcyBp
cyB0cmlja3ksIHNpbmNlIHdlIGFyZSBnb2luZyB0byByZXNldAorICAgICAgICAvLyBhbGwgcHJl
ZGVjZXNzb3JzIGFueXdheSBkdWUgdG8gcmVhY2hhYmlsaXR5IGFuYWx5c2lzLiBCdXQgd2UgbmVl
ZCB0byBmaXggdGhlCisgICAgICAgIC8vIHByZWRlY2Vzc29ycyBlYWdlcmx5IHRvIGVuc3VyZSB0
aGF0IHdlIGtub3cgd2hhdCB0aGV5IGFyZSBpbiBjYXNlIHRoZSBuZXh0IGJsb2NrIHdlCisgICAg
ICAgIC8vIGNvbnNpZGVyIGluIHRoaXMgcGhhc2Ugd2lzaGVzIHRvIHF1ZXJ5IHRoZSBwcmVkZWNl
c3NvcnMgb2Ygb25lIG9mIHRoZSBibG9ja3Mgd2UKKyAgICAgICAgLy8gYWZmZWN0ZWQuCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhmaXJzdEJsb2NrKTsg
aS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Js
b2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihmaXJzdEJsb2NrLCBpKV0uZ2V0KCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5zaXpl
KCk7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3Jz
W2pdID09IHNlY29uZEJsb2NrSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+
bV9wcmVkZWNlc3NvcnNbal0gPSBmaXJzdEJsb2NrSW5kZXg7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpeCB0aGUgcHJlZGVjZXNzb3JzIG9mIG15IGZv
cm1lciBzdWNjZXNzb3JzLiBBZ2Fpbiwgd2UnZCByYXRoZXIgbm90IGRvIHRoaXMsIGJ1dCBpdCdz
CisgICAgICAgIC8vIGFuIHVuZm9ydHVuYXRlIG5lY2Vzc2l0eS4gU2VlIGFib3ZlIGNvbW1lbnQu
CisgICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2tJbmRleCAhPSBOb0Jsb2NrKSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRp
c29uZWRCbG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnNbaV0gIT0gZmly
c3RCbG9ja0luZGV4KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldID0gamV0dGlzb25lZEJsb2Nr
LT5tX3ByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICAgICAgamV0dGlzb25lZEJsb2Nr
LT5tX3ByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9ibG9j
a3Nbc2Vjb25kQmxvY2tJbmRleF0uY2xlYXIoKTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1D
RkdTaW1wbGlmaWNhdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgcmV0dXJuIHJ1blBoYXNlPENG
R1NpbXBsaWZpY2F0aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2VfaAorI2RlZmluZSBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENGRyBzaW1wbGlmaWNh
dGlvbjoKKy8vCisvLyBqdW1wIHRvIHNpbmdsZSBwcmVkZWNlc3NvciAtPiBtZXJnZSBibG9ja3MK
Ky8vIGJyYW5jaCBvbiBjb25zdGFudCAtPiBqdW1wCisvLyBicmFuY2ggdG8gc2FtZSBibG9ja3Mg
LT4ganVtcAorLy8ganVtcC1vbmx5IGJsb2NrIC0+IHJlbW92ZQorLy8ga2lsbCBkZWFkIGNvZGUK
KworYm9vbCBwZXJmb3JtQ0ZHU2ltcGxpZmljYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMCArNDUs
MTEgQEAgcHVibGljOgogICAgICAgICAgICAgbV9yZXBsYWNlbWVudHNbaV0gPSBOb05vZGU7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KTsgKytibG9jaykKLSAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NTRSgqbV9ncmFwaC5tX2Jsb2Nr
c1tibG9ja10pOworICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKG1fZ3JhcGgubV9ibG9ja3Nb
YmxvY2tdLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIE1heWJlIHdlJ2xsIG5lZWQg
dG8gbWFrZSB0aGlzIHJlYXNvbiBhYm91dCB3aGV0aGVyIGl0IGNoYW5nZWQgdGhlIGdyYXBoIGlu
IGFuIGFjdGlvbmFibGUgd2F5PwogICAgIH0KICAgICAKIHByaXZhdGU6CkBAIC0xMzksNTIgKzE0
MCw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAotICAg
IGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIFBy
ZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwot
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVk
aWN0aW9uKCk7Ci0gICAgICAgIHJldHVybiBpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNO
dW1iZXJQcmVkaWN0aW9uKHJpZ2h0KTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBsb2dpY2FsTm90
SXNQdXJlKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rp
b24gPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJu
IGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikgfHwgIXByZWRpY3Rpb247Ci0gICAgfQot
ICAgIAotICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQotICAg
ICAgICAgICAgJiYgKChub2RlLm9wKCkgPT0gUHV0QnlWYWwgfHwgbm9kZS5vcCgpID09IFB1dEJ5
VmFsQWxpYXMpCi0gICAgICAgICAgICAgICAgPyBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlQcmVk
aWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAg
ICAgIDogaXNBY3Rpb25hYmxlQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
cHJlZGljdGlvbigpKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgY2xvYmJlcnNXb3JsZChOb2Rl
SW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9k
ZUluZGV4XTsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVDbG9iYmVyc1dvcmxkKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghKG5vZGUuZmxhZ3MoKSAmIE5v
ZGVNaWdodENsb2JiZXIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgewotICAgICAgICBjYXNlIFZhbHVlQWRkOgotICAgICAgICBjYXNlIENv
bXBhcmVMZXNzOgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0gICAgICAgIGNhc2UgQ29t
cGFyZUdyZWF0ZXI6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgY2Fz
ZSBDb21wYXJlRXE6Ci0gICAgICAgICAgICByZXR1cm4gIWlzUHJlZGljdGVkTnVtZXJpY2FsKG5v
ZGUpOwotICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6Ci0gICAgICAgICAgICByZXR1cm4gIWxvZ2lj
YWxOb3RJc1B1cmUobm9kZSk7Ci0gICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICBy
ZXR1cm4gIWJ5VmFsSXNQdXJlKG5vZGUpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSWYgYnkg
c29tZSBvZGRpdHkgd2UgaGl0IHRoaXMgY2FzZSBpbiByZWxlYXNlIGJ1aWxkIGl0J3Mgc2FmZXIg
dG8gaGF2ZSBDU0UgYXNzdW1lIHRoZSB3b3JzdC4KLSAgICAgICAgfQotICAgIH0KLSAgICAKICAg
ICBOb2RlSW5kZXggaW1wdXJlQ1NFKE5vZGUmIG5vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5k
ZXggY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQxKCkpOwpAQCAtMjE1LDcgKzE3MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMjM4LDcgKzE5
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgp
KQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTI1
NCwxNCArMjA5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewogICAgICAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAgICAgICBpZiAoIWJ5VmFsSXNQdXJlKG5vZGUpKQor
ICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGls
ZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9uaWNh
bGl6ZShjaGlsZDIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmICghYnlWYWxJc1B1cmUobm9k
ZSkpCisgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGlmIChub2Rl
LmNoaWxkMSgpID09IGNoaWxkMSAmJiBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fu
b25pY2FsaXplKGNoaWxkMikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxk
MygpLmluZGV4KCk7CkBAIC0yODAsNyArMjM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAvLyBBIHB1c2ggY2Fubm90IGFmZmVjdCBwcmV2aW91c2x5IGV4aXN0aW5nIGVsZW1lbnRzIGlu
IHRoZSBhcnJheS4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMzMxLDcgKzI4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAg
ICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSkgeworICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIFB1
dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxl
IGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAgICAvLyBjaGFu
Z2UuCkBAIC0zNDAsNyArMjk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzc3LDcgKzMz
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5
VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlm
IChieVZhbElzUHVyZShub2RlKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFs
SXNQdXJlKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1
bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBj
YXVzZSBhIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCkBAIC0zODYs
NyArMzQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAo
Y2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJl
cnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00MTYsNyArMzcxLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSXNQ
dXJlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9k
ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0
IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAgLy8g
aW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3Ry
dWN0dXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KQEAgLTQyNSw3ICszODAsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dv
cmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGlu
ZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTQ2MSwxMiArNDE2LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmIChpc0ZpeGVkSW5kZXhlZFN0b3JhZ2VPYmpl
Y3RQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSAmJiBieVZh
bElzUHVyZShub2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoaXNGaXhlZEluZGV4ZWRTdG9yYWdl
T2JqZWN0UHJlZGljdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkgJiYg
bV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC02
MTAsNiArNTY1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJc1N0cmluZzoKICAgICAgICAg
Y2FzZSBJc09iamVjdDoKICAgICAgICAgY2FzZSBJc0Z1bmN0aW9uOgorICAgICAgICBjYXNlIExv
Z2ljYWxOb3Q6CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC02MzUsMTggKzU5MSw5IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXJFcToKICAgICAgICAgY2FzZSBDb21wYXJlRXE6IHsKLSAgICAgICAgICAgIGlmIChpc1By
ZWRpY3RlZE51bWVyaWNhbChub2RlKSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBs
YWNlbWVudEluZGV4ID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGFj
ZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgaXNQcmVkaWN0ZWROdW1lcmljYWwobV9ncmFwaFtyZXBs
YWNlbWVudEluZGV4XSkpCi0gICAgICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHJlcGxh
Y2VtZW50SW5kZXgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKLSAgICAgICAgICAg
IGlmIChsb2dpY2FsTm90SXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5p
c1ByZWRpY3RlZE51bWVyaWNhbChub2RlKSkgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBy
ZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVw
bGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgbG9naWNhbE5vdElzUHVyZShtX2dyYXBoW3JlcGxh
Y2VtZW50SW5kZXhdKSkKKyAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBO
b05vZGUgJiYgbV9ncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChtX2dyYXBoW3JlcGxhY2VtZW50
SW5kZXhdKSkKICAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJ
bmRleCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTY1OSwxMiArNjA2
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKQorICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRl
eCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBpZiAoYnlWYWxJc1B1
cmUobm9kZSkgJiYgZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgp
LCBub2RlLmNoaWxkMigpLmluZGV4KCkpICE9IE5vTm9kZSkKKyAgICAgICAgICAgIGlmIChtX2dy
YXBoLmJ5VmFsSXNQdXJlKG5vZGUpICYmIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKSAhPSBOb05vZGUpCiAgICAgICAg
ICAgICAgICAgbm9kZS5zZXRPcChQdXRCeVZhbEFsaWFzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC03MDQsMTQgKzY1MSwxOSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAg
fQogICAgIAotICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2smIGJsb2NrKQorICAg
IHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAg
bV9jdXJyZW50QmxvY2sgPSAmYmxvY2s7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IExhc3ROb2RlVHlwZTsgKytpKQogICAgICAgICAg
ICAgbV9sYXN0U2VlbltpXSA9IFVJTlRfTUFYOwogCi0gICAgICAgIGZvciAobV9pbmRleEluQmxv
Y2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykg
ewotICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBibG9ja1ttX2luZGV4SW5CbG9ja107Cisg
ICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5z
aXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKKyAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0g
YmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIHBlcmZvcm1Ob2RlQ1NFKG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KQEAgLTcyMyw5ICs2NzUs
OSBAQCBwcml2YXRlOgogICAgIEZpeGVkQXJyYXk8dW5zaWduZWQsIExhc3ROb2RlVHlwZT4gbV9s
YXN0U2VlbjsKIH07CiAKLXZvaWQgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZv
cm1DU0UoR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNlPENTRVBoYXNlPihncmFwaCk7Cisg
ICAgcmV0dXJuIHJ1blBoYXNlPENTRVBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmgJ
KHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGEg
d2lkZSByYW5nZSBvZiBzdWJleHByZXNzaW9uIHNpbWlsYXJpdGllcy4gSXQncyBrbm93biB0byBw
cm9kdWNlIGJpZyB3aW5zCiAvLyBvbiBhIGZldyBiZW5jaG1hcmtzLCBhbmQgaXMgcmVsYXRpdmVs
eSBjaGVhcCB0byBydW4uCiAKLXZvaWQgcGVyZm9ybUNTRShHcmFwaCYpOworYm9vbCBwZXJmb3Jt
Q1NFKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICsz
Nyw5IEBACiAjZGVmaW5lIERGR19FTkFCTEUoREZHX0ZFQVRVUkUpIChkZWZpbmVkIERGR19FTkFC
TEVfIyNERkdfRkVBVFVSRSAmJiBERkdfRU5BQkxFXyMjREZHX0ZFQVRVUkUpCiAKIC8vIEVtaXQg
dmFyaW91cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1w
aW5nIHRoZSBkYXRhZmxvdyBncmFwaHMuCi0jZGVmaW5lIERGR19FTkFCTEVfREVCVUdfVkVSQk9T
RSAwCisjZGVmaW5lIERGR19FTkFCTEVfREVCVUdfVkVSQk9TRSAxCiAvLyBFbWl0IGR1bXBzIGR1
cmluZyBwcm9wYWdhdGlvbiwgaW4gYWRkaXRpb24gdG8ganVzdCBhZnRlci4KLSNkZWZpbmUgREZH
X0VOQUJMRV9ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFIDAKKyNkZWZpbmUgREZHX0VOQUJMRV9E
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFIDEKIC8vIEVtaXQgbG9nZ2luZyBmb3IgT1NSIGV4aXQg
dmFsdWUgcmVjb3ZlcmllcyBhdCBldmVyeSBub2RlLCBub3QganVzdCBub2RlcyB0aGF0CiAvLyBh
Y3R1YWxseSBoYXMgc3BlY3VsYXRpb24gY2hlY2tzLgogI2RlZmluZSBERkdfRU5BQkxFX1ZFUkJP
U0VfVkFMVUVfUkVDT1ZFUklFUyAwCkBAIC02Miw3ICs2Miw3IEBACiAvLyBFbWl0IGEgYnJlYWtw
b2ludCBpbnRvIHRoZSBzcGVjdWxhdGlvbiBmYWlsdXJlIGNvZGUuCiAjZGVmaW5lIERGR19FTkFC
TEVfSklUX0JSRUFLX09OX1NQRUNVTEFUSU9OX0ZBSUxVUkUgMAogLy8gTG9nIGV2ZXJ5IHNwZWN1
bGF0aW9uIGZhaWx1cmUuCi0jZGVmaW5lIERGR19FTkFCTEVfVkVSQk9TRV9TUEVDVUxBVElPTl9G
QUlMVVJFIDAKKyNkZWZpbmUgREZHX0VOQUJMRV9WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUg
MQogLy8gRGlzYWJsZSB0aGUgREZHIEpJVCB3aXRob3V0IGhhdmluZyB0byB0b3VjaCBQbGF0Zm9y
bS5oCiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFIDAKIC8vIEVuYWJsZSBPU1IgZW50
cnkgZnJvbSBiYXNlbGluZSBKSVQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDEzICs0MywxNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
ICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgYm9v
bCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAogICAgICAgICBBYnN0cmFjdFN0YXRlIHN0YXRl
KG1fZ3JhcGgpOwogICAgICAgICBJbnNlcnRpb25TZXQ8Tm9kZUluZGV4PiBpbnNlcnRpb25TZXQ7
CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgaWYgKCFibG9jay0+Y2ZhRm91bmRDb25zdGFudHMpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwpA
QCAtNjAsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3Vs
ZEdlbmVyYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgfHwgKG5vZGUuZmxhZ3MoKSAmIChOb2Rl
Q2xvYmJlcnNXb3JsZCB8IE5vZGVNaWdodENsb2JiZXIpKQorICAgICAgICAgICAgICAgICAgICB8
fCBtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkKICAgICAgICAgICAgICAgICAgICAgfHwgbm9k
ZS5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RhdGUuZm9yTm9kZShub2RlSW5kZXgpLnZhbHVlKCk7
CkBAIC03MywxNiArNzcsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBw
aGFudG9tTm9kZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CiAgICAgICAgICAgICAgICAgbV9ncmFw
aC5hcHBlbmQocGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmFwcGVuZChp
bmRleEluQmxvY2ssIHBoYW50b21Ob2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0YXRlLnJlc2V0KCk7CiAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgqYmxvY2spOwogICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CiB9OwogCi12b2lkIHBlcmZvcm1Db25z
dGFudEZvbGRpbmcoR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKEdy
YXBoJiBncmFwaCkKIHsKLSAgICBydW5QaGFzZTxDb25zdGFudEZvbGRpbmdQaGFzZT4oZ3JhcGgp
OworICAgIHJldHVybiBydW5QaGFzZTxDb25zdGFudEZvbGRpbmdQaGFzZT4oZ3JhcGgpOwogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBpbmZlcnJl
ZCBjb25zdGFudHMsIGFuZCByZXBsYWNlcyB0aG9zZSBub2RlcyB3aXRoIGNvbnN0YW50cyB3aGls
c3QgaW5qZWN0aW5nCiAvLyBQaGFudG9tIG5vZGVzIHRvIGtlZXAgdGhlIGNoaWxkcmVuIGFsaXZl
ICh3aGljaCBpcyBuZWNlc3NhcnkgZm9yIE9TUiBleGl0KS4KIAotdm9pZCBwZXJmb3JtQ29uc3Rh
bnRGb2xkaW5nKEdyYXBoJik7Citib29sIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoR3JhcGgmKTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2luY2x1ZGUgIkRGR0J5dGVDb2RlUGFyc2VyLmgiCiAjaW5jbHVkZSAiREZHQ0ZBUGhhc2UuaCIK
KyNpbmNsdWRlICJERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ1NF
UGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIgogI2luY2x1ZGUg
IkRGR0ZpeHVwUGhhc2UuaCIKQEAgLTYzLDkgKzY0LDE1IEBAIGlubGluZSBib29sIGNvbXBpbGUo
Q29tcGlsZU1vZGUgY29tcGlsZU0KICAgICBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24o
ZGZnKTsKICAgICBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9y
bUZpeHVwKGRmZyk7Ci0gICAgcGVyZm9ybUNGQShkZmcpOwotICAgIHBlcmZvcm1Db25zdGFudEZv
bGRpbmcoZGZnKTsKLSAgICBwZXJmb3JtQ1NFKGRmZyk7CisgICAgZm9yICg7OykgeworICAgICAg
ICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgcGVyZm9ybUNGQShkZmcpOworICAgICAg
ICBjaGFuZ2VkIHw9IHBlcmZvcm1Db25zdGFudEZvbGRpbmcoZGZnKTsKKyAgICAgICAgY2hhbmdl
ZCB8PSBwZXJmb3JtQ0ZHU2ltcGxpZmljYXRpb24oZGZnKTsKKyAgICAgICAgcGVyZm9ybUNTRShk
ZmcpOworICAgICAgICBpZiAoIWNoYW5nZWQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CiAg
ICAgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKIAogI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBpbmRleFVuY2hlY2tlZCgpICE9IE5vTm9kZTsg
fQorICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIAogICAgIGJvb2wg
b3BlcmF0b3I9PShFZGdlIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwx
MCArNDEsMTEgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQor
ICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
CiAgICAgICAgICAgICBmaXh1cEJsb2NrKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNTksOSAr
MzYwLDkgQEAgcHJpdmF0ZToKICAgICBJbnNlcnRpb25TZXQ8Tm9kZUluZGV4PiBtX2luc2VydGlv
blNldDsKIH07CiAgICAgCi12b2lkIHBlcmZvcm1GaXh1cChHcmFwaCYgZ3JhcGgpCitib29sIHBl
cmZvcm1GaXh1cChHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Rml4dXBQaGFzZT4oZ3Jh
cGgpOworICAgIHJldHVybiBydW5QaGFzZTxGaXh1cFBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFz
cyBHcmFwaDsKIC8vIEZpeCBwb3J0aW9ucyBvZiB0aGUgZ3JhcGggdGhhdCBhcmUgaW5lZmZpY2ll
bnQgZ2l2ZW4gdGhlIHByZWRpY3Rpb25zIHRoYXQKIC8vIHdlIGhhdmUuIFRoaXMgc2hvdWxkIHJ1
biBhZnRlciBwcmVkaWN0aW9uIHByb3BhZ2F0aW9uIGJ1dCBiZWZvcmUgQ1NFLgogCi12b2lkIHBl
cmZvcm1GaXh1cChHcmFwaCYpOworYm9vbCBwZXJmb3JtRml4dXAoR3JhcGgmKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRzo6UGhhc2UKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiArMjc4LDggQEAgdm9p
ZCBHcmFwaDo6ZHVtcCgpCiAgICAgTm9kZUluZGV4IGxhc3ROb2RlSW5kZXggPSBOb05vZGU7CiAg
ICAgZm9yIChzaXplX3QgYiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewogICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2JdLmdldCgpOworICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGRhdGFMb2coIkJsb2NrICMldSAo
YmMjJXUpOiAlcyVzXG4iLCAoaW50KWIsIGJsb2NrLT5ieXRlY29kZUJlZ2luLCBibG9jay0+aXNS
ZWFjaGFibGUgPyAiIiA6ICIgKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NS
IHRhcmdldCkiIDogIiIpOwogICAgICAgICBkYXRhTG9nKCIgIFBoaSBOb2RlczpcbiIpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7CkBA
IC0zNjIsNiArMzY0LDU0IEBAIHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKCkKICAg
ICB9CiB9CiAKK3ZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwg
MTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3Nv
ckluZGV4KQoreworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fYmxvY2tzW3N1Y2Nlc3Nv
ckluZGV4XS5nZXQoKTsKKyAgICBpZiAoIXN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUpIHsKKyAgICAg
ICAgc3VjY2Vzc29yLT5pc1JlYWNoYWJsZSA9IHRydWU7CisgICAgICAgIHdvcmtsaXN0LmFwcGVu
ZChzdWNjZXNzb3JJbmRleCk7CisgICAgfQorICAgIAorICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNl
c3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOworfQorCit2b2lkIEdyYXBoOjpkZXRlcm1pbmVSZWFj
aGFiaWxpdHkoKQoreworICAgIFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7CisgICAg
d29ya2xpc3QuYXBwZW5kKDApOworICAgIG1fYmxvY2tzWzBdLT5pc1JlYWNoYWJsZSA9IHRydWU7
CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgQmxvY2tJbmRleCBp
bmRleCA9IHdvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF0uZ2V0
KCk7CisgICAgICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQpOworICAgICAgICAKKyAgICAgICAg
Tm9kZSYgbm9kZSA9IGF0KGJsb2NrLT5sYXN0KCkpOworICAgICAgICBBU1NFUlQobm9kZS5pc1Rl
cm1pbmFsKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUuaXNKdW1wKCkpCisgICAgICAg
ICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRl
eCgpKTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7CisgICAgICAgICAgICBo
YW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsK
KyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUubm90VGFr
ZW5CbG9ja0luZGV4KCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdyYXBoOjpyZXNl
dFJlYWNoYWJpbGl0eSgpCit7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2Js
b2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBibG9jay0+aXNSZWFjaGFibGUgPSBmYWxzZTsKKyAg
ICAgICAgYmxvY2stPm1fcHJlZGVjZXNzb3JzLmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIGRl
dGVybWluZVJlYWNoYWJpbGl0eSgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDYsNiArMzQ2LDY0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGlzQ2Fw
dHVyZWQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICB9CiAgICAgCisg
ICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAg
ICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5udW1TdWNjZXNzb3JzKCk7CisgICAgfQorICAg
IEJsb2NrSW5kZXggc3VjY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNjZXNzb3IoaW5kZXgp
OworICAgIH0KKyAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvckZvckNvbmRpdGlvbihCYXNpY0Jsb2Nr
KiBibG9jaywgYm9vbCBjb25kaXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gYXQoYmxvY2st
Pmxhc3QoKSkuc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAg
IFByZWRpY3RlZFR5cGUgbGVmdCA9IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9IGF0KG5vZGUuY2hpbGQyKCkpLnByZWRpY3Rpb24o
KTsKKyAgICAgICAgcmV0dXJuIGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclBy
ZWRpY3Rpb24ocmlnaHQpOworICAgIH0KKyAgICAKKyAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUm
IG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpCisgICAgICAgICAgICAmJiAoKG5vZGUub3AoKSA9PSBQdXRCeVZhbCB8
fCBub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykKKyAgICAgICAgICAgICAgICA/IGlzQWN0aW9u
YWJsZU11dGFibGVBcnJheVByZWRpY3Rpb24oYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigp
KQorICAgICAgICAgICAgICAgIDogaXNBY3Rpb25hYmxlQXJyYXlQcmVkaWN0aW9uKGF0KG5vZGUu
Y2hpbGQxKCkpLnByZWRpY3Rpb24oKSkpOworICAgIH0KKyAgICAKKyAgICBib29sIGNsb2JiZXJz
V29ybGQoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2Rl
Q2xvYmJlcnNXb3JsZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIShu
b2RlLmZsYWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoK
KyAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgor
ICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVy
RXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAgICAgICAgICAgcmV0dXJuICFpc1ByZWRp
Y3RlZE51bWVyaWNhbChub2RlKTsKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAg
IHJldHVybiAhYnlWYWxJc1B1cmUobm9kZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJZiBi
eSBzb21lIG9kZGl0eSB3ZSBoaXQgdGhpcyBjYXNlIGluIHJlbGVhc2UgYnVpbGQgaXQncyBzYWZl
ciB0byBoYXZlIENTRSBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNsb2JiZXJzV29ybGQoYXQobm9kZUluZGV4KSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CisgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0
eSgpOworICAgIAogICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CkBAIC0zNjQs
NiArNDIyLDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CiBwcml2
YXRlOgogICAgIAorICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAx
Nj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29y
SW5kZXgpOworICAgIAogICAgIGJvb2wgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihOb2RlJiBhZGQsIE5vZGUmIHZhcmlhYmxlLCBOb2RlJiBpbW1lZGlhdGUpCiAgICAgewogICAg
ICAgICBBU1NFUlQoaW1tZWRpYXRlLmhhc0NvbnN0YW50KCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNyArMjAyLDggQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBtX29wID0gSlNDb25zdGFudDsKICAgICAgICAgaWYgKG1fZmxh
Z3MgJiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAgICAgbV9yZWZDb3VudC0tOwotICAgICAg
ICBtX2ZsYWdzICY9IH5Ob2RlTXVzdEdlbmVyYXRlOworICAgICAgICBBU1NFUlQoIShtX2ZsYWdz
ICYgTm9kZUNsb2JiZXJzV29ybGQpKTsKKyAgICAgICAgbV9mbGFncyAmPSB+KE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKTsKICAgICAgICAgbV9vcEluZm8gPSBjb25zdGFudE51
bWJlcjsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKICAgICB9CkBAIC00NjgsNiArNDY5LDM3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKICAgICB9CiAgICAg
CisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9w
KCkpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IGNhc2UgQnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBCbG9ja0lu
ZGV4IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaW5k
ZXgpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgcmV0dXJuIHRha2VuQmxvY2tJbmRl
eCgpOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gbm90VGFrZW5CbG9ja0lu
ZGV4KCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybiBOb0Jsb2NrOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJvb2wgY29uZGl0aW9uKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOworICAgICAgICByZXR1cm4gY29uZGl0aW9u
ID8gdGFrZW5CbG9ja0luZGV4KCkgOiBub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICB9CisgICAg
CiAgICAgYm9vbCBoYXNIZWFwUHJlZGljdGlvbigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9w
KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlz
aW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhJc1N0cmluZywgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBt
YWNybyhJc09iamVjdCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJc0Z1bmN0aW9u
LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAotICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRC
b29sZWFuIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAorICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVS
ZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oVG9QcmltaXRpdmUsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKFN0ckNhdCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNs
b2JiZXJzV29ybGQpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMjEsNyArMTEy
MSw3IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvQm9vbGVhbihleGVjKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9Cb29sZWFuKCk7CiB9CiAKICNpZiBERkdfRU5B
QkxFKFZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDEwIEBAIHByaXZh
dGU6CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQaGFzZVR5cGU+Ci12b2lkIHJ1blBoYXNlKEdy
YXBoJiBncmFwaCkKK2Jvb2wgcnVuUGhhc2UoR3JhcGgmIGdyYXBoKQogewogICAgIFBoYXNlVHlw
ZSBwaGFzZShncmFwaCk7Ci0gICAgcGhhc2UucnVuKCk7CisgICAgcmV0dXJuIHBoYXNlLnJ1bigp
OwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJv
b2wgcnVuKCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQogICAgICAgICBtX2NvdW50ID0gMDsKQEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAgICAg
ICAgICAgZG9Sb3VuZE9mRG91YmxlVm90aW5nKCk7CiAgICAgICAgICAgICBwcm9wYWdhdGVCYWNr
d2FyZCgpOwogICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogcHJpdmF0ZToKQEAgLTgzMSw5ICs4MzMsOSBAQCBw
cml2YXRlOgogI2VuZGlmCiB9OwogICAgIAotdm9pZCBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0
aW9uKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFw
aCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U+KGdy
YXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U+KGdy
YXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIGNsYXNzIEdyYXBoOwogLy8gYXJpdGhtZXRpYyBub2RlcykgZG8gbm90IHF1YWxpZnkgZm9y
IGFueSBvZiB0aGVzZSBjYXRlZ29yaWVzLiBCdXQgYWZ0ZXIgcnVubmluZwogLy8gdGhpcyBwaGFz
ZSwgd2UnbGwgaGF2ZSBmdWxsIGluZm9ybWF0aW9uIGZvciB0aGUgZXhwZWN0ZWQgdHlwZSBvZiBl
YWNoIG5vZGUuCiAKLXZvaWQgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYpOwor
Ym9vbCBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkc6OlBoYXNlCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRh
bnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBy
dW4oKQogICAgIHsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGRvIHsK
QEAgLTYzLDcgKzYzLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAogcHJpdmF0ZToKQEAgLTE2Niw5ICsxNjcsOSBAQCBwcml2YXRlOgogCiB9OwogCi12b2lk
IHBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbihHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZv
cm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbihHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8
UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFz
ZTxSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5k
YW50UGhpRWxpbWluYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0
aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBHcmFwaDsK
IC8vIFdlIGluc2VydGVkIG1hbnkgY2FuLWJlLXJlZHVuZGFudCBQaGkgbm9kZXMgd2hlbiBidWls
ZGluZyB0aGUgZ3JhcGguCiAvLyBUaGlzIHBoYXNlIHdpbGwganVzdCByZW1vdmUgdGhlbS4KIAot
dm9pZCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24oR3JhcGgmKTsKK2Jvb2wgcGVyZm9y
bVJlZHVuZGFudFBoaUVsaW1pbmF0aW9uKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgJ
KHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVC
b2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIC8vIENsZWFyIHRoZSB1c2UgY291bnQgJiBhZGQgdG8gdGhlIGZyZWUgbGlzdC4KICAg
ICAgICAgICAgIG1fdXNlZFtpbmRleF0gPSAwOwogICAgICAgICAgICAgbV9mcmVlLmFwcGVuZChp
bmRleCk7CisgICAgICAgIH0gZWxzZSB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZygiIFZpcnR1YWwgcmVnaXN0ZXIgJXUgaXMg
YXQgJXUvJXUgdXNlcy4iLCBpbmRleCwgbV91c2VkW2luZGV4XSwgbm9kZS5yZWZDb3VudCgpKTsK
KyNlbmRpZgogICAgICAgICB9CiAgICAgfQogICAgIHZvaWQgdXNlKEVkZ2UgY2hpbGQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODAsOCArMTI4MCwxMSBAQCBib29sIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKCkKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
MCksIEdQUkluZm86OnJlZ1QwKTsKIAogICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwotICAg
IGZvciAobV9ibG9jayA9IDA7IG1fYmxvY2sgPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUo
KTsgKyttX2Jsb2NrKQotICAgICAgICBjb21waWxlKCptX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21f
YmxvY2tdKTsKKyAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5t
X2Jsb2Nrcy5zaXplKCk7ICsrbV9ibG9jaykgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10uZ2V0KCk7CisgICAgICAgIGlmIChibG9j
aykKKyAgICAgICAgICAgIGNvbXBpbGUoKmJsb2NrKTsKKyAgICB9CiAgICAgbGlua0JyYW5jaGVz
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMjg5LDggKzEyOTIsMTAgQEAgYm9vbCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjcmVhdGVPU1JFbnRy
aWVzKCkKIHsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAg
IEJhc2ljQmxvY2smIGJsb2NrID0gKm1faml0LmdyYXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF07
Ci0gICAgICAgIGlmICghYmxvY2suaXNPU1JUYXJnZXQpCisgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWJsb2NrLT5p
c09TUlRhcmdldCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIEN1cnJlbnRs
eSB3ZSBvbmx5IG5lZWQgdG8gY3JlYXRlIE9TUiBlbnRyeSB0cmFtcG9saW5lcyB3aGVuIHVzaW5n
IGVkZ2UgY29kZQpAQCAtMTMxMiw5ICsxMzE3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Omxp
bmtPU1JFbnRyaWVzKExpbmsKIHsKICAgICB1bnNpZ25lZCBvc3JFbnRyeUluZGV4ID0gMDsKICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFw
aCgpLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sm
IGJsb2NrID0gKm1faml0LmdyYXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF07Ci0gICAgICAgIGlm
IChibG9jay5pc09TUlRhcmdldCkKLSAgICAgICAgICAgIG1faml0Lm5vdGljZU9TUkVudHJ5KGJs
b2NrLCBtX29zckVudHJ5SGVhZHNbb3NyRW50cnlJbmRleCsrXSwgbGlua0J1ZmZlcik7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1tibG9ja0luZGV4
XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBtX2ppdC5ub3RpY2VPU1JFbnRyeSgqYmxvY2ssIG1fb3NyRW50cnlIZWFkc1tvc3JFbnRy
eUluZGV4KytdLCBsaW5rQnVmZmVyKTsKICAgICB9CiAgICAgQVNTRVJUKG9zckVudHJ5SW5kZXgg
PT0gbV9vc3JFbnRyeUhlYWRzLnNpemUoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4o
KQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQog
ICAgICAgICBkYXRhTG9nKCJQcmVzZXJ2ZWQgdmFyczogIik7CkBAIC01NCw2ICs1NCwxMCBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleEluQmxvY2sgPSAwOyBpbmRleElu
QmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewogICAgICAgICAgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0xMTQsMTIgKzExOCwxNCBAQCBw
dWJsaWM6CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKCJO
dW0gY2FsbGVlIHJlZ2lzdGVyczogJXVcbiIsIGNhbGxlZVJlZ2lzdGVycyk7CiAjZW5kaWYKKyAg
ICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07CiAKLXZvaWQgcGVyZm9ybVZp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8VmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPFZp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgJKHJldmlzaW9uIDEx
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgR3Jh
cGg7CiAvLyBmb3IgbG9vay11cCB0YWJsZXMgZm9yIHRoZSBsaW5lYXIgc2NhbiByZWdpc3RlciBh
bGxvY2F0b3IgdGhhdCB0aGUgYmFja2VuZAogLy8gdXNlcy4KIAotdm9pZCBwZXJmb3JtVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYpOworYm9vbCBwZXJmb3JtVmlydHVhbFJlZ2lzdGVy
QWxsb2NhdGlvbihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4NSw3ICsyNTg1LDcgQEAgSlNW
YWx1ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICAqLwogICAgICAg
ICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyYyA9IHZQQ1syXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFjYWxsRnJhbWUt
PnIoc3JjKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNhbGxGcmFtZSkpOworICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzQm9vbGVhbighY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpLnRvQm9vbGVh
bigpKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICBjYWxsRnJhbWUt
PnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKIApAQCAtMzkwNSw3ICszOTA1LDcgQEAgc2tpcF9p
ZF9jdXN0b21fc2VsZjoKICAgICAgICAgICovCiAgICAgICAgIGludCBjb25kID0gdlBDWzFdLnUu
b3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAg
IGlmIChjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7
CisgICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbigpKSB7
CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAgICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVP
VVQoKTsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTM5MjUsNyArMzkyNSw3
IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICAqLwogICAgICAgICBpbnQgY29uZCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5k
OwotICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNh
bGxGcmFtZSkpIHsKKyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRv
Qm9vbGVhbigpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAgICAgICAgICAgQ0hF
Q0tfRk9SX1RJTUVPVVQoKTsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTM5
NDIsNyArMzk0Miw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICovCiAgICAgICAg
IGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9IHZQQ1sy
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRv
Qm9vbGVhbihjYWxsRnJhbWUpKSB7CisgICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29uZCkuanNW
YWx1ZSgpLnRvQm9vbGVhbigpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAgICAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgICAgICB9CkBAIC0zOTU4LDcgKzM5NTgsNyBA
QCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAqLwogICAgICAgICBpbnQgY29uZCA9IHZQ
Q1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwot
ICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNhbGxG
cmFtZSkpIHsKKyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9v
bGVhbigpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAgICAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NTUsOSArMjg1NSw3IEBAIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgIEpTVmFsdWUgc3JjID0g
c3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0KLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVh
bighc3JjLnRvQm9vbGVhbihjYWxsRnJhbWUpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9v
bGVhbighc3JjLnRvQm9vbGVhbigpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTI4NjgsOSArMjg2
Niw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKGludCwgb3BfanRydWUpCiAKICAgICBKU1ZhbHVl
IHNyYzEgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwogCi0gICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLQotICAgIGJvb2wgcmVzdWx0ID0gc3Jj
MS50b0Jvb2xlYW4oY2FsbEZyYW1lKTsKKyAgICBib29sIHJlc3VsdCA9IHNyYzEudG9Cb29sZWFu
KCk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsNyArNTA3LDcgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19yZWdleAogTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX25vdCkKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIExMSU5UX1JFVFVS
Tihqc0Jvb2xlYW4oIUxMSU5UX09QX0MoMikuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSkpOwor
ICAgIExMSU5UX1JFVFVSTihqc0Jvb2xlYW4oIUxMSU5UX09QX0MoMikuanNWYWx1ZSgpLnRvQm9v
bGVhbigpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9lcSkKQEAgLTEx
MTAsMTMgKzExMTAsMTMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2ptcF9zY29w
ZQogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2p0cnVlKQogewogICAgIExMSU5UX0JF
R0lOKCk7Ci0gICAgTExJTlRfQlJBTkNIKG9wX2p0cnVlLCBMTElOVF9PUF9DKDEpLmpzVmFsdWUo
KS50b0Jvb2xlYW4oZXhlYykpOworICAgIExMSU5UX0JSQU5DSChvcF9qdHJ1ZSwgTExJTlRfT1Bf
QygxKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfamZhbHNlKQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgTExJTlRfQlJBTkNI
KG9wX2pmYWxzZSwgIUxMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7Cisg
ICAgTExJTlRfQlJBTkNIKG9wX2pmYWxzZSwgIUxMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvQm9v
bGVhbigpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2psZXNzKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTcsNyArNzk3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQu
dG9Cb29sZWFuKGV4ZWMpKQorICAgICAgICAgICAgaWYgKHJlc3VsdC50b0Jvb2xlYW4oKSkKICAg
ICAgICAgICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgZmlsdGVySW5k
ZXgrKywgdik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGsgPT0gbGVuZ3RoKQpAQCAtODE4LDcg
KzgxOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAg
ICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQodGhpc09iaik7CiAKICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywg
ZWFjaEFyZ3VtZW50cyk7Ci0gICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFuKGV4ZWMpKQorICAg
ICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbigpKQogICAgICAgICAgICAgcmVzdWx0QXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGZpbHRlckluZGV4KyssIHYpOwogICAgIH0KICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdEFycmF5KTsKQEAgLTkxNyw3ICs5MTcsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0
QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hl
ZENhbGwuY2FsbCgpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudG9Cb29sZWFuKGNhY2hlZENh
bGwubmV3Q2FsbEZyYW1lKGV4ZWMpKSkKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRvQm9vbGVh
bigpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC05MzQsNyArOTM0LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCi0gICAgICAgIGJvb2wgcHJlZGljYXRlUmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbihl
eGVjKTsKKyAgICAgICAgYm9vbCBwcmVkaWNhdGVSZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cykudG9Cb29sZWFu
KCk7CiAgICAgICAgIGlmICghcHJlZGljYXRlUmVzdWx0KSB7CiAgICAgICAgICAgICByZXN1bHQg
PSBqc0Jvb2xlYW4oZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDI1LDcgKzEwMjUs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC50b0Jvb2xl
YW4oY2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpKQorICAgICAgICAgICAgaWYgKHJlc3Vs
dC50b0Jvb2xlYW4oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0cnVlKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDQyLDcgKzEwNDIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKLSAgICAgICAgYm9vbCBwcmVkaWNhdGVSZXN1bHQgPSBjYWxsKGV4ZWMs
IGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cyku
dG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBib29sIHByZWRpY2F0ZVJlc3VsdCA9IGNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRz
KS50b0Jvb2xlYW4oKTsKICAgICAgICAgaWYgKHByZWRpY2F0ZVJlc3VsdCkgewogICAgICAgICAg
ICAgcmVzdWx0ID0ganNCb29sZWFuKHRydWUpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAg
dm9pZCBCb29sZWFuQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKAogSlNPYmplY3QqIGNvbnN0
cnVjdEJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxE
YXRhKCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgp
LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwotICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShl
eGVjLT5nbG9iYWxEYXRhKCksIGpzQm9vbGVhbihhcmdzLmF0KDApLnRvQm9vbGVhbihleGVjKSkp
OworICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzQm9vbGVh
bihhcmdzLmF0KDApLnRvQm9vbGVhbigpKSk7CiAgICAgcmV0dXJuIG9iajsKIH0KIApAQCAtNjgs
NyArNjgsNyBAQCBDb25zdHJ1Y3RUeXBlIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uCiAvLyBF
Q01BIDE1LjYuMQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEJvb2xl
YW5Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29s
ZWFuKCkpKTsKIH0KIAogQ2FsbFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShK
U0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIC8vIEJhc2ljIGNvbnZlcnNpb25zLgogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUpIGNvbnN0OwogICAgICAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3Rh
dGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OwotICAgICAgICBib29sIHRvQm9v
bGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNv
bnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjIs
MTEgKzQyMiw2IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAg
ICAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKCksIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIEpTT2JqZWN0Ojp0b0Jvb2xlYW4oRXhlY1N0
YXRlKikgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogZG91YmxlIEpTT2JqZWN0Ojp0
b051bWJlcihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSlNWYWx1ZSBwcmltaXRpdmUg
PSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJOdW1iZXIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyAr
MTM4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2
ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25z
dDsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikg
Y29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJs
ZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGRv
dWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNTdHJpbmcqIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjEsNyArMjIxLDcgQEAgYm9vbCBKU1N0cmluZzo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4
ZWNTdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU1N0cmluZzo6dG9Cb29sZWFuKEV4
ZWNTdGF0ZSopIGNvbnN0Citib29sIEpTU3RyaW5nOjp0b0Jvb2xlYW4oKSBjb25zdAogewogICAg
IHJldHVybiBtX2xlbmd0aDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsg
fQogCiAgICAgICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJp
bWl0aXZlVHlwZSkgY29uc3Q7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgdG9Cb29s
ZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHRv
Qm9vbGVhbigpIGNvbnN0OwogICAgICAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3Rh
dGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OwogICAgICAgICBKU09iamVjdCog
dG9PYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICAgICAgZG91
YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwpAQCAtNDM1LDIzICs0MzUsMjMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgYm9vbCBpc0pTU3RyaW5nKEpTVmFsdWUgdikgeyBy
ZXR1cm4gdi5pc0NlbGwoKSAmJiB2LmFzQ2VsbCgpLT5jbGFzc0luZm8oKSA9PSAmSlNTdHJpbmc6
OnNfaW5mbzsgfQogCi0gICAgaW5saW5lIGJvb2wgSlNDZWxsOjp0b0Jvb2xlYW4oRXhlY1N0YXRl
KiBleGVjKSBjb25zdAorICAgIGlubGluZSBib29sIEpTQ2VsbDo6dG9Cb29sZWFuKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIGlmIChpc1N0cmluZygpKSAKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+KHRoaXMpLT50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih0aGlzKS0+dG9Cb29sZWFu
KCk7CiAgICAgICAgIHJldHVybiAhc3RydWN0dXJlKCktPnR5cGVJbmZvKCkubWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIC8vIC0tLSBKU1ZhbHVlIGlubGluZXMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIAotICAgIGlubGluZSBib29sIEpTVmFsdWU6OnRv
Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6
dG9Cb29sZWFuKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0ludDMyKCkpCiAgICAgICAg
ICAgICByZXR1cm4gYXNJbnQzMigpOwogICAgICAgICBpZiAoaXNEb3VibGUoKSkKICAgICAgICAg
ICAgIHJldHVybiBhc0RvdWJsZSgpID4gMC4wIHx8IGFzRG91YmxlKCkgPCAwLjA7IC8vIGZhbHNl
IGZvciBOYU4KICAgICAgICAgaWYgKGlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGFzQ2Vs
bCgpLT50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gYXNDZWxsKCktPnRvQm9v
bGVhbigpOwogICAgICAgICByZXR1cm4gaXNUcnVlKCk7IC8vIGZhbHNlLCBudWxsLCBhbmQgdW5k
ZWZpbmVkIGFsbCBjb252ZXJ0IHRvIGZhbHNlLgogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyAr
MTk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhl
Y1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7CiAg
ICAgICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVy
LCBKU1ZhbHVlJik7CiAKLSAgICAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7
CisgICAgICAgIGJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CiAKICAgICAgICAgLy8gdG9OdW1iZXIg
Y29udmVyc2lvbiBpcyBleHBlY3RlZCB0byBiZSBzaWRlIGVmZmVjdCBmcmVlIGlmIGFuIGV4Y2Vw
dGlvbiBoYXMKICAgICAgICAgLy8gYmVlbiBzZXQgaW4gdGhlIEV4ZWNTdGF0ZSBhbHJlYWR5LgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsMTQgKzIx
NCwxNCBAQCBzdGF0aWMgYm9vbCB0b1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhCiAKICAgICBQ
cm9wZXJ0eVNsb3QgZW51bWVyYWJsZVNsb3QoZGVzY3JpcHRpb24pOwogICAgIGlmIChkZXNjcmlw
dGlvbi0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5lbnVtZXJh
YmxlLCBlbnVtZXJhYmxlU2xvdCkpIHsKLSAgICAgICAgZGVzYy5zZXRFbnVtZXJhYmxlKGVudW1l
cmFibGVTbG90LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5lbnVtZXJhYmxl
KS50b0Jvb2xlYW4oZXhlYykpOworICAgICAgICBkZXNjLnNldEVudW1lcmFibGUoZW51bWVyYWJs
ZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpLnRv
Qm9vbGVhbigpKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIFByb3BlcnR5U2xvdCBjb25maWd1cmFibGVT
bG90KGRlc2NyaXB0aW9uKTsKICAgICBpZiAoZGVzY3JpcHRpb24tPmdldFByb3BlcnR5U2xvdChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uZmlndXJhYmxlLCBjb25maWd1cmFibGVTbG90
KSkgewotICAgICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShjb25maWd1cmFibGVTbG90LmdldFZh
bHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25maWd1cmFibGUpLnRvQm9vbGVhbihl
eGVjKSk7CisgICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGNvbmZpZ3VyYWJsZVNsb3QuZ2V0
VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZpZ3VyYWJsZSkudG9Cb29sZWFu
KCkpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQpAQCAtMjM2LDcgKzIzNiw3IEBAIHN0YXRpYyBib29sIHRvUHJvcGVy
dHlEZXNjcmlwdG9yKEV4ZWNTdGEKIAogICAgIFByb3BlcnR5U2xvdCB3cml0YWJsZVNsb3QoZGVz
Y3JpcHRpb24pOwogICAgIGlmIChkZXNjcmlwdGlvbi0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSwgd3JpdGFibGVTbG90KSkgewotICAgICAgICBk
ZXNjLnNldFdyaXRhYmxlKHdyaXRhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkud3JpdGFibGUpLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgIGRlc2Muc2V0V3Jp
dGFibGUod3JpdGFibGVTbG90LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53
cml0YWJsZSkudG9Cb29sZWFuKCkpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksOSArMjQ5LDkgQEAgdm9pZCBzZXRSZWdFeHBD
b25zdHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZQogICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFzZU9i
amVjdCktPnNldElucHV0KGV4ZWMsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAotdm9pZCBz
ZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRp
bGluZShFeGVjU3RhdGUqLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICBhc1JlZ0V4cENvbnN0cnVjdG9yKGJhc2VPYmplY3QpLT5zZXRNdWx0aWxpbmUodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBhc1JlZ0V4cENvbnN0cnVjdG9yKGJhc2VPYmplY3QpLT5z
ZXRNdWx0aWxpbmUodmFsdWUudG9Cb29sZWFuKCkpOwogfQogCiAvLyBFQ01BIDE1LjEwLjQKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDExICsxNDcsMTEgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogCiAgICAgY2hhciBwb3N0
Zml4WzVdID0geyAnLycsIDAsIDAsIDAsIDAgfTsKICAgICBpbnQgaW5kZXggPSAxOwotICAgIGlm
ICh0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmdsb2JhbCkudG9C
b29sZWFuKGV4ZWMpKQorICAgIGlmICh0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmdsb2JhbCkudG9Cb29sZWFuKCkpCiAgICAgICAgIHBvc3RmaXhbaW5kZXgrK10g
PSAnZyc7Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuaWdub3JlQ2FzZSkudG9Cb29sZWFuKGV4ZWMpKQorICAgIGlmICh0aGlzT2JqZWN0LT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlnbm9yZUNhc2UpLnRvQm9vbGVhbigpKQogICAg
ICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2knOwotICAgIGlmICh0aGlzT2JqZWN0LT5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm11bHRpbGluZSkudG9Cb29sZWFuKGV4ZWMpKQorICAg
IGlmICh0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm11bHRpbGlu
ZSkudG9Cb29sZWFuKCkpCiAgICAgICAgIHBvc3RmaXhbaW5kZXhdID0gJ20nOwogICAgIFVTdHJp
bmcgc291cmNlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5z
b3VyY2UpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAvLyBJZiBzb3VyY2UgaXMg
ZW1wdHksIHVzZSAiLyg/OikvIiB0byBhdm9pZCBjb2xsaWRpbmcgd2l0aCBjb21tZW50IHN5bnRh
eAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138281</attachid>
            <date>2012-04-22 17:58:19 -0700</date>
            <delta_ts>2012-04-24 01:35:09 -0700</delta_ts>
            <desc>getting close</desc>
            <filename>cfgsimplify_patch_3.diff</filename>
            <type>text/plain</type>
            <size>87636</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0ODYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNCBA
QAorMjAxMi0wNC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTUzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGlu
IHByb2dyZXNzLgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNW
YWx1ZVRvQm9vbGVhbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAg
ICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6
cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAg
ICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2Uu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChDRkdTaW1wbGlmaWNhdGlv
blBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpDRkdT
aW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpbmRPcGVyYW5kU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjprZWVwT3BlcmFuZEFsaXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlm
aWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpD
RkdTaW1wbGlmaWNhdGlvblBoYXNlOjptZXJnZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6
cGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NT
RVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cnVuKToKKyAgICAgICAg
KENTRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2xvYmJlcnNXb3JsZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuaDoKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5oOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3VjY2Vz
c29yRm9yQ29uZGl0aW9uKToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om51bVN1Y2Nlc3NvcnMpOgorICAgICAgICAo
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3JGb3JDb25kaXRpb24pOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR1BoYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6cnVuUGhh
c2UpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbik6CisgICAgICAgICog
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAg
ICAgICAqIGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpydW4pOgorICAgICAgICAo
SlNDOjpERkc6OnBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbik6CisgICAgICAgICogZGZn
L0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OnBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3Bw
OgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
RXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAqIHJ1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9v
bGVhbik6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAg
KEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjp0b0Jvb2xlYW4pOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjp0
b1Byb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4
cFByb3RvRnVuY1RvU3RyaW5nKToKKwogMjAxMi0wNC0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaGF2ZSBjb25zdGFudCBwcm9wYWdhdGlv
bgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9vbCBKU1ZhbHVlVG9Cb29sZWFuKEpT
Q29udGV4dFJlZiBjdHgsIAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKLSAgICByZXR1cm4ganNWYWx1
ZS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIGpzVmFsdWUudG9Cb29sZWFuKCk7CiB9CiAK
IGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1
ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw4IEBACiAJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZEMTQ3
MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYzQjNBMUExNTNF
NjhGMjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE3MTUzRTY4RUYwMDNFRDBG
RiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGM0IzQTFCMTUzRTY4
RjQwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8q
IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyogREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDUxNDYwQ0JBQjAw
MTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJl
Z2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNEIxNDYwQ0Q2RTAw
MTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc2OCw2ICs3
NzAsOCBAQAogCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCM0ExODE1M0U2
OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNCM0EyNDE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NGR1NpbXBsaWZp
Y2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMDQ1LDYgKzIwNDksOCBAQAogCQkJCTBGN0IyOTQ4MTRDM0NE
MjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLywKIAkJCQkwRkZGQzk0QjE0RUY5MDk1
MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTRDMTRFRjkwOTUwMEM3
MjUzMiAvKiBERkdDRkFQaGFzZS5oICovLAorCQkJCTBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAv
KiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjNCM0EyNTE1NDRDOTkx
MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovLAogCQkJCTBGRkZDOTRE
MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVG
OTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEZEODJFMUUxNDE3MkMyRjAw
MTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8sCkBAIC0yNTgzLDYgKzI1ODksNyBAQAog
CQkJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJs
ZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0
NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYz
QjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMzE0Nyw2ICszMTU0LDcgQEAKIAkJCQk4NjQyQzUxMjE1MUMwODNEMDA0
NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2
RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8q
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDYgKzk5LDggQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0
aWFsaXplKEdyYXBoJiBncgogICAgIFBST0ZJTEUoRkxBR19GT1JfQkxPQ0tfSU5JVElBTElaQVRJ
T04pOwogICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKTsKICAg
ICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICByb290LT5jZmFIYXNWaXNpdGVk
ID0gZmFsc2U7CisgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlhYmxlc0F0SGVh
ZC5hcmd1bWVudChpKV07CiAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0QXJndW1lbnQp
OwpAQCAtMTQzLDExICsxNDUsMzMgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdy
YXBoJiBncgogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChQ
cmVkaWN0RmxvYXQ2NEFycmF5KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcm9vdC0+dmFs
dWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKKyAgICAgICAgCisgICAgICAgIHJvb3Qt
PnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwogICAgIH0KICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsK
LSAgICAgICAgaWYgKCFncmFwaC5sb2NhbElzQ2FwdHVyZWQoaSkpCisgICAgICAgIGlmIChncmFw
aC5sb2NhbElzQ2FwdHVyZWQoaSkpCisgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9j
YWwoaSkubWFrZVRvcCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmxvY2Fs
KGkpLmNsZWFyKCk7CisgICAgfQorICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMSA7
IGJsb2NrSW5kZXggPCBncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJv
b3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5tYWtlVG9wKCk7CisgICAgICAgIGlmICghYmxvY2st
PmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJsb2NrLT5jZmFT
aG91bGRSZXZpc2l0ID0gZmFsc2U7CisgICAgICAgIGJsb2NrLT5jZmFIYXNWaXNpdGVkID0gZmFs
c2U7CisgICAgICAgIGJsb2NrLT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgKytpKSB7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkp
LmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNs
ZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgYmxvY2st
PnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVl
c0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC01MjYs
OCArNTUwLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKICAg
ICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTEyODYsNyArMTMwOCw5IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6
Om1lcmdlU3RhdGVBdFQKICAgICAgICAgLy8gVGhlIGJsb2NrIHRyYW5zZmVycyB0aGUgdmFsdWUg
ZnJvbSBoZWFkIHRvIHRhaWwuCiAgICAgICAgIHNvdXJjZSA9IGluVmFyaWFibGU7CiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIgICAg
ICAgICAgVHJhbnNmZXJpbmcgZnJvbSBoZWFkIHRvIHRhaWwuXG4iKTsKKyAgICAgICAgZGF0YUxv
ZygiICAgICAgICAgIFRyYW5zZmVyaW5nICIpOworICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRh
dGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nKCIgZnJvbSBoZWFkIHRvIHRhaWwuXG4iKTsKICNl
bmRpZgogICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTI5NCw3ICsxMzE4LDkgQEAg
aW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgICAgICAvLyBUaGUg
YmxvY2sgcmVmaW5lcyB0aGUgdmFsdWUgd2l0aCBhZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KICAg
ICAgICAgc291cmNlID0gZm9yTm9kZShub2RlSW5kZXgpOwogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiICAgICAgICAgIFJlZmluaW5n
LlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgICBSZWZpbmluZyB0byAiKTsKKyAgICAg
ICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsK
ICNlbmRpZgogICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTMwNiw3ICsxMzMyLDkg
QEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiICAgICAg
ICAgIFNldHRpbmcuXG4iKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICAgIFNldHRpbmcgdG8g
Iik7CisgICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFM
b2coIlxuIik7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtMTM4MiwxMiAr
MTQxMCwxOSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2VzCiAgICAg
QVNTRVJUKHRlcm1pbmFsLmlzVGVybWluYWwoKSk7CiAgICAgCiAgICAgc3dpdGNoICh0ZXJtaW5h
bC5vcCgpKSB7Ci0gICAgY2FzZSBKdW1wOgorICAgIGNhc2UgSnVtcDogeworICAgICAgICBkYXRh
TG9nKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwudGFrZW5CbG9j
a0luZGV4KCkpOwogICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9j
a3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAgICB9CiAgICAgICAgIAot
ICAgIGNhc2UgQnJhbmNoOgotICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgu
bV9ibG9ja3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdldCgpKQotICAgICAgICAgICAg
fCBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC5ub3RUYWtlbkJsb2Nr
SW5kZXgoKV0uZ2V0KCkpOworICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgICBkYXRhTG9nKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1
LlxuIiwgdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgp
XS5nZXQoKSk7CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUu
XG4iLCB0ZXJtaW5hbC5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5CbG9ja0lu
ZGV4KCldLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQogICAgICAgICAK
ICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFRocm93OgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjMsNyArMzIzLDEwIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAKICAgICBi
b29sIGlzQ2xlYXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBQcmVk
aWN0Tm9uZSAmJiBtX3N0cnVjdHVyZS5pc0NsZWFyKCk7CisgICAgICAgIGJvb2wgcmVzdWx0ID0g
bV90eXBlID09IFByZWRpY3ROb25lICYmIG1fc3RydWN0dXJlLmlzQ2xlYXIoKTsKKyAgICAgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgbWFrZVRvcCgpCkBAIC00MjEsMTAgKzQy
NCwxNCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgYm9vbCBtZXJnZShjb25zdCBBYnN0
cmFjdFZhbHVlJiBvdGhlcikKICAgICB7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0g
ICAgICAgIHJlc3VsdCB8PSBtZXJnZVByZWRpY3Rpb24obV90eXBlLCBvdGhlci5tX3R5cGUpOwot
ICAgICAgICByZXN1bHQgfD0gbV9zdHJ1Y3R1cmUuYWRkQWxsKG90aGVyLm1fc3RydWN0dXJlKTsK
LSAgICAgICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkKLSAgICAgICAgICAgIG1fdmFs
dWUgPSBKU1ZhbHVlKCk7CisgICAgICAgIGlmIChpc0NsZWFyKCkpCisgICAgICAgICAgICAqdGhp
cyA9IG90aGVyOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCB8PSBtZXJnZVBy
ZWRpY3Rpb24obV90eXBlLCBvdGhlci5tX3R5cGUpOworICAgICAgICAgICAgcmVzdWx0IHw9IG1f
c3RydWN0dXJlLmFkZEFsbChvdGhlci5tX3N0cnVjdHVyZSk7CisgICAgICAgICAgICBpZiAobV92
YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVl
KCk7CisgICAgICAgIH0KICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRq
YWNlbmN5TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWRqYWNlbmN5TGlzdC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIEZpeGVkLAogICAgICAgICBWYXJpYWJsZQogICAgIH07Ci0KKyAg
ICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgICAgIDogbV9raW5kKGtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk1LDEwICs5NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7
CiAgICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFzaWMgYmxvY2sgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rp
b25zLgogICAgIGJvb2wgcGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCk7Ci0gICAgLy8gRmluZCBy
ZWFjaGFibGUgY29kZSBhbmQgc2V0dXAgcHJlZGVjZXNzb3IgbGlua3MgaW4gdGhlIGdyYXBoJ3Mg
QmFzaWNCbG9ja3MuCi0gICAgdm9pZCBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKLSAgICAvLyBF
bnF1ZXVlIGEgYmxvY2sgb250byB0aGUgd29ya2xpc3QsIGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lk
IGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJ
bmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3IpOwogICAgIC8vIExpbmsgYmxvY2sgc3VjY2Vzc29y
cy4KICAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJsb2NrSW5kZXg+JiBw
b3NzaWJsZVRhcmdldHMpOwogICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9j
az4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7
CkBAIC0yNTg1LDQxICsyNTgxLDYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrcyhW
ZWN0b3I8VQogICAgIH0KIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlU3VjY2Vzc29y
KFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgs
IEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpCi17Ci0gICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gbV9ncmFwaC5tX2Jsb2Nrc1tzdWNjZXNzb3JJbmRleF0uZ2V0KCk7Ci0gICAgaWYgKCFzdWNj
ZXNzb3ItPmlzUmVhY2hhYmxlKSB7Ci0gICAgICAgIHN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUgPSB0
cnVlOwotICAgICAgICB3b3JrbGlzdC5hcHBlbmQoc3VjY2Vzc29ySW5kZXgpOwotICAgIH0KLSAg
ICAKLSAgICBzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChibG9ja0luZGV4KTsKLX0K
LQotdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKLXsKLSAgICBW
ZWN0b3I8QmxvY2tJbmRleCwgMTY+IHdvcmtsaXN0OwotICAgIHdvcmtsaXN0LmFwcGVuZCgwKTsK
LSAgICBtX2dyYXBoLm1fYmxvY2tzWzBdLT5pc1JlYWNoYWJsZSA9IHRydWU7Ci0gICAgd2hpbGUg
KCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQmxvY2tJbmRleCBpbmRleCA9IHdvcmts
aXN0Lmxhc3QoKTsKLSAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOwotICAgICAgICAKLSAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2luZGV4XS5nZXQoKTsK
LSAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0xpbmtlZCk7Ci0gICAgICAgIAotICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtibG9jay0+bGFzdCgpXTsKLSAgICAgICAgQVNTRVJUKG5vZGUuaXNU
ZXJtaW5hbCgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLmlzSnVtcCgpKQotICAgICAg
ICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS50YWtlbkJsb2NrSW5k
ZXgoKSk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkgewotICAgICAgICAgICAg
aGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7
Ci0gICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLm5vdFRh
a2VuQmxvY2tJbmRleCgpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBCeXRlQ29kZVBh
cnNlcjo6YnVpbGRPcGVyYW5kTWFwc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXZlQnVp
bHRPcGVyYW5kTWFwcykKQEAgLTI4MzEsNyArMjc5Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlKCkKICAgICBwYXJzZUNvZGVCbG9jaygpOwogCiAgICAgbGlua0Jsb2NrcyhpbmxpbmVT
dGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MsIGlubGluZVN0YWNrRW50cnkubV9ibG9ja0xpbmtp
bmdUYXJnZXRzKTsKLSAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKKyAgICBtX2dyYXBoLmRl
dGVybWluZVJlYWNoYWJpbGl0eSgpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKICAgICBkYXRhTG9nKCJQcm9jZXNzaW5nIGxvY2FsIHZhcmlhYmxlIHBoaXMuXG4i
KTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5j
cHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZB
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgbV9jb3VudCA9
IDA7CkBAIC02NSwxMiArNjUsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgbV9jaGFuZ2VkID0g
ZmFsc2U7CiAgICAgICAgICAgICBwZXJmb3JtRm9yd2FyZENGQSgpOwogICAgICAgICB9IHdoaWxl
IChtX2NoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IAogcHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1CbG9ja0NGQShCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCiAgICAgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGlmICghYmxvY2stPmNmYVNob3VsZFJldmlzaXQpCiAgICAgICAgICAgICBy
ZXR1cm47CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtMTI2
LDkgKzEzMCw5IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLXZvaWQgcGVyZm9ybUNGQShHcmFw
aCYgZ3JhcGgpCitib29sIHBlcmZvcm1DRkEoR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNl
PENGQVBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPENGQVBoYXNlPihncmFwaCk7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZBUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBA
QCBjbGFzcyBHcmFwaDsKIC8vIHRoZSBjb2RlIGJsb2NrLiBJdCdzIGFsc28gcmVzcG9uc2libGUg
Zm9yIGlkZW50aWZ5aW5nIGRlYWQgY29kZSwgYW5kIGluIHRoZQogLy8gZnV0dXJlIHNob3VsZCBi
ZSB1c2VkIGFzIGEgaG9vayBmb3IgY29uc3RhbnQgcHJvcGFnYXRpb24uCiAKLXZvaWQgcGVyZm9y
bUNGQShHcmFwaCYpOworYm9vbCBwZXJmb3JtQ0ZBKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
QWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJE
RkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1Bo
YXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ0ZHU2ltcGxp
ZmljYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJDRkcg
c2ltcGxpZmljYXRpb24iKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAg
IHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKTsgKysgYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghYmxvY2st
PmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0ub3AoKSkgeworICAgICAg
ICAgICAgY2FzZSBKdW1wOiB7CisgICAgICAgICAgICAgICAgLy8gU3VjY2Vzc29yIHdpdGggb25l
IHByZWRlY2Vzc29yIC0+IG1lcmdlLgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxv
Y2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9
PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fYmxvY2tzW21fZ3Jh
cGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJlZGVjZXNzb3JzWzBdCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICA9PSBibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VC
bG9ja3MoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApLCBOb0Jsb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBCbG9jayBvbmx5IGhh
cyBhIGp1bXAgLT4gcmVtb3ZlLiBUaGlzIGlzIHRyaWNreSB0aG91Z2ggYmVjYXVzZSBvZgorICAg
ICAgICAgICAgICAgIC8vIGxpdmVuZXNzLiBXaGF0IHdlIHJlYWxseSB3YW50IGlzIHRvIHNsYW0g
aW4gYSBwaGFudG9tIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAgICAgLy8gYmxvY2ss
IGFmdGVyIHRoZSB0ZXJtaW5hbC4gQnV0IHdlIGNhbid0IHJpZ2h0IG5vdy4gOi0oCisgICAgICAg
ICAgICAgICAgLy8gSWRlYTogd2hhdCBpZiBJIHNsYW0gdGhlIGdob3N0aWVzIGludG8gbXkgc3Vj
Y2Vzc29yPyBOb3BlLCB0aGF0J3MKKyAgICAgICAgICAgICAgICAvLyBzdWJvcHRpbWFsLCBiZWNh
dXNlIGlmIG15IHN1Y2Nlc3NvciBoYXMgbXVsdGlwbGUgcHJlZGVjZXNzb3JzIHRoZW4gd2UnbGwK
KyAgICAgICAgICAgICAgICAvLyBiZSBrZWVwaW5nIGFsaXZlIHRoaW5ncyBvbiBvdGhlciBwcmVk
ZWNlc3NvciBlZGdlcyB1bm5lY2Vzc2FyaWx5LgorICAgICAgICAgICAgICAgIC8vIFdoYXQgd2Ug
cmVhbGx5IG5lZWQgaXMgdGhlIG5vdGlvbiBvZiBlbmQtb2YtYmxvY2sgZ2hvc3RpZXMhCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIEJyYW5jaDogeworICAgICAgICAgICAgICAgIC8vIEJyYW5jaCBvbiBjb25z
dGFudCAtPiBqZXR0aXNvbiB0aGUgbm90LXRha2VuIGJsb2NrIGFuZCBtZXJnZS4KKyAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaFttX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmNoaWxkMSgpXS5oYXND
b25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgY29uZGl0aW9uID0gbV9ncmFw
aC52YWx1ZU9mSlNDb25zdGFudChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmNoaWxkMSgpLmluZGV4
KCkpOworICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcygKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nl
c3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gQnJhbmNoIHRvIHNhbWUgZGVzdGluYXRpb24gLT4ganVtcC4KKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogdGhpcyB3aWxsIGN1cnJlbnRseSBub3QgYmUgaGl0IGJlY2F1c2Ugb2YgdGhl
IGxhY2sgb2YganVtcC1vbmx5CisgICAgICAgICAgICAgICAgLy8gYmxvY2sgc2ltcGxpZmljYXRp
b24uCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSA9PSBt
X2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VC
bG9ja3MoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApLCBOb0Jsb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBjaGFuZ2VkIHRoZSBncmFw
aCwgdGhlbiBzb21lIGJsb2NrcyBtYXkgaGF2ZSBiZWNvbWUgdW5yZWFjaGFibGUuIE5lZWQgdG8K
KyAgICAgICAgICAgIC8vIHBlcmZvcm0gYSBibG9jayBHQyBvZiBzb3J0cy4KKyAgICAgICAgICAg
IG1fZ3JhcGgucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorCitwcml2YXRlOgorICAgIE5vZGVJbmRleCBmaW5k
T3BlcmFuZFNvdXJjZShjb25zdCBPcGVyYW5kczxOb2RlSW5kZXgsIE5vZGVJbmRleFRyYWl0cz4m
IHZhcmlhYmxlcywgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gdmFyaWFibGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIGlmIChub2RlSW5kZXgg
PT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZUluZGV4XS5vcCgpID09IFNldExvY2FsKQorICAgICAgICAgICAgcmV0dXJuIG1fZ3Jh
cGhbbm9kZUluZGV4XS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICByZXR1cm4gbm9kZUluZGV4
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxv
Y2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBp
ZiAobV9ncmFwaC5pc0NhcHR1cmVkKG9wZXJhbmQpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZmluZE9wZXJhbmRTb3VyY2UoYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbCwgb3BlcmFuZCk7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91
bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQobV9ncmFw
aFtub2RlSW5kZXhdLm9wKCkgIT0gU2V0TG9jYWwpOworICAgICAgICBBU1NFUlQobV9ncmFwaFtu
b2RlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgTm9kZUluZGV4IHBoYW50b21Ob2RlSW5k
ZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgTm9kZSBwaGFudG9tKFBoYW50b20sIGNvZGVP
cmlnaW4sIG5vZGVJbmRleCk7CisgICAgICAgIG1fZ3JhcGguYXBwZW5kKHBoYW50b20pOworICAg
ICAgICBtX2dyYXBoLnJlZihwaGFudG9tTm9kZUluZGV4KTsKKyAgICAgICAgYmxvY2stPmFwcGVu
ZChwaGFudG9tTm9kZUluZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaXhQb3NzaWJsZUdl
dExvY2FsKEJhc2ljQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9k
ZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOworICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRM
b2NhbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG1fZ3JhcGguaXNDYXB0dXJl
ZChjaGlsZC5sb2NhbCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgTm9kZUluZGV4
IG9yaWdpbmFsTm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxk
LmxvY2FsKCkpOworICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlSW5kZXggIT0gTm9Ob2RlKTsK
KyAgICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5kZXhd
OworICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAg
ICAgLy8gUG9zc2liaWxpdGllczoKKyAgICAgICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJs
b2NrIGlzIGdldHRpbmcgdGhlIHZhbHVlIG9mIHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5
CisgICAgICAgIC8vICAgICBhdmFpbGFibGUgaW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93
biBOb2RlSW5kZXguCisgICAgICAgIC8vIEdldExvY2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBn
ZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhpbmcgdGhhdCB0aGUgZmlyc3QKKyAgICAgICAgLy8g
ICAgIGJsb2NrIGFsc28gZ2V0cy4KKyAgICAgICAgLy8gUGhpIC0+IHRoZSBzZWNvbmRCbG9jayBp
cyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdCBibG9j
aworICAgICAgICAvLyAgICAgd2FzIGFsc28gYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uLgorICAg
ICAgICAvLyBTZXRBcmd1bWVudCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVw
LWFsaXZlIG9uIGFuIG9wZXJhbmQgdGhhdCB0aGUKKyAgICAgICAgLy8gICAgIGZpcnN0IGJsb2Nr
IHdhcyBrZWVwaW5nIGFsaXZlIGJ5IHZpcnR1ZSBvZiB0aGUgZmlyc3RCbG9jayBiZWluZyB0aGUg
cm9vdCBhbmQKKyAgICAgICAgLy8gICAgIHRoZSBvcGVyYW5kIGJlaW5nIGFuIGFyZ3VtZW50Lgor
ICAgICAgICAvLyBGbHVzaCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFs
aXZlIG9uIGFuIG9wZXJhbmQgdGhhdCB0aGUgZmlyc3QKKyAgICAgICAgLy8gICAgIGJsb2NrIHdh
cyBmb3JjaW5nIHRvIGJlIGFsaXZlLCBzbyB0aGUgc2Vjb25kIGJsb2NrIHNob3VsZCByZWZlciBj
aGlsZCBvZgorICAgICAgICAvLyAgICAgdGhlIGZsdXNoLgorICAgICAgICBpZiAob3JpZ2luYWxO
b2RlLT5vcCgpID09IEZsdXNoKSB7CisgICAgICAgICAgICBvcmlnaW5hbE5vZGVJbmRleCA9IG9y
aWdpbmFsTm9kZS0+Y2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgIG9yaWdpbmFsTm9kZSA9
ICZtX2dyYXBoW29yaWdpbmFsTm9kZUluZGV4XTsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2gg
KG9yaWdpbmFsTm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAg
ICAgICBFZGdlIG5ld0VkZ2UgPSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAg
RWRnZSBvbGRFZGdlID0gZWRnZTsKKyAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5ld0VkZ2UpOwor
ICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsKKyAgICAgICAgICAgIGVkZ2UgPSBu
ZXdFZGdlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRM
b2NhbDoKKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsKKyAg
ICAgICAgICAgIEVkZ2UgbmV3RWRnZSA9IGVkZ2U7CisgICAgICAgICAgICBFZGdlIG9sZEVkZ2Ug
PSBlZGdlOworICAgICAgICAgICAgbmV3RWRnZS5zZXRJbmRleChvcmlnaW5hbE5vZGVJbmRleCk7
CisgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKKyAgICAgICAgICAgIG1fZ3JhcGgu
ZGVyZWYob2xkRWRnZSk7CisgICAgICAgICAgICBlZGdlID0gbmV3RWRnZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHZvaWQgbWVyZ2VCbG9ja3MoCisgICAgICAgIEJsb2NrSW5kZXggZmlyc3RCbG9ja0lu
ZGV4LCBCbG9ja0luZGV4IHNlY29uZEJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0dGlzb25lZEJs
b2NrSW5kZXgpCisgICAgeworICAgICAgICAvLyBUaGlzIHdpbGwgYWRkIGFsbCBvZiB0aGUgbm9k
ZXMgaW4gc2Vjb25kQmxvY2sgdG8gZmlyc3RCbG9jaywgYnV0IGluIHNvIGRvaW5nCisgICAgICAg
IC8vIGl0IHdpbGwgYWxzbyBlbnN1cmUgdGhhdCBhbnkgR2V0TG9jYWxzIGZyb20gdGhlIHNlY29u
ZCBibG9jayB0aGF0IHJlZmVyIHRvCisgICAgICAgIC8vIFNldExvY2FscyBpbiB0aGUgZmlyc3Qg
YmxvY2sgYXJlIHJlbGlua2VkLiBJZiBqZXR0aXNvbmVkQmxvY2sgaXMgbm90IE5vQmxvY2ssCisg
ICAgICAgIC8vIHRoZW4gUGhhbnRvbXMgYXJlIGluc2VydGVkIGZvciBhbnl0aGluZyB0aGF0IHRo
ZSBqZXR0aXNvbmVkQmxvY2sgd291bGQgaGF2ZQorICAgICAgICAvLyBrZXB0IGFsaXZlLgorICAg
ICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
Zmlyc3RCbG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgQmFzaWNCbG9jayogc2Vjb25kQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW3NlY29uZEJsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAKKyAg
ICAgICAgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJsb2NrIHNpbmNlIHdlIGRvbid0
IG5lZWQgaXQgYW55bW9yZS4gV2VsbCwgd2UgZG9uJ3QKKyAgICAgICAgLy8gcmVhbGx5IHJlbW92
ZSBpdDsgd2UgYWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRvbS4KKyAgICAgICAgQVNTRVJU
KG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5pc1Rlcm1pbmFsKCkpOworICAgICAgICBDb2Rl
T3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5j
b2RlT3JpZ2luOworICAgICAgICBtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uc2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0QmxvY2st
Pmxhc3QoKV0ucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgCisgICAgICAgIGlmIChqZXR0aXNv
bmVkQmxvY2tJbmRleCAhPSBOb0Jsb2NrKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0
aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGV4XS5nZXQo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGltZSB0byBpbnNlcnQgZ2hvc3RpZXMg
Zm9yIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUga2VwdCBhbGl2ZSBpbiBjYXNlIHdlIE9TUgorICAg
ICAgICAgICAgLy8gZXhpdCBwcmlvciB0byBoaXR0aW5nIHRoZSBmaXJzdEJsb2NrJ3MgdGVybWlu
YWwsIGFuZCBlbmQgdXAgZ29pbmcgZG93biBhCisgICAgICAgICAgICAvLyBkaWZmZXJlbnQgcGF0
aCB0aGFuIHNlY29uZEJsb2NrLgorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJn
dW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0Qmxv
Y2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkpOworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2
ZShmaXJzdEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IHNlY29uZEJsb2NrLT5hdChp
KTsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAg
ICAgICBpZiAobm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIGNoaWxkIGlzIGEgR2V0TG9jYWwsIHRoZW4gd2UgbWlnaHQgbGlrZSB0byBmaXggaXQuCisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgp
ICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICsrY2hpbGRJ
ZHgpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0Qmxv
Y2ssIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAobm9kZS5jaGlsZDEoKSkgeworICAgICAgICAgICAgICAgICAgICBmaXhQb3Nz
aWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMigp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMygpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5j
aGlsZHJlbi5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXJzdEJsb2NrLT5hcHBlbmQobm9kZUlu
ZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVz
QXRUYWlsID0gc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbDsKKyAgICAgICAgZmlyc3RCbG9j
ay0+dmFsdWVzQXRUYWlsID0gc2Vjb25kQmxvY2stPnZhbHVlc0F0VGFpbDsKKyAgICAgICAgCisg
ICAgICAgIC8vIEZpeCB0aGUgcHJlZGVjZXNzb3JzIG9mIG15IG5ldyBzdWNjZXNzb3JzLiBUaGlz
IGlzIHRyaWNreSwgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHJlc2V0CisgICAgICAgIC8vIGFsbCBw
cmVkZWNlc3NvcnMgYW55d2F5IGR1ZSB0byByZWFjaGFiaWxpdHkgYW5hbHlzaXMuIEJ1dCB3ZSBu
ZWVkIHRvIGZpeCB0aGUKKyAgICAgICAgLy8gcHJlZGVjZXNzb3JzIGVhZ2VybHkgdG8gZW5zdXJl
IHRoYXQgd2Uga25vdyB3aGF0IHRoZXkgYXJlIGluIGNhc2UgdGhlIG5leHQgYmxvY2sgd2UKKyAg
ICAgICAgLy8gY29uc2lkZXIgaW4gdGhpcyBwaGFzZSB3aXNoZXMgdG8gcXVlcnkgdGhlIHByZWRl
Y2Vzc29ycyBvZiBvbmUgb2YgdGhlIGJsb2NrcyB3ZQorICAgICAgICAvLyBhZmZlY3RlZC4KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1TdWNjZXNzb3JzKGZpcnN0QmxvY2sp
OyBpLS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2dyYXBoLm1f
YmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGZpcnN0QmxvY2ssIGkpXS5nZXQoKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzLnNp
emUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3Nv
cnNbal0gPT0gc2Vjb25kQmxvY2tJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29y
LT5tX3ByZWRlY2Vzc29yc1tqXSA9IGZpcnN0QmxvY2tJbmRleDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRml4IHRoZSBwcmVkZWNlc3NvcnMgb2YgbXkg
Zm9ybWVyIHN1Y2Nlc3NvcnMuIEFnYWluLCB3ZSdkIHJhdGhlciBub3QgZG8gdGhpcywgYnV0IGl0
J3MKKyAgICAgICAgLy8gYW4gdW5mb3J0dW5hdGUgbmVjZXNzaXR5LiBTZWUgYWJvdmUgY29tbWVu
dC4KKyAgICAgICAgaWYgKGpldHRpc29uZWRCbG9ja0luZGV4ICE9IE5vQmxvY2spIHsKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0
dGlzb25lZEJsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoamV0dGlzb25lZEJsb2NrLT5tX3ByZWRlY2Vzc29yc1tpXSAhPSBm
aXJzdEJsb2NrSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnNbaV0gPSBqZXR0aXNvbmVkQmxv
Y2stPm1fcHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBqZXR0aXNvbmVkQmxv
Y2stPm1fcHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX2Js
b2Nrc1tzZWNvbmRCbG9ja0luZGV4XS5jbGVhcigpOworICAgIH0KK307CisKK2Jvb2wgcGVyZm9y
bUNGR1NpbXBsaWZpY2F0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICByZXR1cm4gcnVuUGhhc2U8
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZV9oCisjZGVmaW5lIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2VfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ0ZHIHNpbXBsaWZp
Y2F0aW9uOgorLy8KKy8vIGp1bXAgdG8gc2luZ2xlIHByZWRlY2Vzc29yIC0+IG1lcmdlIGJsb2Nr
cworLy8gYnJhbmNoIG9uIGNvbnN0YW50IC0+IGp1bXAKKy8vIGJyYW5jaCB0byBzYW1lIGJsb2Nr
cyAtPiBqdW1wCisvLyBqdW1wLW9ubHkgYmxvY2sgLT4gcmVtb3ZlCisvLyBraWxsIGRlYWQgY29k
ZQorCitib29sIHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0
NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3JlcGxhY2VtZW50c1tpXSA9IE5vTm9kZTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrKQotICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKCptX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrXSk7CisgICAgICAgICAgICBwZXJmb3JtQmxvY2tDU0UobV9ncmFwaC5tX2Jsb2Nr
c1tibG9ja10uZ2V0KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTWF5YmUgd2UnbGwgbmVl
ZCB0byBtYWtlIHRoaXMgcmVhc29uIGFib3V0IHdoZXRoZXIgaXQgY2hhbmdlZCB0aGUgZ3JhcGgg
aW4gYW4gYWN0aW9uYWJsZSB3YXk/CiAgICAgfQogICAgIAogcHJpdmF0ZToKQEAgLTEzOSw1MiAr
MTQwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAg
UHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7
Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnBy
ZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBp
c051bWJlclByZWRpY3Rpb24ocmlnaHQpOwotICAgIH0KLSAgICAKLSAgICBib29sIGxvZ2ljYWxO
b3RJc1B1cmUoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICByZXR1
cm4gaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSB8fCAhcHJlZGljdGlvbjsKLSAgICB9
Ci0gICAgCi0gICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0g
ICAgICAgICAgICAmJiAoKG5vZGUub3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLm9wKCkgPT0gUHV0
QnlWYWxBbGlhcykKLSAgICAgICAgICAgICAgICA/IGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVBy
ZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpCi0gICAgICAgICAg
ICAgICAgOiBpc0FjdGlvbmFibGVBcnJheVByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCkpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5v
ZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEobm9kZS5mbGFncygpICYg
Tm9kZU1pZ2h0Q2xvYmJlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgIGNhc2Ug
Q29tcGFyZUxlc3M6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgY2FzZSBD
b21wYXJlR3JlYXRlcjoKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBj
YXNlIENvbXBhcmVFcToKLSAgICAgICAgICAgIHJldHVybiAhaXNQcmVkaWN0ZWROdW1lcmljYWwo
bm9kZSk7Ci0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgICAgIHJldHVybiAhbG9n
aWNhbE5vdElzUHVyZShub2RlKTsKLSAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAg
IHJldHVybiAhYnlWYWxJc1B1cmUobm9kZSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJZiBi
eSBzb21lIG9kZGl0eSB3ZSBoaXQgdGhpcyBjYXNlIGluIHJlbGVhc2UgYnVpbGQgaXQncyBzYWZl
ciB0byBoYXZlIENTRSBhc3N1bWUgdGhlIHdvcnN0LgotICAgICAgICB9Ci0gICAgfQotICAgIAog
ICAgIE5vZGVJbmRleCBpbXB1cmVDU0UoTm9kZSYgbm9kZSkKICAgICB7CiAgICAgICAgIE5vZGVJ
bmRleCBjaGlsZDEgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEoKSk7CkBAIC0yMTUsNyArMTcw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb05vZGU7CkBAIC0yMzgsNyAr
MTkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRl
eCkpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAt
MjU0LDE0ICsyMDksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW2luZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAg
ICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmICghYnlWYWxJc1B1cmUobm9kZSkp
CisgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGlmIChub2RlLmNo
aWxkMSgpID09IGNoaWxkMSAmJiBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25p
Y2FsaXplKGNoaWxkMikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKCFieVZhbElzUHVyZShu
b2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKSA9PSBj
YW5vbmljYWxpemUoY2hpbGQyKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hp
bGQzKCkuaW5kZXgoKTsKQEAgLTI4MCw3ICsyMzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIC8vIEEgcHVzaCBjYW5ub3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3RpbmcgZWxlbWVudHMg
aW4gdGhlIGFycmF5LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CkBAIC0zMzEsNyArMjg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAg
ICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYg
UHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4K
ICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2li
bGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGNo
YW5nZS4KQEAgLTM0MCw3ICsyOTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zNzcsNyAr
MzMyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAg
aWYgKGJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlW
YWxJc1B1cmUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3Bl
Y3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAg
ICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRv
IGNhdXNlIGEgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KQEAgLTM4
Niw3ICszNDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlm
IChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9i
YmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTQxNiw3ICszNzEsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJ
c1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShu
b2RlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRo
YXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAgICAgICAgICAgICAv
LyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBz
dHJ1Y3R1cmUKICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgpAQCAtNDI1LDcgKzM4MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJz
V29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
aW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNDYxLDEyICs0MTYsMTIgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICAgICAgaWYgKGlzRml4ZWRJbmRleGVkU3RvcmFnZU9i
amVjdFByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpICYmIGJ5
VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAgICAgIGlmIChpc0ZpeGVkSW5kZXhlZFN0b3Jh
Z2VPYmplY3RQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSAm
JiBtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogCiAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTYxMCw2ICs1NjUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElzU3RyaW5nOgogICAgICAg
ICBjYXNlIElzT2JqZWN0OgogICAgICAgICBjYXNlIElzRnVuY3Rpb246CisgICAgICAgIGNhc2Ug
TG9naWNhbE5vdDoKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHB1cmVDU0Uobm9kZSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTYzNSwxOCArNTkxLDkgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKICAgICAgICAgY2FzZSBDb21wYXJl
R3JlYXRlckVxOgogICAgICAgICBjYXNlIENvbXBhcmVFcTogewotICAgICAgICAgICAgaWYgKGlz
UHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHJl
cGxhY2VtZW50SW5kZXggPSBwdXJlQ1NFKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChyZXBs
YWNlbWVudEluZGV4ICE9IE5vTm9kZSAmJiBpc1ByZWRpY3RlZE51bWVyaWNhbChtX2dyYXBoW3Jl
cGxhY2VtZW50SW5kZXhdKSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVw
bGFjZW1lbnRJbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTG9naWNhbE5vdDogewotICAgICAgICAg
ICAgaWYgKGxvZ2ljYWxOb3RJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBo
LmlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4
IHJlcGxhY2VtZW50SW5kZXggPSBwdXJlQ1NFKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChy
ZXBsYWNlbWVudEluZGV4ICE9IE5vTm9kZSAmJiBsb2dpY2FsTm90SXNQdXJlKG1fZ3JhcGhbcmVw
bGFjZW1lbnRJbmRleF0pKQorICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudEluZGV4ICE9
IE5vTm9kZSAmJiBtX2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG1fZ3JhcGhbcmVwbGFjZW1l
bnRJbmRleF0pKQogICAgICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChyZXBsYWNlbWVu
dEluZGV4KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjU5LDEyICs2
MDYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkpCisg
ICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAgICAgICAg
ICBzZXRSZXBsYWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmlu
ZGV4KCksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGlmIChieVZhbElz
UHVyZShub2RlKSAmJiBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4
KCksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgaWYgKG1f
Z3JhcGguYnlWYWxJc1B1cmUobm9kZSkgJiYgZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5j
aGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCkpICE9IE5vTm9kZSkKICAgICAg
ICAgICAgICAgICBub2RlLnNldE9wKFB1dEJ5VmFsQWxpYXMpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKQEAgLTcwNCwxNCArNjUxLDE5IEBAIHByaXZhdGU6CiAjZW5kaWYKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBwZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9jayYgYmxvY2spCisg
ICAgdm9pZCBwZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAg
ICBtX2N1cnJlbnRCbG9jayA9ICZibG9jazsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGFzdE5vZGVUeXBlOyArK2kpCiAgICAgICAg
ICAgICBtX2xhc3RTZWVuW2ldID0gVUlOVF9NQVg7CiAKLSAgICAgICAgZm9yIChtX2luZGV4SW5C
bG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK21faW5kZXhJbkJsb2Nr
KSB7Ci0gICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrW21faW5kZXhJbkJsb2NrXTsK
KyAgICAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2st
PnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgbV9jb21waWxlSW5kZXgg
PSBibG9jay0+YXQobV9pbmRleEluQmxvY2spOwogICAgICAgICAgICAgcGVyZm9ybU5vZGVDU0Uo
bV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwogICAgICAgICB9CiAgICAgfQpAQCAtNzIzLDkgKzY3
NSw5IEBAIHByaXZhdGU6CiAgICAgRml4ZWRBcnJheTx1bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBt
X2xhc3RTZWVuOwogfTsKIAotdm9pZCBwZXJmb3JtQ1NFKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVy
Zm9ybUNTRShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsK
KyAgICByZXR1cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
aAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQ
aGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIEdyYXBoOwogLy8g
YSB3aWRlIHJhbmdlIG9mIHN1YmV4cHJlc3Npb24gc2ltaWxhcml0aWVzLiBJdCdzIGtub3duIHRv
IHByb2R1Y2UgYmlnIHdpbnMKIC8vIG9uIGEgZmV3IGJlbmNobWFya3MsIGFuZCBpcyByZWxhdGl2
ZWx5IGNoZWFwIHRvIHJ1bi4KIAotdm9pZCBwZXJmb3JtQ1NFKEdyYXBoJik7Citib29sIHBlcmZv
cm1DU0UoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkg
KzM3LDkgQEAKICNkZWZpbmUgREZHX0VOQUJMRShERkdfRkVBVFVSRSkgKGRlZmluZWQgREZHX0VO
QUJMRV8jI0RGR19GRUFUVVJFICYmIERGR19FTkFCTEVfIyNERkdfRkVBVFVSRSkKIAogLy8gRW1p
dCB2YXJpb3VzIGxvZ2dpbmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1
bXBpbmcgdGhlIGRhdGFmbG93IGdyYXBocy4KLSNkZWZpbmUgREZHX0VOQUJMRV9ERUJVR19WRVJC
T1NFIDAKKyNkZWZpbmUgREZHX0VOQUJMRV9ERUJVR19WRVJCT1NFIDEKIC8vIEVtaXQgZHVtcHMg
ZHVyaW5nIHByb3BhZ2F0aW9uLCBpbiBhZGRpdGlvbiB0byBqdXN0IGFmdGVyLgotI2RlZmluZSBE
RkdfRU5BQkxFX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UgMAorI2RlZmluZSBERkdfRU5BQkxF
X0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UgMQogLy8gRW1pdCBsb2dnaW5nIGZvciBPU1IgZXhp
dCB2YWx1ZSByZWNvdmVyaWVzIGF0IGV2ZXJ5IG5vZGUsIG5vdCBqdXN0IG5vZGVzIHRoYXQKIC8v
IGFjdHVhbGx5IGhhcyBzcGVjdWxhdGlvbiBjaGVja3MuCiAjZGVmaW5lIERGR19FTkFCTEVfVkVS
Qk9TRV9WQUxVRV9SRUNPVkVSSUVTIDAKQEAgLTYyLDcgKzYyLDcgQEAKIC8vIEVtaXQgYSBicmVh
a3BvaW50IGludG8gdGhlIHNwZWN1bGF0aW9uIGZhaWx1cmUgY29kZS4KICNkZWZpbmUgREZHX0VO
QUJMRV9KSVRfQlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJTFVSRSAwCiAvLyBMb2cgZXZlcnkgc3Bl
Y3VsYXRpb24gZmFpbHVyZS4KLSNkZWZpbmUgREZHX0VOQUJMRV9WRVJCT1NFX1NQRUNVTEFUSU9O
X0ZBSUxVUkUgMAorI2RlZmluZSBERkdfRU5BQkxFX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVS
RSAxCiAvLyBEaXNhYmxlIHRoZSBERkcgSklUIHdpdGhvdXQgaGF2aW5nIHRvIHRvdWNoIFBsYXRm
b3JtLmgKICNkZWZpbmUgREZHX0RFQlVHX0xPQ0FMX0RJU0JBTEUgMAogLy8gRW5hYmxlIE9TUiBl
bnRyeSBmcm9tIGJhc2VsaW5lIEpJVC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDIxIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgeworICAgICAgICBi
b29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIEFic3RyYWN0U3RhdGUgc3Rh
dGUobV9ncmFwaCk7CiAgICAgICAgIEluc2VydGlvblNldDxOb2RlSW5kZXg+IGluc2VydGlvblNl
dDsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBpZiAoIWJsb2NrLT5jZmFGb3VuZENvbnN0YW50cykKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN0YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7
CisgICAgICAgICAgICBib29sIGJsb2NrQ2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyArK2luZGV4SW5CbG9jaykgewogICAgICAgICAgICAgICAgIGlmICghc3RhdGUuaXNWYWxpZCgp
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTYwLDI5ICs2NSw1OCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleElu
QmxvY2spOwogICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07
CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkKLSAgICAgICAgICAg
ICAgICAgICAgfHwgKG5vZGUuZmxhZ3MoKSAmIChOb2RlQ2xvYmJlcnNXb3JsZCB8IE5vZGVNaWdo
dENsb2JiZXIpKQorICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoLmNsb2JiZXJzV29ybGQo
bm9kZSkKICAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS5oYXNDb25zdGFudCgpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
c3RhdGUuZm9yTm9kZShub2RlSW5kZXgpLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCF2
YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgTm9k
ZSBwaGFudG9tKFBoYW50b20sIG5vZGUuY29kZU9yaWdpbik7Ci0gICAgICAgICAgICAgICAgcGhh
bnRvbS5jaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47Ci0gICAgICAgICAgICAgICAgcGhhbnRvbS5y
ZWYoKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGVJbmRl
eCwgdmFsdWUpOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwaGFudG9tTm9kZUluZGV4ID0g
bV9ncmFwaC5zaXplKCk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQocGhhbnRvbSk7
Ci0gICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2ssIHBoYW50
b21Ob2RlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElzIHRo
ZSBub2RlIHdlJ3JlIGNvbnZlcnRpbmcgYSBHZXRMb2NhbD8gSWYgc28sIHdlIG5lZWQgdG8gZW5z
dXJlCisgICAgICAgICAgICAgICAgLy8gdGhhdCB2YXJpYWJsZXNBdEhlYWQvdmFyaWFibGVzQXRU
YWlsIGlzIGZpeGVkIHVwIQorICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TG9j
YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2dyYXBoLmlzQ2FwdHVyZWQobm9k
ZS5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAg
ICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vZGVJbmRleCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2Fs
KCkpID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgLy8gUHV0IGluIGEgZGVhZCBTZXRMb2NhbCB0byBlbnN1cmUgdGhhdCBP
U1Iga25vd3MgdGhlIHN0YXRlIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFi
bGUgaW4gdGhpcyBibG9jay4KKyAgICAgICAgICAgICAgICAgICAgTm9kZSBzZXRMb2NhbChTZXRM
b2NhbCwgbm9kZS5jb2RlT3JpZ2luLCBPcEluZm8obm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSks
IG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGVJbmRleCwgdmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHNldExvY2FsSW5kZXggPSBt
X2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQoc2V0TG9j
YWwpOworICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuYXBwZW5kKGluZGV4SW5CbG9j
ayArIDEsIHNldExvY2FsSW5kZXgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUgcGhhbnRvbShQaGFudG9tLCBub2RlLmNvZGVPcmlnaW4pOworCisg
ICAgICAgICAgICAgICAgICAgIHBoYW50b20uY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuOworICAg
ICAgICAgICAgICAgICAgICBwaGFudG9tLnJlZigpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlSW5kZXgsIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHBoYW50b21Ob2RlSW5kZXggPSBt
X2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQocGhhbnRv
bSk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2Nr
LCBwaGFudG9tTm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YmxvY2tDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChibG9j
a0NoYW5nZWQpIHsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgqYmxvY2sp
OworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgc3RhdGUucmVzZXQoKTsKLSAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCpi
bG9jayk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAg
IH0KIH07CiAKLXZvaWQgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhHcmFwaCYgZ3JhcGgpCitib29s
IHBlcmZvcm1Db25zdGFudEZvbGRpbmcoR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNlPENv
bnN0YW50Rm9sZGluZ1BoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPENvbnN0YW50
Rm9sZGluZ1BoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCBjbGFzcyBHcmFwaDsKIC8vIGluZmVycmVkIGNvbnN0YW50cywgYW5kIHJlcGxhY2VzIHRob3Nl
IG5vZGVzIHdpdGggY29uc3RhbnRzIHdoaWxzdCBpbmplY3RpbmcKIC8vIFBoYW50b20gbm9kZXMg
dG8ga2VlcCB0aGUgY2hpbGRyZW4gYWxpdmUgKHdoaWNoIGlzIG5lY2Vzc2FyeSBmb3IgT1NSIGV4
aXQpLgogCi12b2lkIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoR3JhcGgmKTsKK2Jvb2wgcGVyZm9y
bUNvbnN0YW50Rm9sZGluZyhHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDEx
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQnl0ZUNvZGVQYXJzZXIuaCIK
ICNpbmNsdWRlICJERkdDRkFQaGFzZS5oIgorI2luY2x1ZGUgIkRGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuaCIKICNpbmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgpAQCAtNjMsOSArNjQs
MTUgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIHBlcmZv
cm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbihkZmcpOwogICAgIHBlcmZvcm1QcmVkaWN0aW9uUHJv
cGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtRml4dXAoZGZnKTsKLSAgICBwZXJmb3JtQ0ZBKGRm
Zyk7Ci0gICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwotICAgIHBlcmZvcm1DU0UoZGZn
KTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAg
ICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNvbnN0YW50Rm9s
ZGluZyhkZmcpOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihk
ZmcpOworICAgICAgICBwZXJmb3JtQ1NFKGRmZyk7CisgICAgICAgIGlmICghY2hhbmdlZCkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2Nh
dGlvbihkZmcpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBA
IHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4VW5jaGVja2VkKCkgIT0gTm9Ob2RlOyB9CisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIGlzU2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFp
c1NldCgpOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KEVkZ2Ugb3RoZXIpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlz
aW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKICAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFw
aC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAogcHJpdmF0ZToKQEAgLTM1OSw5ICszNjAsOSBAQCBwcml2YXRlOgogICAgIEluc2VydGlv
blNldDxOb2RlSW5kZXg+IG1faW5zZXJ0aW9uU2V0OwogfTsKICAgICAKLXZvaWQgcGVyZm9ybUZp
eHVwKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUZpeHVwKEdyYXBoJiBncmFwaCkKIHsKLSAg
ICBydW5QaGFzZTxGaXh1cFBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPEZpeHVw
UGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIEdyYXBoOwogLy8gRml4IHBvcnRpb25zIG9mIHRo
ZSBncmFwaCB0aGF0IGFyZSBpbmVmZmljaWVudCBnaXZlbiB0aGUgcHJlZGljdGlvbnMgdGhhdAog
Ly8gd2UgaGF2ZS4gVGhpcyBzaG91bGQgcnVuIGFmdGVyIHByZWRpY3Rpb24gcHJvcGFnYXRpb24g
YnV0IGJlZm9yZSBDU0UuCiAKLXZvaWQgcGVyZm9ybUZpeHVwKEdyYXBoJik7Citib29sIHBlcmZv
cm1GaXh1cChHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHOjpQaGFzZQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTE0NTU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3OCw2ICsyNzgsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKCkKICAgICBOb2RlSW5kZXgg
bGFzdE5vZGVJbmRleCA9IE5vTm9kZTsKICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxv
Y2tzLnNpemUoKTsgKytiKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3Nb
Yl0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgZGF0YUxvZygiQmxvY2sgIyV1IChiYyMldSk6ICVzJXNcbiIsIChpbnQpYiwgYmxvY2st
PmJ5dGVjb2RlQmVnaW4sIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIiIDogIiAoc2tpcHBlZCkiLCBi
bG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7CiAgICAgICAgIGRhdGFM
b2coIiAgUGhpIE5vZGVzOlxuIik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxv
Y2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKQEAgLTMwNSw2ICszMDcsOSBAQCB2b2lkIEdyYXBoOjpk
dW1wKCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGF0YUxvZygiPGVtcHR5PiIpOwogICAg
ICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICBkYXRhTG9nKCIgIHZhciBsaW5rczogIik7Cisg
ICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFyaWFibGVzQXRUYWlsLCBXVEY6OmRhdGFGaWxl
KCkpOworICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAgIH0KIH0KIApAQCAtMzYyLDYgKzM2Nyw1
NCBAQCB2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcygpCiAgICAgfQogfQogCit2b2lk
IEdyYXBoOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3Qs
IEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKK3sKKyAg
ICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2Jsb2Nrc1tzdWNjZXNzb3JJbmRleF0uZ2V0KCk7
CisgICAgaWYgKCFzdWNjZXNzb3ItPmlzUmVhY2hhYmxlKSB7CisgICAgICAgIHN1Y2Nlc3Nvci0+
aXNSZWFjaGFibGUgPSB0cnVlOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQoc3VjY2Vzc29ySW5k
ZXgpOworICAgIH0KKyAgICAKKyAgICBzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChi
bG9ja0luZGV4KTsKK30KKwordm9pZCBHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKK3sK
KyAgICBWZWN0b3I8QmxvY2tJbmRleCwgMTY+IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LmFwcGVu
ZCgwKTsKKyAgICBtX2Jsb2Nrc1swXS0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgIHdoaWxlICgh
d29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJsb2NrSW5kZXggaW5kZXggPSB3b3JrbGlz
dC5sYXN0KCk7CisgICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgCisgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbaW5kZXhdLmdldCgpOworICAgICAgICBB
U1NFUlQoYmxvY2stPmlzTGlua2VkKTsKKyAgICAgICAgCisgICAgICAgIE5vZGUmIG5vZGUgPSBh
dChibG9jay0+bGFzdCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUuaXNUZXJtaW5hbCgpKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChub2RlLmlzSnVtcCgpKQorICAgICAgICAgICAgaGFuZGxlU3Vj
Y2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAg
IGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkgeworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29y
KHdvcmtsaXN0LCBpbmRleCwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgICAgICBo
YW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgp
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHko
KQoreworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ibG9ja3Muc2l6ZSgpOyBi
bG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgYmxvY2stPmlzUmVhY2hhYmxlID0gZmFsc2U7CisgICAgICAgIGJsb2NrLT5t
X3ByZWRlY2Vzc29ycy5jbGVhcigpOworICAgIH0KKyAgICAKKyAgICBkZXRlcm1pbmVSZWFjaGFi
aWxpdHkoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2
LDYgKzM0Niw2NCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpc0NhcHR1cmVkKHN0YXRpY19j
YXN0PGludD4odmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG51
bVN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gYXQo
YmxvY2stPmxhc3QoKSkubnVtU3VjY2Vzc29ycygpOworICAgIH0KKyAgICBCbG9ja0luZGV4IHN1
Y2Nlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29yKGluZGV4KTsKKyAgICB9CisgICAg
QmxvY2tJbmRleCBzdWNjZXNzb3JGb3JDb25kaXRpb24oQmFzaWNCbG9jayogYmxvY2ssIGJvb2wg
Y29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGJsb2NrLT5sYXN0KCkpLnN1Y2Nl
c3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgIH0KKyAgICAKKyAgICBib29sIGlzUHJl
ZGljdGVkTnVtZXJpY2FsKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBQcmVkaWN0ZWRUeXBl
IGxlZnQgPSBhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCk7CisgICAgICAgIFByZWRpY3Rl
ZFR5cGUgcmlnaHQgPSBhdChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9uKCk7CisgICAgICAgIHJl
dHVybiBpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBub2RlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KQorICAgICAgICAgICAgJiYgKChub2RlLm9wKCkgPT0gUHV0QnlWYWwgfHwgbm9kZS5vcCgpID09
IFB1dEJ5VmFsQWxpYXMpCisgICAgICAgICAgICAgICAgPyBpc0FjdGlvbmFibGVNdXRhYmxlQXJy
YXlQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSkKKyAgICAgICAgICAg
ICAgICA6IGlzQWN0aW9uYWJsZUFycmF5UHJlZGljdGlvbihhdChub2RlLmNoaWxkMSgpKS5wcmVk
aWN0aW9uKCkpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGUmIG5v
ZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCEobm9kZS5mbGFncygpICYg
Tm9kZU1pZ2h0Q2xvYmJlcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIGNhc2Ug
Q29tcGFyZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgY2FzZSBD
b21wYXJlR3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgorICAgICAgICBj
YXNlIENvbXBhcmVFcToKKyAgICAgICAgICAgIHJldHVybiAhaXNQcmVkaWN0ZWROdW1lcmljYWwo
bm9kZSk7CisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICByZXR1cm4gIWJ5VmFs
SXNQdXJlKG5vZGUpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSWYgYnkgc29tZSBvZGRpdHkg
d2UgaGl0IHRoaXMgY2FzZSBpbiByZWxlYXNlIGJ1aWxkIGl0J3Mgc2FmZXIgdG8gaGF2ZSBDU0Ug
YXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGNsb2Ji
ZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBjbG9i
YmVyc1dvcmxkKGF0KG5vZGVJbmRleCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRldGVybWlu
ZVJlYWNoYWJpbGl0eSgpOworICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICAKICAg
ICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OwogICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwpAQCAtMzY0LDYgKzQyMiw4IEBAIHB1
YmxpYzoKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwogcHJpdmF0ZToKICAgICAKKyAg
ICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwg
QmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKKyAgICAK
ICAgICBib29sIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgYWRkLCBO
b2RlJiB2YXJpYWJsZSwgTm9kZSYgaW1tZWRpYXRlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlt
bWVkaWF0ZS5oYXNDb25zdGFudCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBzdHJ1Y3QgT3BJbmZvIHsKIC8v
IE5vZGUgcmVwcmVzZW50cyBhIHNpbmdsZSBvcGVyYXRpb24gaW4gdGhlIGRhdGEgZmxvdyBncmFw
aC4KIHN0cnVjdCBOb2RlIHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OwotCisgICAg
CiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVk
aWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2lu
KQpAQCAtMjAyLDcgKzIwMiw4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9vcCA9IEpTQ29u
c3RhbnQ7CiAgICAgICAgIGlmIChtX2ZsYWdzICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAg
ICAgIG1fcmVmQ291bnQtLTsKLSAgICAgICAgbV9mbGFncyAmPSB+Tm9kZU11c3RHZW5lcmF0ZTsK
KyAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVDbG9iYmVyc1dvcmxkKSk7CisgICAgICAg
IG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcik7CiAgICAg
ICAgIG1fb3BJbmZvID0gY29uc3RhbnROdW1iZXI7CiAgICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7
CiAgICAgfQpAQCAtNDY4LDYgKzQ2OSwzNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVy
biBtX29wSW5mbzI7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgIHJldHVy
biAyOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgQmxvY2tJbmRleCBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4KSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAg
ICAgIHJldHVybiB0YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAg
ICAgcmV0dXJuIG5vdFRha2VuQmxvY2tJbmRleCgpOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gTm9CbG9jazsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvckZvckNvbmRp
dGlvbihib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsK
KyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/IHRha2VuQmxvY2tJbmRleCgpIDogbm90VGFrZW5C
bG9ja0luZGV4KCk7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzSGVhcFByZWRpY3Rpb24oKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oSXNTdHJpbmcsIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNPYmplY3QsIE5vZGVSZXN1bHRCb29sZWFu
KSBcCiAgICAgbWFjcm8oSXNGdW5jdGlvbiwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBtYWNy
byhMb2dpY2FsTm90LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNaWdodENsb2JiZXIpIFwKKyAg
ICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKFRvUHJp
bWl0aXZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29y
bGQpIFwKICAgICBtYWNybyhTdHJDYXQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTIxLDcgKzExMjEsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBkZmdD
b252ZXJ0SlNWYWx1ZVRvCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEs
IGV4ZWMpOwogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wKS50b0Jv
b2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvQm9v
bGVhbigpOwogfQogCiAjaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTczLDEwICs3MywxMCBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgUGhh
c2VUeXBlPgotdm9pZCBydW5QaGFzZShHcmFwaCYgZ3JhcGgpCitib29sIHJ1blBoYXNlKEdyYXBo
JiBncmFwaCkKIHsKICAgICBQaGFzZVR5cGUgcGhhc2UoZ3JhcGgpOwotICAgIHBoYXNlLnJ1bigp
OworICAgIHJldHVybiBwaGFzZS5ydW4oKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgbV9jb3VudCA9IDA7CkBAIC03Nyw2
ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRvUm91bmRPZkRvdWJsZVZvdGluZygpOwog
ICAgICAgICAgICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKICAgICAgICAgfSB3aGlsZSAobV9jaGFu
Z2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKIHByaXZh
dGU6CkBAIC04MzEsOSArODMzLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKICAgICAKLXZvaWQg
cGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNlPFByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPFByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGFyaXRobWV0aWMg
bm9kZXMpIGRvIG5vdCBxdWFsaWZ5IGZvciBhbnkgb2YgdGhlc2UgY2F0ZWdvcmllcy4gQnV0IGFm
dGVyIHJ1bm5pbmcKIC8vIHRoaXMgcGhhc2UsIHdlJ2xsIGhhdmUgZnVsbCBpbmZvcm1hdGlvbiBm
b3IgdGhlIGV4cGVjdGVkIHR5cGUgb2YgZWFjaCBub2RlLgogCi12b2lkIHBlcmZvcm1QcmVkaWN0
aW9uUHJvcGFnYXRpb24oR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlv
bihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHOjpQaGFzZQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50
UGhpRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOwogICAgICAgICBkbyB7CkBAIC02Myw3ICs2Myw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCisgICAgICAgIAor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNjYsOSArMTY3LDkg
QEAgcHJpdmF0ZToKIAogfTsKIAotdm9pZCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24o
R3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24oR3JhcGgm
IGdyYXBoKQogewotICAgIHJ1blBoYXNlPFJlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2U+KGdy
YXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZT4o
Z3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0
aW9uUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBXZSBpbnNlcnRlZCBtYW55IGNhbi1iZS1yZWR1
bmRhbnQgUGhpIG5vZGVzIHdoZW4gYnVpbGRpbmcgdGhlIGdyYXBoLgogLy8gVGhpcyBwaGFzZSB3
aWxsIGp1c3QgcmVtb3ZlIHRoZW0uCiAKLXZvaWQgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0
aW9uKEdyYXBoJik7Citib29sIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbihHcmFwaCYp
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYg
KzEyMCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBDbGVhciB0aGUgdXNlIGNvdW50ICYg
YWRkIHRvIHRoZSBmcmVlIGxpc3QuCiAgICAgICAgICAgICBtX3VzZWRbaW5kZXhdID0gMDsKICAg
ICAgICAgICAgIG1fZnJlZS5hcHBlbmQoaW5kZXgpOworICAgICAgICB9IGVsc2UgeworI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2co
IiBWaXJ0dWFsIHJlZ2lzdGVyICV1IGlzIGF0ICV1LyV1IHVzZXMuIiwgaW5kZXgsIG1fdXNlZFtp
bmRleF0sIG5vZGUucmVmQ291bnQoKSk7CisjZW5kaWYKICAgICAgICAgfQogICAgIH0KICAgICB2
b2lkIHVzZShFZGdlIGNoaWxkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjgwLDggKzEyODAsMTEgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBHUFJJbmZvOjpyZWdUMCk7CiAKICAgICBBU1NF
UlQoIW1fY29tcGlsZUluZGV4KTsKLSAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9q
aXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrbV9ibG9jaykKLSAgICAgICAgY29tcGlsZSgq
bV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXSk7CisgICAgZm9yIChtX2Jsb2NrID0gMDsg
bV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spIHsKKyAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2td
LmdldCgpOworICAgICAgICBpZiAoYmxvY2spCisgICAgICAgICAgICBjb21waWxlKCpibG9jayk7
CisgICAgfQogICAgIGxpbmtCcmFuY2hlcygpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTI4
OSw4ICsxMjkyLDEwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcygpCiB7CiAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrJiBibG9jayA9ICptX2ppdC5ncmFw
aCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhdOwotICAgICAgICBpZiAoIWJsb2NrLmlzT1NSVGFyZ2V0
KQorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBuZWVkIHRvIGNyZWF0ZSBPU1IgZW50
cnkgdHJhbXBvbGluZXMgd2hlbiB1c2luZyBlZGdlIGNvZGUKQEAgLTEzMTIsOSArMTMxNywxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmllcyhMaW5rCiB7CiAgICAgdW5zaWdu
ZWQgb3NyRW50cnlJbmRleCA9IDA7CiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRl
eCkgewotICAgICAgICBCYXNpY0Jsb2NrJiBibG9jayA9ICptX2ppdC5ncmFwaCgpLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdOwotICAgICAgICBpZiAoYmxvY2suaXNPU1JUYXJnZXQpCi0gICAgICAgICAg
ICBtX2ppdC5ub3RpY2VPU1JFbnRyeShibG9jaywgbV9vc3JFbnRyeUhlYWRzW29zckVudHJ5SW5k
ZXgrK10sIGxpbmtCdWZmZXIpOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0Lmdy
YXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9qaXQubm90aWNlT1NSRW50cnkoKmJsb2Nr
LCBtX29zckVudHJ5SGVhZHNbb3NyRW50cnlJbmRleCsrXSwgbGlua0J1ZmZlcik7CiAgICAgfQog
ICAgIEFTU0VSVChvc3JFbnRyeUluZGV4ID09IG1fb3NyRW50cnlIZWFkcy5zaXplKCkpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewogI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygiUHJlc2VydmVkIHZhcnM6
ICIpOwpAQCAtNTQsNiArNTQsMTAgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIGZvciAoc2l6
ZV90IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hh
YmxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleElu
QmxvY2spIHsKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0
KGluZGV4SW5CbG9jayk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQpAQCAtMTE0LDEyICsxMTgsMTQgQEAgcHVibGljOgogI2lmIERGR19FTkFCTEUoREVCVUdfVkVS
Qk9TRSkKICAgICAgICAgZGF0YUxvZygiTnVtIGNhbGxlZSByZWdpc3RlcnM6ICV1XG4iLCBjYWxs
ZWVSZWdpc3RlcnMpOwogI2VuZGlmCisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiB9OwogCi12b2lkIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKEdyYXBoJiBn
cmFwaCkKK2Jvb2wgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmIGdyYXBo
KQogewotICAgIHJ1blBoYXNlPFZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZT4oZ3JhcGgp
OworICAgIHJldHVybiBydW5QaGFzZTxWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2U+KGdy
YXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIGNsYXNzIEdyYXBoOwogLy8gZm9yIGxvb2stdXAgdGFibGVzIGZvciB0
aGUgbGluZWFyIHNjYW4gcmVnaXN0ZXIgYWxsb2NhdG9yIHRoYXQgdGhlIGJhY2tlbmQKIC8vIHVz
ZXMuCiAKLXZvaWQgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmKTsKK2Jv
b2wgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmKTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1ODUsNyArMjU4NSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRl
KEV4ZWMKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAg
ICAgICAgIGludCBzcmMgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzQm9vbGVhbighY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxs
RnJhbWUpKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oIWNhbGxGcmFtZS0+
cihzcmMpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJ
T04oKTsKICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7CiAKQEAg
LTM5MDUsNyArMzkwNSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICAqLwogICAg
ICAgICBpbnQgY29uZCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSB2
UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpZiAoY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUo
KS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAoY2FsbEZyYW1lLT5yKGNvbmQp
LmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkgewogICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKICAg
ICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7CkBAIC0zOTI1LDcgKzM5MjUsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAg
ICAgKi8KICAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBpbnQg
dGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoY29u
ZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7CisgICAgICAgIGlmICghY2FsbEZy
YW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkgewogICAgICAgICAgICAgdlBDICs9
IHRhcmdldDsKICAgICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7CiAgICAgICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zOTQyLDcgKzM5NDIsNyBAQCBza2lwX2lkX2N1c3RvbV9z
ZWxmOgogICAgICAgICAqLwogICAgICAgICBpbnQgY29uZCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAg
ICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpZiAoY2FsbEZy
YW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBp
ZiAoY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkgewogICAgICAgICAg
ICAgdlBDICs9IHRhcmdldDsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICAg
ICAgfQpAQCAtMzk1OCw3ICszOTU4LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAg
Ki8KICAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBpbnQgdGFy
Z2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoY29uZCku
anNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7CisgICAgICAgIGlmICghY2FsbEZyYW1l
LT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkgewogICAgICAgICAgICAgdlBDICs9IHRh
cmdldDsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yODU1LDkgKzI4NTUsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwg
b3BfCiAKICAgICBKU1ZhbHVlIHNyYyA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAK
LSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotCi0gICAg
SlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oIXNyYy50b0Jvb2xlYW4oY2FsbEZyYW1lKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oIXNyYy50b0Jvb2xlYW4oKSk7CiAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CkBAIC0yODY4LDkgKzI4NjYsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihpbnQs
IG9wX2p0cnVlKQogCiAgICAgSlNWYWx1ZSBzcmMxID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFs
dWUoKTsKIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7
Ci0KLSAgICBib29sIHJlc3VsdCA9IHNyYzEudG9Cb29sZWFuKGNhbGxGcmFtZSk7CisgICAgYm9v
bCByZXN1bHQgPSBzcmMxLnRvQm9vbGVhbigpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRf
RU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTA3LDcgKzUwNyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdf
cmVnZXgKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9ub3QpCiB7CiAgICAgTExJTlRf
QkVHSU4oKTsKLSAgICBMTElOVF9SRVRVUk4oanNCb29sZWFuKCFMTElOVF9PUF9DKDIpLmpzVmFs
dWUoKS50b0Jvb2xlYW4oZXhlYykpKTsKKyAgICBMTElOVF9SRVRVUk4oanNCb29sZWFuKCFMTElO
VF9PUF9DKDIpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfZXEpCkBAIC0xMTEwLDEzICsxMTEwLDEzIEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9qbXBfc2NvcGUKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9qdHJ1ZSkKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIExMSU5UX0JSQU5DSChvcF9qdHJ1
ZSwgTExJTlRfT1BfQygxKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBMTElOVF9C
UkFOQ0gob3BfanRydWUsIExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvQm9vbGVhbigpKTsKIH0K
IAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pmYWxzZSkKIHsKICAgICBMTElOVF9C
RUdJTigpOwotICAgIExMSU5UX0JSQU5DSChvcF9qZmFsc2UsICFMTElOVF9PUF9DKDEpLmpzVmFs
dWUoKS50b0Jvb2xlYW4oZXhlYykpOworICAgIExMSU5UX0JSQU5DSChvcF9qZmFsc2UsICFMTElO
VF9PUF9DKDEpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9qbGVzcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzk3LDcgKzc5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7
Ci0gICAgICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbihleGVjKSkKKyAgICAgICAgICAgIGlm
IChyZXN1bHQudG9Cb29sZWFuKCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGZpbHRlckluZGV4KyssIHYpOwogICAgICAgICB9CiAgICAgICAgIGlm
IChrID09IGxlbmd0aCkKQEAgLTgxOCw3ICs4MTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHRoaXNPYmop
OwogCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpOwotICAgICAgICBpZiAocmVz
dWx0LnRvQm9vbGVhbihleGVjKSkKKyAgICAgICAgaWYgKHJlc3VsdC50b0Jvb2xlYW4oKSkKICAg
ICAgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBmaWx0ZXJJbmRleCsr
LCB2KTsKICAgICB9CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHRBcnJheSk7CkBA
IC05MTcsNyArOTE3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKLSAgICAgICAgICAgIGlmICgh
cmVzdWx0LnRvQm9vbGVhbihjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkpCisgICAgICAg
ICAgICBpZiAoIXJlc3VsdC50b0Jvb2xlYW4oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtOTM0
LDcgKzkzNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgICAgICBib29sIHByZWRpY2F0ZVJlc3Vs
dCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBl
YWNoQXJndW1lbnRzKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJvb2wgcHJlZGljYXRlUmVz
dWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMs
IGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbigpOwogICAgICAgICBpZiAoIXByZWRpY2F0ZVJlc3Vs
dCkgewogICAgICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKGZhbHNlKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTAyNSw3ICsxMDI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051
bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmop
OwogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKLSAgICAg
ICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFuKGNhY2hlZENhbGwubmV3Q2FsbEZyYW1lKGV4ZWMp
KSkKKyAgICAgICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFuKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTA0Miw3ICsxMDQyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgICAgIGJvb2wgcHJl
ZGljYXRlUmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBh
cHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9vbCBw
cmVkaWNhdGVSZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
IGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cykudG9Cb29sZWFuKCk7CiAgICAgICAgIGlmIChwcmVk
aWNhdGVSZXN1bHQpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbih0cnVlKTsKICAg
ICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgQm9vbGVhbkNvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvbigKIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2Jq
ZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+
Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKLSAg
ICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc0Jvb2xlYW4oYXJn
cy5hdCgwKS50b0Jvb2xlYW4oZXhlYykpKTsKKyAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBqc0Jvb2xlYW4oYXJncy5hdCgwKS50b0Jvb2xlYW4oKSkpOwogICAg
IHJldHVybiBvYmo7CiB9CiAKQEAgLTY4LDcgKzY4LDcgQEAgQ29uc3RydWN0VHlwZSBCb29sZWFu
Q29uc3RydWN0b3I6OmdldENvbgogLy8gRUNNQSAxNS42LjEKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGxCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvQm9vbGVhbihleGVjKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGV4ZWMtPmFyZ3VtZW50KDApLnRvQm9vbGVhbigpKSk7CiB9CiAKIENhbGxUeXBlIEJvb2xlYW5D
b25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDExNDU1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC05Niw3ICs5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBCYXNpYyBjb252
ZXJzaW9ucy4KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0b1ByaW1pdGl2ZShF
eGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKICAgICAgICAgYm9vbCBn
ZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBj
b25zdDsKLSAgICAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAg
IGJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJs
ZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlz
aW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIyLDExICs0MjIsNiBAQCB2b2lkIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgIGdldENsYXNzUHJvcGVydHlOYW1lcyhleGVj
LCBvYmplY3QtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotYm9vbCBK
U09iamVjdDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAog
ewogICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywgUHJlZmVyTnVtYmVy
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNp
b24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAg
ICAgICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZl
VHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBib29sIGdldFByaW1pdGl2
ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OwogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU3RyaW5nKiB0b1N0cmluZyhFeGVjU3RhdGUq
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5j
cHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw3IEBAIGJvb2wgSlNTdHJp
bmc6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgSlNTdHJpbmc6OnRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdAorYm9vbCBKU1N0cmluZzo6
dG9Cb29sZWFuKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9sZW5ndGg7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDExNDU1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxNSw3ICsyMTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsKICAgICAgICAgYm9vbCBn
ZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBj
b25zdDsKICAgICAgICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KikgY29uc3Q7CiAgICAgICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsK
QEAgLTQzNSwyMyArNDM1LDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIGJvb2wg
aXNKU1N0cmluZyhKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYgdi5hc0NlbGwoKS0+
Y2xhc3NJbmZvKCkgPT0gJkpTU3RyaW5nOjpzX2luZm87IH0KIAotICAgIGlubGluZSBib29sIEpT
Q2VsbDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICBpbmxpbmUgYm9vbCBK
U0NlbGw6OnRvQm9vbGVhbigpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNTdHJpbmcoKSkg
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih0aGlzKS0+
dG9Cb29sZWFuKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpT
U3RyaW5nKj4odGhpcyktPnRvQm9vbGVhbigpOwogICAgICAgICByZXR1cm4gIXN0cnVjdHVyZSgp
LT50eXBlSW5mbygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICAvLyAt
LS0gSlNWYWx1ZSBpbmxpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAKLSAg
ICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjp0b0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKSBjb25zdAor
ICAgIGlubGluZSBib29sIEpTVmFsdWU6OnRvQm9vbGVhbigpIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoaXNJbnQzMigpKQogICAgICAgICAgICAgcmV0dXJuIGFzSW50MzIoKTsKICAgICAgICAg
aWYgKGlzRG91YmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gYXNEb3VibGUoKSA+IDAuMCB8fCBh
c0RvdWJsZSgpIDwgMC4wOyAvLyBmYWxzZSBmb3IgTmFOCiAgICAgICAgIGlmIChpc0NlbGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBhc0NlbGwoKS0+dG9Cb29sZWFuKGV4ZWMpOworICAgICAgICAg
ICAgcmV0dXJuIGFzQ2VsbCgpLT50b0Jvb2xlYW4oKTsKICAgICAgICAgcmV0dXJuIGlzVHJ1ZSgp
OyAvLyBmYWxzZSwgbnVsbCwgYW5kIHVuZGVmaW5lZCBhbGwgY29udmVydCB0byBmYWxzZS4KICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHJldmlz
aW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUg
PSBOb1ByZWZlcmVuY2UpIGNvbnN0OwogICAgICAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihF
eGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpOwogCi0gICAgICAgIGJvb2wgdG9C
b29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBib29sIHRvQm9vbGVhbigpIGNvbnN0
OwogCiAgICAgICAgIC8vIHRvTnVtYmVyIGNvbnZlcnNpb24gaXMgZXhwZWN0ZWQgdG8gYmUgc2lk
ZSBlZmZlY3QgZnJlZSBpZiBhbiBleGNlcHRpb24gaGFzCiAgICAgICAgIC8vIGJlZW4gc2V0IGlu
IHRoZSBFeGVjU3RhdGUgYWxyZWFkeS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE0LDE0ICsyMTQsMTQgQEAgc3RhdGljIGJvb2wgdG9Qcm9wZXJ0eURl
c2NyaXB0b3IoRXhlY1N0YQogCiAgICAgUHJvcGVydHlTbG90IGVudW1lcmFibGVTbG90KGRlc2Ny
aXB0aW9uKTsKICAgICBpZiAoZGVzY3JpcHRpb24tPmdldFByb3BlcnR5U2xvdChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSwgZW51bWVyYWJsZVNsb3QpKSB7Ci0gICAgICAg
IGRlc2Muc2V0RW51bWVyYWJsZShlbnVtZXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgZGVz
Yy5zZXRFbnVtZXJhYmxlKGVudW1lcmFibGVTbG90LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5lbnVtZXJhYmxlKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBQ
cm9wZXJ0eVNsb3QgY29uZmlndXJhYmxlU2xvdChkZXNjcmlwdGlvbik7CiAgICAgaWYgKGRlc2Ny
aXB0aW9uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZp
Z3VyYWJsZSwgY29uZmlndXJhYmxlU2xvdCkpIHsKLSAgICAgICAgZGVzYy5zZXRDb25maWd1cmFi
bGUoY29uZmlndXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y29uZmlndXJhYmxlKS50b0Jvb2xlYW4oZXhlYykpOworICAgICAgICBkZXNjLnNldENvbmZpZ3Vy
YWJsZShjb25maWd1cmFibGVTbG90LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5jb25maWd1cmFibGUpLnRvQm9vbGVhbigpKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTIzNiw3ICsyMzYs
NyBAQCBzdGF0aWMgYm9vbCB0b1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhCiAKICAgICBQcm9w
ZXJ0eVNsb3Qgd3JpdGFibGVTbG90KGRlc2NyaXB0aW9uKTsKICAgICBpZiAoZGVzY3JpcHRpb24t
PmdldFByb3BlcnR5U2xvdChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkud3JpdGFibGUsIHdy
aXRhYmxlU2xvdCkpIHsKLSAgICAgICAgZGVzYy5zZXRXcml0YWJsZSh3cml0YWJsZVNsb3QuZ2V0
VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKS50b0Jvb2xlYW4oZXhl
YykpOworICAgICAgICBkZXNjLnNldFdyaXRhYmxlKHdyaXRhYmxlU2xvdC5nZXRWYWx1ZShleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkud3JpdGFibGUpLnRvQm9vbGVhbigpKTsKICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDkg
KzI0OSw5IEBAIHZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUKICAgICBh
c1JlZ0V4cENvbnN0cnVjdG9yKGJhc2VPYmplY3QpLT5zZXRJbnB1dChleGVjLCB2YWx1ZS50b1N0
cmluZyhleGVjKSk7CiB9CiAKLXZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQg
c2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgYXNSZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2Jq
ZWN0KS0+c2V0TXVsdGlsaW5lKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgYXNSZWdFeHBD
b25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0TXVsdGlsaW5lKHZhbHVlLnRvQm9vbGVhbigpKTsK
IH0KIAogLy8gRUNNQSAxNS4xMC40CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NywxMSArMTQ3LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVn
RXhwUHJvdG8KIAogICAgIGNoYXIgcG9zdGZpeFs1XSA9IHsgJy8nLCAwLCAwLCAwLCAwIH07CiAg
ICAgaW50IGluZGV4ID0gMTsKLSAgICBpZiAodGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5nbG9iYWwpLnRvQm9vbGVhbihleGVjKSkKKyAgICBpZiAodGhpc09iamVj
dC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nbG9iYWwpLnRvQm9vbGVhbigpKQog
ICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2cnOwotICAgIGlmICh0aGlzT2JqZWN0LT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlnbm9yZUNhc2UpLnRvQm9vbGVhbihleGVjKSkK
KyAgICBpZiAodGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pZ25v
cmVDYXNlKS50b0Jvb2xlYW4oKSkKICAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICdpJzsKLSAg
ICBpZiAodGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tdWx0aWxp
bmUpLnRvQm9vbGVhbihleGVjKSkKKyAgICBpZiAodGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5tdWx0aWxpbmUpLnRvQm9vbGVhbigpKQogICAgICAgICBwb3N0Zml4
W2luZGV4XSA9ICdtJzsKICAgICBVU3RyaW5nIHNvdXJjZSA9IHRoaXNPYmplY3QtPmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc291cmNlKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7CiAgICAgLy8gSWYgc291cmNlIGlzIGVtcHR5LCB1c2UgIi8oPzopLyIgdG8gYXZvaWQgY29s
bGlkaW5nIHdpdGggY29tbWVudCBzeW50YXgK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138517</attachid>
            <date>2012-04-24 01:35:09 -0700</date>
            <delta_ts>2012-04-24 01:54:03 -0700</delta_ts>
            <desc>getting closer</desc>
            <filename>cfgsimplify_patch_4.diff</filename>
            <type>text/plain</type>
            <size>94843</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0ODYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNCBA
QAorMjAxMi0wNC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTUzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGlu
IHByb2dyZXNzLgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNW
YWx1ZVRvQm9vbGVhbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAg
ICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6
cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAg
ICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2Uu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChDRkdTaW1wbGlmaWNhdGlv
blBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpDRkdT
aW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpbmRPcGVyYW5kU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjprZWVwT3BlcmFuZEFsaXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlm
aWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpD
RkdTaW1wbGlmaWNhdGlvblBoYXNlOjptZXJnZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6
cGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NT
RVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cnVuKToKKyAgICAgICAg
KENTRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2xvYmJlcnNXb3JsZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuaDoKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5oOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3VjY2Vz
c29yRm9yQ29uZGl0aW9uKToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om51bVN1Y2Nlc3NvcnMpOgorICAgICAgICAo
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3JGb3JDb25kaXRpb24pOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR1BoYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6cnVuUGhh
c2UpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbik6CisgICAgICAgICog
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAg
ICAgICAqIGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpydW4pOgorICAgICAgICAo
SlNDOjpERkc6OnBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbik6CisgICAgICAgICogZGZn
L0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OnBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3Bw
OgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
RXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAqIHJ1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9v
bGVhbik6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAg
KEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjp0b0Jvb2xlYW4pOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjp0
b1Byb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4
cFByb3RvRnVuY1RvU3RyaW5nKToKKwogMjAxMi0wNC0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaGF2ZSBjb25zdGFudCBwcm9wYWdhdGlv
bgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9vbCBKU1ZhbHVlVG9Cb29sZWFuKEpT
Q29udGV4dFJlZiBjdHgsIAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKLSAgICByZXR1cm4ganNWYWx1
ZS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIGpzVmFsdWUudG9Cb29sZWFuKCk7CiB9CiAK
IGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1
ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw4IEBACiAJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZEMTQ3
MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYzQjNBMUExNTNF
NjhGMjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE3MTUzRTY4RUYwMDNFRDBG
RiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGM0IzQTFCMTUzRTY4
RjQwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8q
IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyogREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDUxNDYwQ0JBQjAw
MTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJl
Z2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNEIxNDYwQ0Q2RTAw
MTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc2OCw2ICs3
NzAsOCBAQAogCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCM0ExODE1M0U2
OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNCM0EyNDE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NGR1NpbXBsaWZp
Y2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMDQ1LDYgKzIwNDksOCBAQAogCQkJCTBGN0IyOTQ4MTRDM0NE
MjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLywKIAkJCQkwRkZGQzk0QjE0RUY5MDk1
MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTRDMTRFRjkwOTUwMEM3
MjUzMiAvKiBERkdDRkFQaGFzZS5oICovLAorCQkJCTBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAv
KiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjNCM0EyNTE1NDRDOTkx
MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovLAogCQkJCTBGRkZDOTRE
MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVG
OTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEZEODJFMUUxNDE3MkMyRjAw
MTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8sCkBAIC0yNTgzLDYgKzI1ODksNyBAQAog
CQkJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJs
ZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0
NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYz
QjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMzE0Nyw2ICszMTU0LDcgQEAKIAkJCQk4NjQyQzUxMjE1MUMwODNEMDA0
NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2
RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8q
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDYgKzk5LDggQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0
aWFsaXplKEdyYXBoJiBncgogICAgIFBST0ZJTEUoRkxBR19GT1JfQkxPQ0tfSU5JVElBTElaQVRJ
T04pOwogICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKTsKICAg
ICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICByb290LT5jZmFIYXNWaXNpdGVk
ID0gZmFsc2U7CisgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlhYmxlc0F0SGVh
ZC5hcmd1bWVudChpKV07CiAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0QXJndW1lbnQp
OwpAQCAtMTQzLDExICsxNDUsMzMgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdy
YXBoJiBncgogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChQ
cmVkaWN0RmxvYXQ2NEFycmF5KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcm9vdC0+dmFs
dWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKKyAgICAgICAgCisgICAgICAgIHJvb3Qt
PnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwogICAgIH0KICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsK
LSAgICAgICAgaWYgKCFncmFwaC5sb2NhbElzQ2FwdHVyZWQoaSkpCisgICAgICAgIGlmIChncmFw
aC5sb2NhbElzQ2FwdHVyZWQoaSkpCisgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9j
YWwoaSkubWFrZVRvcCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmxvY2Fs
KGkpLmNsZWFyKCk7CisgICAgfQorICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMSA7
IGJsb2NrSW5kZXggPCBncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
ICghYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJv
b3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5tYWtlVG9wKCk7CisgICAgICAgIGJsb2NrLT5jZmFT
aG91bGRSZXZpc2l0ID0gZmFsc2U7CisgICAgICAgIGJsb2NrLT5jZmFIYXNWaXNpdGVkID0gZmFs
c2U7CisgICAgICAgIGJsb2NrLT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgKytpKSB7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkp
LmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNs
ZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgYmxvY2st
PnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVl
c0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC01MjYs
OCArNTUwLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKICAg
ICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTEyODMsMTAgKzEzMDUsMTMgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6bWVyZ2VTdGF0ZUF0VAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAg
ICAgY2FzZSBGbHVzaDoKKyAgICBjYXNlIFBoYW50b206CiAgICAgICAgIC8vIFRoZSBibG9jayB0
cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgogICAgICAgICBzb3VyY2UgPSBp
blZhcmlhYmxlOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgZGF0YUxvZygiICAgICAgICAgIFRyYW5zZmVyaW5nIGZyb20gaGVhZCB0byB0YWlsLlxu
Iik7CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgICBUcmFuc2ZlcmluZyAiKTsKKyAgICAgICAg
c291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZygiIGZyb20gaGVh
ZCB0byB0YWlsLlxuIik7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAg
LTEyOTQsNyArMTMxOSw5IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVB
dFQKICAgICAgICAgLy8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRpb25h
bCBzcGVjdWxhdGlvbnMuCiAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZUluZGV4KTsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2co
IiAgICAgICAgICBSZWZpbmluZy5cbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgUmVm
aW5pbmcgdG8gIik7CisgICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAg
ICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
QEAgLTEzMDYsNyArMTMzMyw5IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3Rh
dGVBdFQKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgIGRhdGFMb2coIiAgICAgICAgICBTZXR0aW5nLlxuIik7CisgICAgICAgIGRhdGFMb2coIiAg
ICAgICAgICBTZXR0aW5nIHRvICIpOworICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxl
KCkpOworICAgICAgICBkYXRhTG9nKCJcbiIpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKQEAgLTEzODIsMTIgKzE0MTEsMTkgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
bWVyZ2VUb1N1Y2NlcwogICAgIEFTU0VSVCh0ZXJtaW5hbC5pc1Rlcm1pbmFsKCkpOwogICAgIAog
ICAgIHN3aXRjaCAodGVybWluYWwub3AoKSkgewotICAgIGNhc2UgSnVtcDoKKyAgICBjYXNlIEp1
bXA6IHsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIs
IHRlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2lj
QmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7
CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIEJyYW5jaDoKLSAgICAgICAgcmV0dXJuIG1lcmdl
KGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpXS5n
ZXQoKSkKLSAgICAgICAgICAgIHwgbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVy
bWluYWwubm90VGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAgICBjYXNlIEJyYW5jaDogewor
ICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBN
ZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpKTsKKyAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5h
bC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgICAgICBkYXRhTG9nKCIgICAgICAgIE1l
cmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCkpOwor
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1p
bmFsLm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgIHJldHVybiBjaGFuZ2Vk
OworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBUaHJvdzoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZp
c2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDcgKzMyMywxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RW
YWx1ZSB7CiAgICAgCiAgICAgYm9vbCBpc0NsZWFyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3R5cGUgPT0gUHJlZGljdE5vbmUgJiYgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpOworICAg
ICAgICBib29sIHJlc3VsdCA9IG1fdHlwZSA9PSBQcmVkaWN0Tm9uZSAmJiBtX3N0cnVjdHVyZS5p
c0NsZWFyKCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBBU1NFUlQoIW1fdmFs
dWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICB2b2lkIG1ha2VU
b3AoKQpAQCAtNDIxLDEwICs0MjQsMTQgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIGJv
b2wgbWVyZ2UoY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCiAgICAgewogICAgICAgICBib29s
IHJlc3VsdCA9IGZhbHNlOwotICAgICAgICByZXN1bHQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1fdHlw
ZSwgb3RoZXIubV90eXBlKTsKLSAgICAgICAgcmVzdWx0IHw9IG1fc3RydWN0dXJlLmFkZEFsbChv
dGhlci5tX3N0cnVjdHVyZSk7Ci0gICAgICAgIGlmIChtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWUp
Ci0gICAgICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOworICAgICAgICBpZiAoaXNDbGVhcigp
KQorICAgICAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICByZXN1bHQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1fdHlwZSwgb3RoZXIubV90eXBlKTsKKyAgICAg
ICAgICAgIHJlc3VsdCB8PSBtX3N0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9zdHJ1Y3R1cmUpOwor
ICAgICAgICAgICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlID0gSlNWYWx1ZSgpOworICAgICAgICB9CiAgICAgICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTE0NTU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgICAgICBGaXhlZCwKICAgICAgICAgVmFy
aWFibGUKICAgICB9OwotCisgICAgCiAgICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQpCiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAogICAgICAgICA6IG1fa2luZChraW5kKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEx
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NSwxMCArOTUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJl
cGFyZVRvUGFyc2VCbG9jaygpOwogICAgIC8vIFBhcnNlIGEgc2luZ2xlIGJhc2ljIGJsb2NrIG9m
IGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpOwotICAgIC8vIEZpbmQgcmVhY2hhYmxlIGNvZGUgYW5kIHNldHVwIHByZWRlY2Vzc29yIGxp
bmtzIGluIHRoZSBncmFwaCdzIEJhc2ljQmxvY2tzLgotICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hh
YmlsaXR5KCk7Ci0gICAgLy8gRW5xdWV1ZSBhIGJsb2NrIG9udG8gdGhlIHdvcmtsaXN0LCBpZiBu
ZWNlc3NhcnkuCi0gICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2
PiYgd29ya2xpc3QsIEJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29yKTsKICAgICAvLyBM
aW5rIGJsb2NrIHN1Y2Nlc3NvcnMuCiAgICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZl
Y3RvcjxCbG9ja0luZGV4PiYgcG9zc2libGVUYXJnZXRzKTsKICAgICB2b2lkIGxpbmtCbG9ja3Mo
VmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJsb2NrSW5kZXg+
JiBwb3NzaWJsZVRhcmdldHMpOwpAQCAtMjU4NSw0MSArMjU4MSw2IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmxpbmtCbG9ja3MoVmVjdG9yPFUKICAgICB9CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxv
Y2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KQotewotICAgIEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3Nbc3VjY2Vzc29ySW5kZXhdLmdl
dCgpOwotICAgIGlmICghc3VjY2Vzc29yLT5pc1JlYWNoYWJsZSkgewotICAgICAgICBzdWNjZXNz
b3ItPmlzUmVhY2hhYmxlID0gdHJ1ZTsKLSAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3Nv
ckluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5hcHBl
bmQoYmxvY2tJbmRleCk7Ci19Ci0KLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmRldGVybWluZVJlYWNo
YWJpbGl0eSgpCi17Ci0gICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlzdDsKLSAgICB3
b3JrbGlzdC5hcHBlbmQoMCk7Ci0gICAgbV9ncmFwaC5tX2Jsb2Nrc1swXS0+aXNSZWFjaGFibGUg
PSB0cnVlOwotICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEJsb2Nr
SW5kZXggaW5kZXggPSB3b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgIHdvcmtsaXN0LnJlbW92ZUxh
c3QoKTsKLSAgICAgICAgCi0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tpbmRleF0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQpOwotICAg
ICAgICAKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmxhc3QoKV07Ci0gICAg
ICAgIEFTU0VSVChub2RlLmlzVGVybWluYWwoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9k
ZS5pc0p1bXAoKSkKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgs
IG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICBlbHNlIGlmIChub2RlLmlzQnJhbmNo
KCkpIHsKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUu
dGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0
LCBpbmRleCwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmJ1aWxkT3BlcmFuZE1hcHNJZk5lY2Vzc2FyeSgpCiB7
CiAgICAgaWYgKG1faGF2ZUJ1aWx0T3BlcmFuZE1hcHMpCkBAIC0yODMxLDcgKzI3OTIsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKIAogICAg
IGxpbmtCbG9ja3MoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLCBpbmxpbmVTdGFj
a0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0cyk7Ci0gICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5
KCk7CisgICAgbV9ncmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgZGF0YUxvZygiUHJvY2Vzc2luZyBsb2Nh
bCB2YXJpYWJsZSBwaGlzLlxuIik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9v
bCBydW4oKQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CiAgICAgICAgIG1fY291bnQgPSAwOwpAQCAtNjUsMTIgKzY1LDE2IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgcGVyZm9ybUZvcndhcmRDRkEo
KTsKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBwZXJmb3JtQmxvY2tDRkEo
QmxvY2tJbmRleCBibG9ja0luZGV4KQogICAgIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2Nr
KQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIWJsb2NrLT5jZmFTaG91bGRSZXZp
c2l0KQogICAgICAgICAgICAgcmV0dXJuOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKQEAgLTEyNiw5ICsxMzAsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi12
b2lkIHBlcmZvcm1DRkEoR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtQ0ZBKEdyYXBoJiBncmFw
aCkKIHsKLSAgICBydW5QaGFzZTxDRkFQaGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFz
ZTxDRkFQaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyB0aGUgY29kZSBibG9jay4gSXQn
cyBhbHNvIHJlc3BvbnNpYmxlIGZvciBpZGVudGlmeWluZyBkZWFkIGNvZGUsIGFuZCBpbiB0aGUK
IC8vIGZ1dHVyZSBzaG91bGQgYmUgdXNlZCBhcyBhIGhvb2sgZm9yIGNvbnN0YW50IHByb3BhZ2F0
aW9uLgogCi12b2lkIHBlcmZvcm1DRkEoR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybUNGQShHcmFwaCYp
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIKKyNpbmNsdWRlICJERkdCYXNpY0Js
b2NrLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQu
aCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIENGR1NpbXBsaWZpY2F0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVi
bGljOgorICAgIENGR1NpbXBsaWZpY2F0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6
IFBoYXNlKGdyYXBoLCAiQ0ZHIHNpbXBsaWZpY2F0aW9uIikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrIGJsb2NrSW5kZXgpIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkgeworICAgICAgICAgICAgICAgIC8vIEtp
bGwgdGhlIHVucmVhY2hhYmxlIGJsb2NrLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vIDEpIFJlbW92ZSBpdHMgcmVmZXJlbmNlcyB0byBvdGhlciBibG9ja3MuCisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkKKyAgICAgICAgICAg
ICAgICAgICAga2lsbFJlZmVyZW5jZShibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFy
Z3VtZW50KSk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkKKyAgICAg
ICAgICAgICAgICAgICAga2lsbFJlZmVyZW5jZShibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2Fs
KGxvY2FsKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gMikgS2lsbCB0
aGUgYmxvY2sKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNs
ZWFyKCk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRj
aCAobV9ncmFwaFtibG9jay0+bGFzdCgpXS5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEp1bXA6
IHsKKyAgICAgICAgICAgICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4g
bWVyZ2UuCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNj
ZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxv
Y2ssIDApXS0+bV9wcmVkZWNlc3NvcnNbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgID09
IGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4
LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCksIE5vQmxvY2spOworICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEJsb2NrIG9ubHkgaGFzIGEganVtcCAtPiByZW1v
dmUuIFRoaXMgaXMgdHJpY2t5IHRob3VnaCBiZWNhdXNlIG9mCisgICAgICAgICAgICAgICAgLy8g
bGl2ZW5lc3MuIFdoYXQgd2UgcmVhbGx5IHdhbnQgaXMgdG8gc2xhbSBpbiBhIHBoYW50b20gYXQg
dGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgICAgICAvLyBibG9jaywgYWZ0ZXIgdGhlIHRlcm1p
bmFsLiBCdXQgd2UgY2FuJ3QgcmlnaHQgbm93LiA6LSgKKyAgICAgICAgICAgICAgICAvLyBJZGVh
OiB3aGF0IGlmIEkgc2xhbSB0aGUgZ2hvc3RpZXMgaW50byBteSBzdWNjZXNzb3I/IE5vcGUsIHRo
YXQncworICAgICAgICAgICAgICAgIC8vIHN1Ym9wdGltYWwsIGJlY2F1c2UgaWYgbXkgc3VjY2Vz
c29yIGhhcyBtdWx0aXBsZSBwcmVkZWNlc3NvcnMgdGhlbiB3ZSdsbAorICAgICAgICAgICAgICAg
IC8vIGJlIGtlZXBpbmcgYWxpdmUgdGhpbmdzIG9uIG90aGVyIHByZWRlY2Vzc29yIGVkZ2VzIHVu
bmVjZXNzYXJpbHkuCisgICAgICAgICAgICAgICAgLy8gV2hhdCB3ZSByZWFsbHkgbmVlZCBpcyB0
aGUgbm90aW9uIG9mIGVuZC1vZi1ibG9jayBnaG9zdGllcyEKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQnJh
bmNoOiB7CisgICAgICAgICAgICAgICAgLy8gQnJhbmNoIG9uIGNvbnN0YW50IC0+IGpldHRpc29u
IHRoZSBub3QtdGFrZW4gYmxvY2sgYW5kIG1lcmdlLgorICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoW21fZ3JhcGhbYmxvY2stPmxhc3QoKV0uY2hpbGQxKCldLmhhc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjb25kaXRpb24gPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0
YW50KG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0uY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzWworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pXS0+bV9w
cmVkZWNlc3NvcnMuc2l6ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICA9PSAxKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcygKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBibG9ja0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vj
Y2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9u
KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBCbG9ja0luZGV4IHRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGJsb2NrLCBjb25kaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRl
eCBub3RUYWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9j
aywgIWNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IG1f
Z3JhcGhbYmxvY2stPmxhc3QoKV0uY29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0uc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+bGFzdCgpXS5yZWZD
b3VudCgpID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91
bmRhcnlDb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IGp1bXBOb2RlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUoSnVtcCwgT3BJbmZvKHRh
a2VuQmxvY2tJbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmQo
anVtcE5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBCcmFuY2ggdG8g
c2FtZSBkZXN0aW5hdGlvbiAtPiBqdW1wLgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlz
IHdpbGwgY3VycmVudGx5IG5vdCBiZSBoaXQgYmVjYXVzZSBvZiB0aGUgbGFjayBvZiBqdW1wLW9u
bHkKKyAgICAgICAgICAgICAgICAvLyBibG9jayBzaW1wbGlmaWNhdGlvbi4KKyAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApID09IG1fZ3JhcGguc3VjY2Vzc29y
KGJsb2NrLCAxKSkgeworICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4
LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCksIE5vQmxvY2spOworICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGNoYW5nZWQp
IHsKKyAgICAgICAgICAgIC8vIElmIHdlIGNoYW5nZWQgdGhlIGdyYXBoLCB0aGVuIHNvbWUgYmxv
Y2tzIG1heSBoYXZlIGJlY29tZSB1bnJlYWNoYWJsZS4gTmVlZCB0bworICAgICAgICAgICAgLy8g
cGVyZm9ybSBhIGJsb2NrIEdDIG9mIHNvcnRzLgorICAgICAgICAgICAgbV9ncmFwaC5yZXNldFJl
YWNoYWJpbGl0eSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gY2hhbmdl
ZDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBraWxsUmVmZXJlbmNlKE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgeworICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhd
OworICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBjYXNlIFNldExvY2FsOgor
ICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbywgc2luY2UgdGhlIGJsb2NrIGRvZXMgbm90IGtl
ZXAgYW55dGhpbmcgYWxpdmUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgY2FzZSBGbHVz
aDoKKyAgICAgICAgICAgIC8vIERlcmVmIHRoZSBjaGlsZHJlbi4KKyAgICAgICAgICAgIGlmICgh
bm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1fZ3Jh
cGguZGVyZWYobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUu
Y2hpbGQyKCkpOworICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLmNoaWxkMygpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gU2hvdWxkIG5ldmVyIGJlIGtp
bGxpbmcgdGhlIHJvb3QgYmxvY2suCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBOb2RlSW5kZXggZmluZE9wZXJhbmRTb3VyY2UoY29uc3QgT3BlcmFuZHM8
Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+JiB2YXJpYWJsZXMsIGludCBvcGVyYW5kKQorICAg
IHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IHZhcmlhYmxlcy5vcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CisgICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0ub3AoKSA9PSBTZXRMb2Nh
bCkKKyAgICAgICAgICAgIHJldHVybiBtX2dyYXBoW25vZGVJbmRleF0uY2hpbGQxKCkuaW5kZXgo
KTsKKyAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4
IGNyZWF0ZU9wZXJhbmRLZWVwQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5pc0NhcHR1
cmVkKG9wZXJhbmQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gZmluZE9wZXJhbmRTb3VyY2UoYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgb3BlcmFu
ZCk7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkg
IT0gU2V0TG9jYWwpOworICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5kZXhdLmhhc1Jlc3Vs
dCgpKTsKKyAgICAgICAgTm9kZUluZGV4IHBoYW50b21Ob2RlSW5kZXggPSBtX2dyYXBoLnNpemUo
KTsKKyAgICAgICAgTm9kZSBwaGFudG9tKFBoYW50b20sIGNvZGVPcmlnaW4sIG5vZGVJbmRleCk7
CisgICAgICAgIG1fZ3JhcGguYXBwZW5kKHBoYW50b20pOworICAgICAgICBtX2dyYXBoLnJlZihw
aGFudG9tTm9kZUluZGV4KTsKKyAgICAgICAgcmV0dXJuIHBoYW50b21Ob2RlSW5kZXg7CisgICAg
fQorICAgIAorICAgIHZvaWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Jsb2NrKiBibG9jaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIGJsb2NrLT5h
cHBlbmQoY3JlYXRlT3BlcmFuZEtlZXBBbGl2ZShibG9jaywgY29kZU9yaWdpbiwgb3BlcmFuZCkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeFBvc3NpYmxlR2V0TG9jYWwoQmFzaWNCbG9jayog
YmxvY2ssIEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhb
ZWRnZV07CisgICAgICAgIGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAobV9ncmFwaC5pc0NhcHR1cmVkKGNoaWxkLmxvY2FsKCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOb2RlSW5kZXggb3JpZ2luYWxOb2RlSW5kZXgg
PSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQoY2hpbGQubG9jYWwoKSk7CisgICAgICAg
IEFTU0VSVChvcmlnaW5hbE5vZGVJbmRleCAhPSBOb05vZGUpOworICAgICAgICBOb2RlKiBvcmln
aW5hbE5vZGUgPSAmbV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRleF07CisgICAgICAgIEFTU0VSVChv
cmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAvLyBQb3NzaWJpbGl0aWVz
OgorICAgICAgICAvLyBTZXRMb2NhbCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgZ2V0dGluZyB0aGUg
dmFsdWUgb2Ygc29tZXRoaW5nIHRoYXQgaXMgaW1tZWRpYXRlbHkKKyAgICAgICAgLy8gICAgIGF2
YWlsYWJsZSBpbiB0aGUgZmlyc3QgYmxvY2sgd2l0aCBhIGtub3duIE5vZGVJbmRleC4KKyAgICAg
ICAgLy8gR2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZhbHVlIG9m
IHNvbWV0aGluZyB0aGF0IHRoZSBmaXJzdAorICAgICAgICAvLyAgICAgYmxvY2sgYWxzbyBnZXRz
LgorICAgICAgICAvLyBQaGkgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1h
bGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlIGZpcnN0IGJsb2NrCisgICAgICAgIC8vICAgICB3
YXMgYWxzbyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24uCisgICAgICAgIC8vIFNldEFyZ3VtZW50
IC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFu
ZCB0aGF0IHRoZQorICAgICAgICAvLyAgICAgZmlyc3QgYmxvY2sgd2FzIGtlZXBpbmcgYWxpdmUg
YnkgdmlydHVlIG9mIHRoZSBmaXJzdEJsb2NrIGJlaW5nIHRoZSByb290IGFuZAorICAgICAgICAv
LyAgICAgdGhlIG9wZXJhbmQgYmVpbmcgYW4gYXJndW1lbnQuCisgICAgICAgIC8vIEZsdXNoIC0+
IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0
aGF0IHRoZSBmaXJzdAorICAgICAgICAvLyAgICAgYmxvY2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxp
dmUsIHNvIHRoZSBzZWNvbmQgYmxvY2sgc2hvdWxkIHJlZmVyIGNoaWxkIG9mCisgICAgICAgIC8v
ICAgICB0aGUgZmx1c2guCisgICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gp
IHsKKyAgICAgICAgICAgIG9yaWdpbmFsTm9kZUluZGV4ID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEo
KS5pbmRleCgpOworICAgICAgICAgICAgb3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxO
b2RlSW5kZXhdOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3JpZ2luYWxOb2RlLT5vcCgp
KSB7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIEVkZ2UgbmV3RWRnZSA9
IG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICBFZGdlIG9sZEVkZ2UgPSBlZGdl
OworICAgICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CisgICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKG9sZEVkZ2UpOworICAgICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICBjYXNl
IFBoaToKKyAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogeworICAgICAgICAgICAgRWRnZSBuZXdF
ZGdlID0gZWRnZTsKKyAgICAgICAgICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7CisgICAgICAgICAg
ICBuZXdFZGdlLnNldEluZGV4KG9yaWdpbmFsTm9kZUluZGV4KTsKKyAgICAgICAgICAgIG1fZ3Jh
cGgucmVmKG5ld0VkZ2UpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsKKyAg
ICAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBqZXR0aXNv
bkJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBqZXR0aXNvbmVkQmxvY2tJ
bmRleCwgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4pCisgICAgeworICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlz
b25lZEJsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50
cygpOyArK2kpCisgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBib3VuZGFyeUNv
ZGVPcmlnaW4sIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fscygp
OyArK2kpCisgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBib3VuZGFyeUNvZGVP
cmlnaW4sIGkpOworICAgICAgICAKKyAgICAgICAgZml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhi
bG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Zml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5k
ZXggamV0dGlzb25lZEJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgamV0dGlzb25lZEJs
b2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGpldHRp
c29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnNbaV0gIT0gYmxvY2tJbmRleCkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3Nv
cnNbaV0gPSBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAg
ICAgIGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBq
ZXR0aXNvbmVkQmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGVJbmRl
eCBwaGlOb2RlSW5kZXggPSBqZXR0aXNvbmVkQmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBO
b2RlJiBwaGlOb2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IDM7ICsraikKKyAgICAgICAgICAgICAgICByZW1vdmVQb3RlbnRp
YWxseURlYWRQaGlSZWZlcmVuY2UoYmxvY2ssIHBoaU5vZGUpOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHZvaWQgbWVyZ2VCbG9ja3MoCisgICAgICAgIEJsb2NrSW5kZXggZmlyc3RCbG9j
a0luZGV4LCBCbG9ja0luZGV4IHNlY29uZEJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0dGlzb25l
ZEJsb2NrSW5kZXgpCisgICAgeworICAgICAgICAvLyBUaGlzIHdpbGwgYWRkIGFsbCBvZiB0aGUg
bm9kZXMgaW4gc2Vjb25kQmxvY2sgdG8gZmlyc3RCbG9jaywgYnV0IGluIHNvIGRvaW5nCisgICAg
ICAgIC8vIGl0IHdpbGwgYWxzbyBlbnN1cmUgdGhhdCBhbnkgR2V0TG9jYWxzIGZyb20gdGhlIHNl
Y29uZCBibG9jayB0aGF0IHJlZmVyIHRvCisgICAgICAgIC8vIFNldExvY2FscyBpbiB0aGUgZmly
c3QgYmxvY2sgYXJlIHJlbGlua2VkLiBJZiBqZXR0aXNvbmVkQmxvY2sgaXMgbm90IE5vQmxvY2ss
CisgICAgICAgIC8vIHRoZW4gUGhhbnRvbXMgYXJlIGluc2VydGVkIGZvciBhbnl0aGluZyB0aGF0
IHRoZSBqZXR0aXNvbmVkQmxvY2sgd291bGQgaGF2ZQorICAgICAgICAvLyBrZXB0IGFsaXZlLgor
ICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbZmlyc3RCbG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgQmFzaWNCbG9jayogc2Vjb25kQmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW3NlY29uZEJsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAK
KyAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJsb2NrIHNpbmNlIHdlIGRv
bid0IG5lZWQgaXQgYW55bW9yZS4gV2VsbCwgd2UgZG9uJ3QKKyAgICAgICAgLy8gcmVhbGx5IHJl
bW92ZSBpdDsgd2UgYWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRvbS4KKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5pc1Rlcm1pbmFsKCkpOworICAgICAgICBD
b2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgp
XS5jb2RlT3JpZ2luOworICAgICAgICBtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uc2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0Qmxv
Y2stPmxhc3QoKV0ucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgCisgICAgICAgIGlmIChqZXR0
aXNvbmVkQmxvY2tJbmRleCAhPSBOb0Jsb2NrKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBq
ZXR0aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGV4XS5n
ZXQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGltZSB0byBpbnNlcnQgZ2hvc3Rp
ZXMgZm9yIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUga2VwdCBhbGl2ZSBpbiBjYXNlIHdlIE9TUgor
ICAgICAgICAgICAgLy8gZXhpdCBwcmlvciB0byBoaXR0aW5nIHRoZSBmaXJzdEJsb2NrJ3MgdGVy
bWluYWwsIGFuZCBlbmQgdXAgZ29pbmcgZG93biBhCisgICAgICAgICAgICAvLyBkaWZmZXJlbnQg
cGF0aCB0aGFuIHNlY29uZEJsb2NrLgorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0
QmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAgICAgICAgICAga2VlcE9wZXJhbmRB
bGl2ZShmaXJzdEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5waGlzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggcGhpTm9kZUluZGV4ID0gc2Vjb25k
QmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9ncmFwaFtwaGlO
b2RlSW5kZXhdOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGUgcGhpIG5vZGUgc2hv
dWxkIG9ubHkgaGF2ZSBvbmUgY2hpbGQgc2luY2UgdGhlIHNlY29uZCBibG9jayBoYXMgb25seSBv
bmUKKyAgICAgICAgICAgIC8vIHByZWRlY2Vzc29yLgorICAgICAgICAgICAgQVNTRVJUKHBoaU5v
ZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgQVNTRVJUKCFwaGlOb2RlLmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghcGhpTm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBub3BlLiBXaGVuIHdlIGpldHRpc29uIGEgYmxvY2ssIHdlIGRvbid0
IGZpeHVwIGl0cyBwaGlzLiBXZSBzaG91bGQKKyAgICAgICAgICAgIC8vIGRvIHRoYXQuCisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiB3aGF0IHNob3VsZCB3ZSBkbyBoZXJlPyBX
ZSBzaG91bGQganVzdCBhZGQgdGhlIHBoaXMgdW5jb25kaXRpb25hbGx5LgorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IHNlY29uZEJsb2Nr
LT5hdChpKTsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Cisg
ICAgICAgICAgICBpZiAobm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUub3AoKSA9PSBQaGFudG9tICYmIG5vZGUuY2hpbGQxKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSYgcG9zc2libGVMb2NhbE9wID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlTG9jYWxPcC5oYXNMb2NhbCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggc2V0TG9jYWxJbmRleCA9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
cG9zc2libGVMb2NhbE9wLmxvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYg
c2V0TG9jYWwgPSBtX2dyYXBoW3NldExvY2FsSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNldExvY2FsLm9wKCkgPT0gU2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFZGdlIG5ld0VkZ2UgPSBzZXRMb2NhbC5jaGlsZDEoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFZGdlIG9sZEVkZ2UgPSBub2RlLmNoaWxkMSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5ld0VkZ2UpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS5jaGlsZHJlbi5zZXRDaGlsZDEobmV3RWRnZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGEgR2V0TG9j
YWwsIHRoZW4gd2UgbWlnaHQgbGlrZSB0byBmaXggaXQuCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigp
OworICAgICAgICAgICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpCisgICAgICAgICAgICAgICAg
ICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG1fZ3JhcGgubV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGls
ZDEoKSkgeworICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0Qmxv
Y2ssIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2Nh
bChmaXJzdEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLmNoaWxkMygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
eFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGlsZDMoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmaXJzdEJsb2NrLT5hcHBlbmQobm9kZUluZGV4KTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsID0gc2Vjb25kQmxvY2st
PnZhcmlhYmxlc0F0VGFpbDsKKyAgICAgICAgZmlyc3RCbG9jay0+dmFsdWVzQXRUYWlsID0gc2Vj
b25kQmxvY2stPnZhbHVlc0F0VGFpbDsKKyAgICAgICAgCisgICAgICAgIC8vIEZpeCB0aGUgcHJl
ZGVjZXNzb3JzIG9mIG15IG5ldyBzdWNjZXNzb3JzLiBUaGlzIGlzIHRyaWNreSwgc2luY2Ugd2Ug
YXJlIGdvaW5nIHRvIHJlc2V0CisgICAgICAgIC8vIGFsbCBwcmVkZWNlc3NvcnMgYW55d2F5IGR1
ZSB0byByZWFjaGFiaWxpdHkgYW5hbHlzaXMuIEJ1dCB3ZSBuZWVkIHRvIGZpeCB0aGUKKyAgICAg
ICAgLy8gcHJlZGVjZXNzb3JzIGVhZ2VybHkgdG8gZW5zdXJlIHRoYXQgd2Uga25vdyB3aGF0IHRo
ZXkgYXJlIGluIGNhc2UgdGhlIG5leHQgYmxvY2sgd2UKKyAgICAgICAgLy8gY29uc2lkZXIgaW4g
dGhpcyBwaGFzZSB3aXNoZXMgdG8gcXVlcnkgdGhlIHByZWRlY2Vzc29ycyBvZiBvbmUgb2YgdGhl
IGJsb2NrcyB3ZQorICAgICAgICAvLyBhZmZlY3RlZC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9ncmFwaC5udW1TdWNjZXNzb3JzKGZpcnN0QmxvY2spOyBpLS07KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vz
c29yKGZpcnN0QmxvY2ssIGkpXS5nZXQoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytqKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnNbal0gPT0gc2Vjb25kQmxvY2tJ
bmRleCkKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29yc1tqXSA9
IGZpcnN0QmxvY2tJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gRml4IHRoZSBwcmVkZWNlc3NvcnMgb2YgbXkgZm9ybWVyIHN1Y2Nlc3NvcnMuIEFn
YWluLCB3ZSdkIHJhdGhlciBub3QgZG8gdGhpcywgYnV0IGl0J3MKKyAgICAgICAgLy8gYW4gdW5m
b3J0dW5hdGUgbmVjZXNzaXR5LiBTZWUgYWJvdmUgY29tbWVudC4KKyAgICAgICAgaWYgKGpldHRp
c29uZWRCbG9ja0luZGV4ICE9IE5vQmxvY2spCisgICAgICAgICAgICBmaXhKZXR0aXNvbmVkUHJl
ZGVjZXNzb3JzKGZpcnN0QmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOworICAgICAg
ICAKKyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tzZWNvbmRCbG9ja0luZGV4XS5jbGVhcigpOwor
ICAgIH0KK307CisKK2Jvb2wgcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKEdyYXBoJiBncmFwaCkK
K3sKKyAgICByZXR1cm4gcnVuUGhhc2U8Q0ZHU2ltcGxpZmljYXRpb25QaGFzZT4oZ3JhcGgpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZV9oCisjZGVmaW5lIERGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBH
cmFwaDsKKworLy8gQ0ZHIHNpbXBsaWZpY2F0aW9uOgorLy8KKy8vIGp1bXAgdG8gc2luZ2xlIHBy
ZWRlY2Vzc29yIC0+IG1lcmdlIGJsb2NrcworLy8gYnJhbmNoIG9uIGNvbnN0YW50IC0+IGp1bXAK
Ky8vIGJyYW5jaCB0byBzYW1lIGJsb2NrcyAtPiBqdW1wCisvLyBqdW1wLW9ubHkgYmxvY2sgLT4g
cmVtb3ZlCisvLyBraWxsIGRlYWQgY29kZQorCitib29sIHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlv
bihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2VfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24g
MTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX3Jl
cGxhY2VtZW50c1tpXSA9IE5vTm9kZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAg
IGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2sgPSAwOyBibG9j
ayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrKQotICAgICAgICAgICAgcGVyZm9y
bUJsb2NrQ1NFKCptX2dyYXBoLm1fYmxvY2tzW2Jsb2NrXSk7CisgICAgICAgICAgICBwZXJmb3Jt
QmxvY2tDU0UobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja10uZ2V0KCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsgLy8gTWF5YmUgd2UnbGwgbmVlZCB0byBtYWtlIHRoaXMgcmVhc29uIGFib3V0IHdoZXRo
ZXIgaXQgY2hhbmdlZCB0aGUgZ3JhcGggaW4gYW4gYWN0aW9uYWJsZSB3YXk/CiAgICAgfQogICAg
IAogcHJpdmF0ZToKQEAgLTEzOSw1MiArMTQwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2Rl
JiBub2RlKQotICAgIHsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBt
X2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuIGlzTnVt
YmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpOwotICAgIH0K
LSAgICAKLSAgICBib29sIGxvZ2ljYWxOb3RJc1B1cmUoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAg
ICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJl
ZGljdGlvbigpOwotICAgICAgICByZXR1cm4gaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9u
KSB8fCAhcHJlZGljdGlvbjsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBieVZhbElzUHVyZShOb2Rl
JiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAmJiAoKG5vZGUub3AoKSA9PSBQdXRC
eVZhbCB8fCBub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykKLSAgICAgICAgICAgICAgICA/IGlz
QWN0aW9uYWJsZU11dGFibGVBcnJheVByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5w
cmVkaWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgOiBpc0FjdGlvbmFibGVBcnJheVByZWRpY3Rp
b24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpKTsKLSAgICB9Ci0gICAgCi0g
ICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBpZiAobm9kZS5mbGFn
cygpICYgTm9kZUNsb2JiZXJzV29ybGQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKCEobm9kZS5mbGFncygpICYgTm9kZU1pZ2h0Q2xvYmJlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgIGNhc2Ug
VmFsdWVBZGQ6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6Ci0gICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3NFcToKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgY2FzZSBDb21w
YXJlR3JlYXRlckVxOgotICAgICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAgICAgICAgIHJldHVy
biAhaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSk7Ci0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoK
LSAgICAgICAgICAgIHJldHVybiAhbG9naWNhbE5vdElzUHVyZShub2RlKTsKLSAgICAgICAgY2Fz
ZSBHZXRCeVZhbDoKLSAgICAgICAgICAgIHJldHVybiAhYnlWYWxJc1B1cmUobm9kZSk7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOyAvLyBJZiBieSBzb21lIG9kZGl0eSB3ZSBoaXQgdGhpcyBjYXNlIGlu
IHJlbGVhc2UgYnVpbGQgaXQncyBzYWZlciB0byBoYXZlIENTRSBhc3N1bWUgdGhlIHdvcnN0Lgot
ICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIE5vZGVJbmRleCBpbXB1cmVDU0UoTm9kZSYgbm9k
ZSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCBjaGlsZDEgPSBjYW5vbmljYWxpemUobm9kZS5j
aGlsZDEoKSk7CkBAIC0yMTUsNyArMTcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChj
bG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29y
bGQoaW5kZXgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBOb05vZGU7CkBAIC0yMzgsNyArMTkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9i
YmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMjU0LDE0ICsyMDksMTQgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgICAg
IGlmICghYnlWYWxJc1B1cmUobm9kZSkpCisgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5
VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAg
ICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBjYW5vbmljYWxpemUo
bm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNoaWxkMikpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAg
ICAgICAgaWYgKCFieVZhbElzUHVyZShub2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoIW1fZ3Jh
cGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGNhbm9uaWNh
bGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCkuaW5kZXgoKTsKQEAgLTI4MCw3ICsyMzUsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5ub3QgYWZmZWN0IHByZXZp
b3VzbHkgZXhpc3RpbmcgZWxlbWVudHMgaW4gdGhlIGFycmF5LgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNX
b3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChp
bmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zMzEsNyArMjg2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNj
ZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBp
bmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KQEAgLTM0MCw3ICsyOTUsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgp
KQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CkBAIC0zNzcsNyArMzMyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFs
QWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFy
cmF5IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBp
dCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGNoYW5nZS4KQEAgLTM4Niw3ICszNDEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KQEAgLTQxNiw3ICszNzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAg
ICAgICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBh
bgogICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3Nz
aWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKICAgICAgICAgICAgICAgICAgICAgLy8g
Y2hhbmdlLgpAQCAtNDI1LDcgKzM4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNDYx
LDEyICs0MTYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICAgICAgaWYg
KGlzRml4ZWRJbmRleGVkU3RvcmFnZU9iamVjdFByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCkpICYmIGJ5VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAgICAg
IGlmIChpc0ZpeGVkSW5kZXhlZFN0b3JhZ2VPYmplY3RQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpKSAmJiBtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwog
CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxk
KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTYxMCw2ICs1NjUsNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIElzU3RyaW5nOgogICAgICAgICBjYXNlIElzT2JqZWN0OgogICAgICAgICBjYXNlIElz
RnVuY3Rpb246CisgICAgICAgIGNhc2UgTG9naWNhbE5vdDoKICAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KHB1cmVDU0Uobm9kZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
QEAgLTYzNSwxOCArNTkxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRl
cjoKICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgogICAgICAgICBjYXNlIENvbXBhcmVF
cTogewotICAgICAgICAgICAgaWYgKGlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50SW5kZXggPSBwdXJlQ1NFKG5vZGUpOwot
ICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudEluZGV4ICE9IE5vTm9kZSAmJiBpc1ByZWRp
Y3RlZE51bWVyaWNhbChtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKLSAgICAgICAgICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJbmRleCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
TG9naWNhbE5vdDogewotICAgICAgICAgICAgaWYgKGxvZ2ljYWxOb3RJc1B1cmUobm9kZSkpIHsK
KyAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpKSB7CiAg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50SW5kZXggPSBwdXJlQ1NFKG5vZGUp
OwotICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudEluZGV4ICE9IE5vTm9kZSAmJiBsb2dp
Y2FsTm90SXNQdXJlKG1fZ3JhcGhbcmVwbGFjZW1lbnRJbmRleF0pKQorICAgICAgICAgICAgICAg
IGlmIChyZXBsYWNlbWVudEluZGV4ICE9IE5vTm9kZSAmJiBtX2dyYXBoLmlzUHJlZGljdGVkTnVt
ZXJpY2FsKG1fZ3JhcGhbcmVwbGFjZW1lbnRJbmRleF0pKQogICAgICAgICAgICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChyZXBsYWNlbWVudEluZGV4KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNjU5LDEyICs2MDYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICBp
ZiAoYnlWYWxJc1B1cmUobm9kZSkpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVy
ZShub2RlKSkKICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeVZhbExvYWRFbGlt
aW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRCeVZhbDoK
LSAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSAmJiBnZXRCeVZhbExvYWRFbGltaW5h
dGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkgIT0gTm9O
b2RlKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkgJiYgZ2V0QnlW
YWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmlu
ZGV4KCkpICE9IE5vTm9kZSkKICAgICAgICAgICAgICAgICBub2RlLnNldE9wKFB1dEJ5VmFsQWxp
YXMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTcwNCwxNCArNjUxLDE5
IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgdm9pZCBwZXJmb3JtQmxvY2tD
U0UoQmFzaWNCbG9jayYgYmxvY2spCisgICAgdm9pZCBwZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9j
ayogYmxvY2spCiAgICAgewotICAgICAgICBtX2N1cnJlbnRCbG9jayA9ICZibG9jazsKKyAgICAg
ICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFibG9jay0+
aXNSZWFjaGFibGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IGJsb2NrOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGFz
dE5vZGVUeXBlOyArK2kpCiAgICAgICAgICAgICBtX2xhc3RTZWVuW2ldID0gVUlOVF9NQVg7CiAK
LSAgICAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2su
c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9
IGJsb2NrW21faW5kZXhJbkJsb2NrXTsKKyAgICAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7
IG1faW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgeworICAg
ICAgICAgICAgbV9jb21waWxlSW5kZXggPSBibG9jay0+YXQobV9pbmRleEluQmxvY2spOwogICAg
ICAgICAgICAgcGVyZm9ybU5vZGVDU0UobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNzIzLDkgKzY3NSw5IEBAIHByaXZhdGU6CiAgICAgRml4ZWRBcnJheTx1
bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBtX2xhc3RTZWVuOwogfTsKIAotdm9pZCBwZXJmb3JtQ1NF
KEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVu
UGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdy
YXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw3IEBAIGNsYXNzIEdyYXBoOwogLy8gYSB3aWRlIHJhbmdlIG9mIHN1YmV4cHJlc3Npb24gc2lt
aWxhcml0aWVzLiBJdCdzIGtub3duIHRvIHByb2R1Y2UgYmlnIHdpbnMKIC8vIG9uIGEgZmV3IGJl
bmNobWFya3MsIGFuZCBpcyByZWxhdGl2ZWx5IGNoZWFwIHRvIHJ1bi4KIAotdm9pZCBwZXJmb3Jt
Q1NFKEdyYXBoJik7Citib29sIHBlcmZvcm1DU0UoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDkgQEAKICNkZWZpbmUgREZHX0VOQUJMRShERkdf
RkVBVFVSRSkgKGRlZmluZWQgREZHX0VOQUJMRV8jI0RGR19GRUFUVVJFICYmIERGR19FTkFCTEVf
IyNERkdfRkVBVFVSRSkKIAogLy8gRW1pdCB2YXJpb3VzIGxvZ2dpbmcgaW5mb3JtYXRpb24gZm9y
IGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcgdGhlIGRhdGFmbG93IGdyYXBocy4KLSNkZWZp
bmUgREZHX0VOQUJMRV9ERUJVR19WRVJCT1NFIDAKKyNkZWZpbmUgREZHX0VOQUJMRV9ERUJVR19W
RVJCT1NFIDEKIC8vIEVtaXQgZHVtcHMgZHVyaW5nIHByb3BhZ2F0aW9uLCBpbiBhZGRpdGlvbiB0
byBqdXN0IGFmdGVyLgotI2RlZmluZSBERkdfRU5BQkxFX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UgMAorI2RlZmluZSBERkdfRU5BQkxFX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UgMQogLy8g
RW1pdCBsb2dnaW5nIGZvciBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIGF0IGV2ZXJ5IG5vZGUs
IG5vdCBqdXN0IG5vZGVzIHRoYXQKIC8vIGFjdHVhbGx5IGhhcyBzcGVjdWxhdGlvbiBjaGVja3Mu
CiAjZGVmaW5lIERGR19FTkFCTEVfVkVSQk9TRV9WQUxVRV9SRUNPVkVSSUVTIDAKQEAgLTYyLDcg
KzYyLDcgQEAKIC8vIEVtaXQgYSBicmVha3BvaW50IGludG8gdGhlIHNwZWN1bGF0aW9uIGZhaWx1
cmUgY29kZS4KICNkZWZpbmUgREZHX0VOQUJMRV9KSVRfQlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJ
TFVSRSAwCiAvLyBMb2cgZXZlcnkgc3BlY3VsYXRpb24gZmFpbHVyZS4KLSNkZWZpbmUgREZHX0VO
QUJMRV9WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUgMAorI2RlZmluZSBERkdfRU5BQkxFX1ZF
UkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSAxCiAvLyBEaXNhYmxlIHRoZSBERkcgSklUIHdpdGhv
dXQgaGF2aW5nIHRvIHRvdWNoIFBsYXRmb3JtLmgKICNkZWZpbmUgREZHX0RFQlVHX0xPQ0FMX0RJ
U0JBTEUgMAogLy8gRW5hYmxlIE9TUiBlbnRyeSBmcm9tIGJhc2VsaW5lIEpJVC4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTMgKzQzLDE3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29s
IHJ1bigpCiAgICAgeworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCiAg
ICAgICAgIEFic3RyYWN0U3RhdGUgc3RhdGUobV9ncmFwaCk7CiAgICAgICAgIEluc2VydGlvblNl
dDxOb2RlSW5kZXg+IGluc2VydGlvblNldDsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIWJsb2NrLT5jZmFGb3Vu
ZENvbnN0YW50cykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN0YXRl
LmJlZ2luQmFzaWNCbG9jayhibG9jayk7CkBAIC02MCwyOSArNjQsNDEgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwogICAg
ICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpCi0gICAgICAgICAgICAgICAg
ICAgIHx8IChub2RlLmZsYWdzKCkgJiAoTm9kZUNsb2JiZXJzV29ybGQgfCBOb2RlTWlnaHRDbG9i
YmVyKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUp
CiAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUuaGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRl
LmZvck5vZGUobm9kZUluZGV4KS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmICghdmFsdWUp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIE5vZGUgcGhhbnRvbShQaGFudG9tLCBub2RlLmNvZGVPcmlnaW4pOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TG9jYWwpIHsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ub3AoKSAh
PSBHZXRMb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHBoYW50b20uY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuOwogICAg
ICAgICAgICAgICAgIHBoYW50b20ucmVmKCk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlSW5kZXgsIHZhbHVlKTsKICAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggcGhhbnRvbU5vZGVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwog
ICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHBoYW50b20pOwogICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2NrLCBwaGFudG9tTm9kZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHN0YXRlLnJlc2V0KCk7CiAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuZXhlY3V0ZSgqYmxvY2spOworICAgICAgICAgICAgc3RhdGUucmVzZXQoKTsKICAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogfTsKIAotdm9pZCBw
ZXJmb3JtQ29uc3RhbnRGb2xkaW5nKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUNvbnN0YW50
Rm9sZGluZyhHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Q29uc3RhbnRGb2xkaW5nUGhh
c2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q29uc3RhbnRGb2xkaW5nUGhhc2U+KGdy
YXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaAkocmV2aXNp
b24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIEdyYXBoOwog
Ly8gaW5mZXJyZWQgY29uc3RhbnRzLCBhbmQgcmVwbGFjZXMgdGhvc2Ugbm9kZXMgd2l0aCBjb25z
dGFudHMgd2hpbHN0IGluamVjdGluZwogLy8gUGhhbnRvbSBub2RlcyB0byBrZWVwIHRoZSBjaGls
ZHJlbiBhbGl2ZSAod2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBPU1IgZXhpdCkuCiAKLXZvaWQgcGVy
Zm9ybUNvbnN0YW50Rm9sZGluZyhHcmFwaCYpOworYm9vbCBwZXJmb3JtQ29uc3RhbnRGb2xkaW5n
KEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICsz
MCw3IEBACiAKICNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgogI2luY2x1ZGUgIkRGR0NG
QVBoYXNlLmgiCisjaW5jbHVkZSAiREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIgogI2luY2x1
ZGUgIkRGR0NTRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdGaXh1cFBoYXNlLmgiCkBAIC02MCwxMiArNjEsMTcgQEAgaW5saW5lIGJv
b2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIGlmIChjb21waWxlTW9kZSA9PSBD
b21waWxlRnVuY3Rpb24pCiAgICAgICAgIGRmZy5wcmVkaWN0QXJndW1lbnRUeXBlcygpOwogCi0g
ICAgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVByZWRp
Y3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOwotICAgIHBlcmZv
cm1DRkEoZGZnKTsKLSAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7Ci0gICAgcGVyZm9y
bUNTRShkZmcpOworICAgIGZvciAoOzspIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7
CisgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKKyAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ29u
c3RhbnRGb2xkaW5nKGRmZyk7CisgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1NpbXBsaWZp
Y2F0aW9uKGRmZyk7CisgICAgICAgIHBlcmZvcm1DU0UoZGZnKTsKKyAgICAgICAgaWYgKCFjaGFu
Z2VkKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uKGRmZyk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYg
Kzc4LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyBy
ZXR1cm4gaW5kZXhVbmNoZWNrZWQoKSAhPSBOb05vZGU7IH0KKyAgICBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIWlzU2V0KCk7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oRWRnZSBvdGhlcikg
Y29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDExIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewog
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KQogICAgICAgICAgICAgZml4dXBCbG9j
ayhtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzU5LDkgKzM2MCw5IEBAIHByaXZhdGU6CiAgICAg
SW5zZXJ0aW9uU2V0PE5vZGVJbmRleD4gbV9pbnNlcnRpb25TZXQ7CiB9OwogICAgIAotdm9pZCBw
ZXJmb3JtRml4dXAoR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtRml4dXAoR3JhcGgmIGdyYXBo
KQogewotICAgIHJ1blBoYXNlPEZpeHVwUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhh
c2U8Rml4dXBQaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuaAkocmV2aXNpb24g
MTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBGaXggcG9ydGlv
bnMgb2YgdGhlIGdyYXBoIHRoYXQgYXJlIGluZWZmaWNpZW50IGdpdmVuIHRoZSBwcmVkaWN0aW9u
cyB0aGF0CiAvLyB3ZSBoYXZlLiBUaGlzIHNob3VsZCBydW4gYWZ0ZXIgcHJlZGljdGlvbiBwcm9w
YWdhdGlvbiBidXQgYmVmb3JlIENTRS4KIAotdm9pZCBwZXJmb3JtRml4dXAoR3JhcGgmKTsKK2Jv
b2wgcGVyZm9ybUZpeHVwKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkc6OlBo
YXNlCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjc4LDYgKzI3OCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoKQogICAgIE5v
ZGVJbmRleCBsYXN0Tm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBi
IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2Jsb2Nrc1tiXS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBkYXRhTG9nKCJCbG9jayAjJXUgKGJjIyV1KTogJXMlc1xuIiwgKGludCli
LCBibG9jay0+Ynl0ZWNvZGVCZWdpbiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiIChza2lw
cGVkKSIsIGJsb2NrLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiKTsKICAgICAg
ICAgZGF0YUxvZygiICBQaGkgTm9kZXM6XG4iKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewpAQCAtMzA1LDYgKzMwNyw5IEBAIHZvaWQg
R3JhcGg6OmR1bXAoKQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkYXRhTG9nKCI8ZW1wdHk+
Iik7CiAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgdmFyIGxpbmtz
OiAiKTsKKyAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIFdURjo6
ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAgfQogfQogCkBAIC0zNjIs
NiArMzY3LDU0IEBAIHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKCkKICAgICB9CiB9
CiAKK3ZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3
b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4
KQoreworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fYmxvY2tzW3N1Y2Nlc3NvckluZGV4
XS5nZXQoKTsKKyAgICBpZiAoIXN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUpIHsKKyAgICAgICAgc3Vj
Y2Vzc29yLT5pc1JlYWNoYWJsZSA9IHRydWU7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChzdWNj
ZXNzb3JJbmRleCk7CisgICAgfQorICAgIAorICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMu
YXBwZW5kKGJsb2NrSW5kZXgpOworfQorCit2b2lkIEdyYXBoOjpkZXRlcm1pbmVSZWFjaGFiaWxp
dHkoKQoreworICAgIFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7CisgICAgd29ya2xp
c3QuYXBwZW5kKDApOworICAgIG1fYmxvY2tzWzBdLT5pc1JlYWNoYWJsZSA9IHRydWU7CisgICAg
d2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgQmxvY2tJbmRleCBpbmRleCA9
IHdvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOworICAgICAg
ICAKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7Cisg
ICAgICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQpOworICAgICAgICAKKyAgICAgICAgTm9kZSYg
bm9kZSA9IGF0KGJsb2NrLT5sYXN0KCkpOworICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFs
KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUuaXNKdW1wKCkpCisgICAgICAgICAgICBo
YW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsK
KyAgICAgICAgZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7CisgICAgICAgICAgICBoYW5kbGVT
dWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAg
ICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUubm90VGFrZW5CbG9j
a0luZGV4KCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdyYXBoOjpyZXNldFJlYWNo
YWJpbGl0eSgpCit7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2Jsb2Nrcy5z
aXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBibG9jay0+aXNSZWFjaGFibGUgPSBmYWxzZTsKKyAgICAgICAg
YmxvY2stPm1fcHJlZGVjZXNzb3JzLmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIGRldGVybWlu
ZVJlYWNoYWJpbGl0eSgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTE0NTU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDYsNiArMzQ2LDY0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGlzQ2FwdHVyZWQo
c3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICB9CiAgICAgCisgICAgdW5z
aWduZWQgbnVtU3VjY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhdChibG9jay0+bGFzdCgpKS5udW1TdWNjZXNzb3JzKCk7CisgICAgfQorICAgIEJsb2Nr
SW5kZXggc3VjY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNjZXNzb3IoaW5kZXgpOworICAg
IH0KKyAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvckZvckNvbmRpdGlvbihCYXNpY0Jsb2NrKiBibG9j
aywgYm9vbCBjb25kaXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3Qo
KSkuc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIFByZWRp
Y3RlZFR5cGUgbGVmdCA9IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKTsKKyAgICAgICAg
UHJlZGljdGVkVHlwZSByaWdodCA9IGF0KG5vZGUuY2hpbGQyKCkpLnByZWRpY3Rpb24oKTsKKyAg
ICAgICAgcmV0dXJuIGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rp
b24ocmlnaHQpOworICAgIH0KKyAgICAKKyAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUmIG5vZGUp
CisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpCisgICAgICAgICAgICAmJiAoKG5vZGUub3AoKSA9PSBQdXRCeVZhbCB8fCBub2Rl
Lm9wKCkgPT0gUHV0QnlWYWxBbGlhcykKKyAgICAgICAgICAgICAgICA/IGlzQWN0aW9uYWJsZU11
dGFibGVBcnJheVByZWRpY3Rpb24oYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKQorICAg
ICAgICAgICAgICAgIDogaXNBY3Rpb25hYmxlQXJyYXlQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQx
KCkpLnByZWRpY3Rpb24oKSkpOworICAgIH0KKyAgICAKKyAgICBib29sIGNsb2JiZXJzV29ybGQo
Tm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlQ2xvYmJl
cnNXb3JsZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIShub2RlLmZs
YWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAg
ICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Cisg
ICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAgICAgICAgICAgcmV0dXJuICFpc1ByZWRpY3RlZE51
bWVyaWNhbChub2RlKTsKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIHJldHVy
biAhYnlWYWxJc1B1cmUobm9kZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJZiBieSBzb21l
IG9kZGl0eSB3ZSBoaXQgdGhpcyBjYXNlIGluIHJlbGVhc2UgYnVpbGQgaXQncyBzYWZlciB0byBo
YXZlIENTRSBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJv
b2wgY2xvYmJlcnNXb3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNsb2JiZXJzV29ybGQoYXQobm9kZUluZGV4KSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CisgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwor
ICAgIAogICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CkBAIC0zNjQsNiArNDIy
LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CiBwcml2YXRlOgog
ICAgIAorICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdv
cmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgp
OworICAgIAogICAgIGJvb2wgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2Rl
JiBhZGQsIE5vZGUmIHZhcmlhYmxlLCBOb2RlJiBpbW1lZGlhdGUpCiAgICAgewogICAgICAgICBB
U1NFUlQoaW1tZWRpYXRlLmhhc0NvbnN0YW50KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHN0cnVjdCBPcElu
Zm8gewogLy8gTm9kZSByZXByZXNlbnRzIGEgc2luZ2xlIG9wZXJhdGlvbiBpbiB0aGUgZGF0YSBm
bG93IGdyYXBoLgogc3RydWN0IE5vZGUgewogICAgIGVudW0gVmFyQXJnVGFnIHsgVmFyQXJnIH07
Ci0KKyAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwg
bm8gaW1tZWRpYXRlIHZhbHVlLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pCkBAIC0yMDIsNyArMjAyLDggQEAgc3RydWN0IE5vZGUgewogICAgICAgICBtX29w
ID0gSlNDb25zdGFudDsKICAgICAgICAgaWYgKG1fZmxhZ3MgJiBOb2RlTXVzdEdlbmVyYXRlKQog
ICAgICAgICAgICAgbV9yZWZDb3VudC0tOwotICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlTXVzdEdl
bmVyYXRlOworICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUNsb2JiZXJzV29ybGQpKTsK
KyAgICAgICAgbV9mbGFncyAmPSB+KE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVy
KTsKICAgICAgICAgbV9vcEluZm8gPSBjb25zdGFudE51bWJlcjsKICAgICAgICAgY2hpbGRyZW4u
cmVzZXQoKTsKICAgICB9CkBAIC00NjgsNiArNDY5LDM3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgcmV0dXJuIG1fb3BJbmZvMjsKICAgICB9CiAgICAgCisgICAgdW5zaWduZWQgbnVtU3VjY2Vz
c29ycygpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBKdW1w
OgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICAg
ICAgcmV0dXJuIDI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBCbG9ja0luZGV4IHN1Y2Nlc3Nvcih1bnNpZ25lZCBp
bmRleCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaW5kZXgpIHsKKyAgICAgICAgY2FzZSAwOgor
ICAgICAgICAgICAgcmV0dXJuIHRha2VuQmxvY2tJbmRleCgpOworICAgICAgICBjYXNlIDE6Cisg
ICAgICAgICAgICByZXR1cm4gbm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBO
b0Jsb2NrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEJsb2NrSW5kZXggc3VjY2Vzc29y
Rm9yQ29uZGl0aW9uKGJvb2wgY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQnJh
bmNoKCkpOworICAgICAgICByZXR1cm4gY29uZGl0aW9uID8gdGFrZW5CbG9ja0luZGV4KCkgOiBu
b3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNIZWFwUHJlZGlj
dGlvbigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcg
KzE3Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhJc1N0
cmluZywgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJc09iamVjdCwgTm9kZVJlc3Vs
dEJvb2xlYW4pIFwKICAgICBtYWNybyhJc0Z1bmN0aW9uLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAot
ICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU1pZ2h0Q2xvYmJl
cikgXAorICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFj
cm8oVG9QcmltaXRpdmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xv
YmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKFN0ckNhdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMjEsNyArMTEyMSw3IEBAIHNpemVfdCBERkdfT1BFUkFU
SU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3ApLnRvQm9vbGVhbihleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cCkudG9Cb29sZWFuKCk7CiB9CiAKICNpZiBERkdfRU5BQkxFKFZFUkJPU0VfU1BFQ1VMQVRJT05f
RkFJTFVSRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHJldmlzaW9u
IDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsMTAgKzczLDEwIEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBQaGFzZVR5cGU+Ci12b2lkIHJ1blBoYXNlKEdyYXBoJiBncmFwaCkKK2Jvb2wgcnVuUGhh
c2UoR3JhcGgmIGdyYXBoKQogewogICAgIFBoYXNlVHlwZSBwaGFzZShncmFwaCk7Ci0gICAgcGhh
c2UucnVuKCk7CisgICAgcmV0dXJuIHBoYXNlLnJ1bigpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBtX2NvdW50ID0gMDsK
QEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAgICAgICAgICAgZG9Sb3VuZE9mRG91YmxlVm90
aW5nKCk7CiAgICAgICAgICAgICBwcm9wYWdhdGVCYWNrd2FyZCgpOwogICAgICAgICB9IHdoaWxl
IChtX2NoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IAogcHJpdmF0ZToKQEAgLTgzMSw5ICs4MzMsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogICAg
IAotdm9pZCBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKEdyYXBoJiBncmFwaCkKK2Jvb2wg
cGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhh
c2U8UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhh
c2U8UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIEdyYXBoOwogLy8gYXJp
dGhtZXRpYyBub2RlcykgZG8gbm90IHF1YWxpZnkgZm9yIGFueSBvZiB0aGVzZSBjYXRlZ29yaWVz
LiBCdXQgYWZ0ZXIgcnVubmluZwogLy8gdGhpcyBwaGFzZSwgd2UnbGwgaGF2ZSBmdWxsIGluZm9y
bWF0aW9uIGZvciB0aGUgZXhwZWN0ZWQgdHlwZSBvZiBlYWNoIG5vZGUuCiAKLXZvaWQgcGVyZm9y
bVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYpOworYm9vbCBwZXJmb3JtUHJlZGljdGlvblBy
b3BhZ2F0aW9uKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkc6OlBoYXNlCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
ICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKICAgICAgICAgYm9v
bCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGRvIHsKQEAgLTYzLDcgKzYzLDggQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KKyAg
ICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTE2Niw5
ICsxNjcsOSBAQCBwcml2YXRlOgogCiB9OwogCi12b2lkIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGlt
aW5hdGlvbihHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlv
bihHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8UmVkdW5kYW50UGhpRWxpbWluYXRpb25Q
aGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFzZTxSZWR1bmRhbnRQaGlFbGltaW5hdGlv
blBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhp
RWxpbWluYXRpb25QaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBHcmFwaDsKIC8vIFdlIGluc2VydGVkIG1hbnkgY2Fu
LWJlLXJlZHVuZGFudCBQaGkgbm9kZXMgd2hlbiBidWlsZGluZyB0aGUgZ3JhcGguCiAvLyBUaGlz
IHBoYXNlIHdpbGwganVzdCByZW1vdmUgdGhlbS4KIAotdm9pZCBwZXJmb3JtUmVkdW5kYW50UGhp
RWxpbWluYXRpb24oR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0aW9u
KEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAsMTIgKzEyMCwyNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBDbGVhciB0aGUgdXNl
IGNvdW50ICYgYWRkIHRvIHRoZSBmcmVlIGxpc3QuCiAgICAgICAgICAgICBtX3VzZWRbaW5kZXhd
ID0gMDsKICAgICAgICAgICAgIG1fZnJlZS5hcHBlbmQoaW5kZXgpOworICAgICAgICB9IGVsc2Ug
eworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAg
IGRhdGFMb2coIiBWaXJ0dWFsIHJlZ2lzdGVyICV1IGlzIGF0ICV1LyV1IHVzZXMuIiwgaW5kZXgs
IG1fdXNlZFtpbmRleF0sIG5vZGUucmVmQ291bnQoKSk7CisjZW5kaWYKICAgICAgICAgfQogICAg
IH0KICAgICB2b2lkIHVzZShFZGdlIGNoaWxkKQogICAgIHsKICAgICAgICAgdXNlKGNoaWxkLmlu
ZGV4VW5jaGVja2VkKCkpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHVzZUlmSGFzUmVzdWx0KEVk
Z2UgY2hpbGQpCisgICAgeworICAgICAgICBpZiAoIWNoaWxkKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAoIW1fZ3JhcGhbY2hpbGRdLmhhc1Jlc3VsdCgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB1c2UoY2hpbGQpOworICAgIH0KIAogICAgIHVuc2lnbmVkIGhpZ2hX
YXRlcm1hcmsoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4
MCw4ICsxMjgwLDExIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgR1BSSW5mbzo6cmVnVDApOwogCiAgICAgQVNTRVJU
KCFtX2NvbXBpbGVJbmRleCk7Ci0gICAgZm9yIChtX2Jsb2NrID0gMDsgbV9ibG9jayA8IG1faml0
LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spCi0gICAgICAgIGNvbXBpbGUoKm1f
aml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10pOworICAgIGZvciAobV9ibG9jayA9IDA7IG1f
YmxvY2sgPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKyttX2Jsb2NrKSB7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS5n
ZXQoKTsKKyAgICAgICAgaWYgKGJsb2NrKQorICAgICAgICAgICAgY29tcGlsZSgqYmxvY2spOwor
ICAgIH0KICAgICBsaW5rQnJhbmNoZXMoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyODks
OCArMTI5MiwxMCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNyZWF0ZU9TUkVudHJpZXMoKQogewogICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyAr
K2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayYgYmxvY2sgPSAqbV9qaXQuZ3JhcGgo
KS5tX2Jsb2Nrc1tibG9ja0luZGV4XTsKLSAgICAgICAgaWYgKCFibG9jay5pc09TUlRhcmdldCkK
KyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgbmVlZCB0byBjcmVhdGUgT1NSIGVudHJ5
IHRyYW1wb2xpbmVzIHdoZW4gdXNpbmcgZWRnZSBjb2RlCkBAIC0xMzEyLDkgKzEzMTcsMTIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMoTGluawogewogICAgIHVuc2lnbmVk
IG9zckVudHJ5SW5kZXggPSAwOwogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKLSAgICAgICAgQmFzaWNCbG9jayYgYmxvY2sgPSAqbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ti
bG9ja0luZGV4XTsKLSAgICAgICAgaWYgKGJsb2NrLmlzT1NSVGFyZ2V0KQotICAgICAgICAgICAg
bV9qaXQubm90aWNlT1NSRW50cnkoYmxvY2ssIG1fb3NyRW50cnlIZWFkc1tvc3JFbnRyeUluZGV4
KytdLCBsaW5rQnVmZmVyKTsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFw
aCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIG1faml0Lm5vdGljZU9TUkVudHJ5KCpibG9jaywg
bV9vc3JFbnRyeUhlYWRzW29zckVudHJ5SW5kZXgrK10sIGxpbmtCdWZmZXIpOwogICAgIH0KICAg
ICBBU1NFUlQob3NyRW50cnlJbmRleCA9PSBtX29zckVudHJ5SGVhZHMuc2l6ZSgpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiwxMCBAQCBwdWJsaWM6CiAgICAg
Ly8gQ2FsbGVkIG9uIGFuIG9wZXJhbmQgb25jZSBpdCBoYXMgYmVlbiBjb25zdW1lZCBieSBhIHBh
cmVudCBub2RlLgogICAgIHZvaWQgdXNlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAg
ICAgIGlmICghbm9kZS5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7
CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdOwogCiAgICAgICAgIC8vIHVzZSgpIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1
ZSBiZWNvbWVzIGRlYWQsIGFuZCBhbnkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAg
Ym9vbCBydW4oKQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAg
IGRhdGFMb2coIlByZXNlcnZlZCB2YXJzOiAiKTsKQEAgLTU0LDYgKzU0LDEwIEBAIHB1YmxpYzoK
ICNlbmRpZgogICAgICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAg
ICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8
IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTY2LDIyICs3MCwyMSBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpIHx8IG5v
ZGUub3AoKSA9PSBQaGkgfHwgbm9kZS5vcCgpID09IEZsdXNoKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEdldExvY2FsIG5v
ZGVzIGFyZSBlZmZlY3RpdmVseSBwaGkgbm9kZXMgaW4gdGhlIGdyYXBoLCByZWZlcmVuY2luZwot
ICAgICAgICAgICAgICAgIC8vIHJlc3VsdHMgZnJvbSBwcmlvciBibG9ja3MuCi0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUub3AoKSAhPSBHZXRMb2NhbCkgewotICAgICAgICAgICAgICAgICAgICAv
LyBGaXJzdCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwg
dGhlbgotICAgICAgICAgICAgICAgICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBm
b3IgdGhpcyBub2RlLiBXZSBkbyBzbyBpbiB0aGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIG9y
ZGVyIHNvIHRoYXQgaWYgYSBjaGlsZCBpcyBvbiBpdHMgbGFzdCB1c2UsIGFuZCBhCi0gICAgICAg
ICAgICAgICAgICAgIC8vIFZpcnR1YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUg
cmV1c2VkIGZvciBub2RlLgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQo
KSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhd
KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
c2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
Y29yZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TG9jYWwp
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNS
ZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGNh
bGwgdXNlIG9uIGFsbCBvZiB0aGUgY3VycmVudCBub2RlJ3MgY2hpbGRyZW4sIHRoZW4KKyAgICAg
ICAgICAgICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBX
ZSBkbyBzbyBpbiB0aGlzCisgICAgICAgICAgICAgICAgLy8gb3JkZXIgc28gdGhhdCBpZiBhIGNo
aWxkIGlzIG9uIGl0cyBsYXN0IHVzZSwgYW5kIGEKKyAgICAgICAgICAgICAgICAvLyBWaXJ0dWFs
UmVnaXN0ZXIgaXMgZnJlZWQsIHRoZW4gaXQgbWF5IGJlIHJldXNlZCBmb3Igbm9kZS4KKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBj
aGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElk
eCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdCht
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlmSGFzUmVzdWx0
KG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlmSGFz
UmVzdWx0KG5vZGUuY2hpbGQzKCkpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgIGlmICghbm9kZS5oYXNSZXN1bHQoKSkKQEAgLTExNCwxMiArMTE3LDE0IEBAIHB1YmxpYzoK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIk51bSBjYWxs
ZWUgcmVnaXN0ZXJzOiAldVxuIiwgY2FsbGVlUmVnaXN0ZXJzKTsKICNlbmRpZgorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogfTsKIAotdm9pZCBwZXJmb3JtVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvbihHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1WaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uKEdyYXBoJiBncmFwaCkKIHsKLSAgICBydW5QaGFzZTxWaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8VmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVy
QWxsb2NhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBHcmFwaDsKIC8v
IGZvciBsb29rLXVwIHRhYmxlcyBmb3IgdGhlIGxpbmVhciBzY2FuIHJlZ2lzdGVyIGFsbG9jYXRv
ciB0aGF0IHRoZSBiYWNrZW5kCiAvLyB1c2VzLgogCi12b2lkIHBlcmZvcm1WaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uKEdyYXBoJik7Citib29sIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZp
c2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTg1LDcgKzI1ODUsNyBAQCBKU1ZhbHVlIElu
dGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgICovCiAgICAgICAgIGludCBk
c3QgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3BlcmFu
ZDsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oIWNhbGxGcmFtZS0+cihzcmMp
LmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNCb29sZWFuKCFjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpOwog
ICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihkc3QpID0gcmVzdWx0OwogCkBAIC0zOTA1LDcgKzM5MDUsNyBAQCBza2lwX2lkX2N1c3Rv
bV9zZWxmOgogICAgICAgICAgKi8KICAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5k
OwogICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKGNh
bGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNhbGxGcmFtZSkpIHsKKyAgICAg
ICAgaWYgKGNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAg
ICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwog
ICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMzkyNSw3ICszOTI1LDcgQEAgc2tp
cF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgICovCiAgICAgICAgIGludCBjb25kID0gdlBDWzFd
LnUub3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGlmICghY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1l
KSkgeworICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFu
KCkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBDSEVDS19GT1Jf
VElNRU9VVCgpOwogICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMzk0Miw3ICsz
OTQyLDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgKi8KICAgICAgICAgaW50IGNv
bmQgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3Bl
cmFuZDsKLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFu
KGNhbGxGcmFtZSkpIHsKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCku
dG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgICAgIH0KQEAgLTM5NTgsNyArMzk1OCw3IEBAIHNraXBf
aWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICovCiAgICAgICAgIGludCBjb25kID0gdlBDWzFdLnUu
b3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAg
IGlmICghY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkg
eworICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkp
IHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg1NSw5ICsyODU1LDcgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAgICAgSlNWYWx1ZSBzcmMgPSBzdGFja0Zy
YW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwogCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFj
a0ZyYW1lLmNhbGxGcmFtZTsKLQotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFzcmMu
dG9Cb29sZWFuKGNhbGxGcmFtZSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFz
cmMudG9Cb29sZWFuKCkpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAtMjg2OCw5ICsyODY2LDcgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04oaW50LCBvcF9qdHJ1ZSkKIAogICAgIEpTVmFsdWUgc3JjMSA9
IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotCi0gICAgYm9vbCByZXN1bHQgPSBzcmMxLnRvQm9v
bGVhbihjYWxsRnJhbWUpOworICAgIGJvb2wgcmVzdWx0ID0gc3JjMS50b0Jvb2xlYW4oKTsKICAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNyw3ICs1MDcsNyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfbmV3X3JlZ2V4CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfbm90KQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgTExJTlRfUkVUVVJOKGpzQm9v
bGVhbighTExJTlRfT1BfQygyKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKSk7CisgICAgTExJ
TlRfUkVUVVJOKGpzQm9vbGVhbighTExJTlRfT1BfQygyKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkp
KTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2VxKQpAQCAtMTExMCwxMyAr
MTExMCwxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfam1wX3Njb3BlCiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfanRydWUpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsK
LSAgICBMTElOVF9CUkFOQ0gob3BfanRydWUsIExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvQm9v
bGVhbihleGVjKSk7CisgICAgTExJTlRfQlJBTkNIKG9wX2p0cnVlLCBMTElOVF9PUF9DKDEpLmpz
VmFsdWUoKS50b0Jvb2xlYW4oKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9qZmFsc2UpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBMTElOVF9CUkFOQ0gob3BfamZh
bHNlLCAhTExJTlRfT1BfQygxKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBMTElO
VF9CUkFOQ0gob3BfamZhbHNlLCAhTExJTlRfT1BfQygxKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkp
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfamxlc3MpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5Nyw3ICs3OTcsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFy
Z3VtZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC50b0Jvb2xl
YW4oZXhlYykpCisgICAgICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbigpKQogICAgICAgICAg
ICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBmaWx0ZXJJbmRleCsrLCB2
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoayA9PSBsZW5ndGgpCkBAIC04MTgsNyArODE4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBlYWNo
QXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKIAogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNh
bGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJn
dW1lbnRzKTsKLSAgICAgICAgaWYgKHJlc3VsdC50b0Jvb2xlYW4oZXhlYykpCisgICAgICAgIGlm
IChyZXN1bHQudG9Cb29sZWFuKCkpCiAgICAgICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgZmlsdGVySW5kZXgrKywgdik7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0QXJyYXkpOwpAQCAtOTE3LDcgKzkxNyw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJn
dW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVu
dCgyLCB0aGlzT2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5j
YWxsKCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50b0Jvb2xlYW4oY2FjaGVkQ2FsbC5uZXdD
YWxsRnJhbWUoZXhlYykpKQorICAgICAgICAgICAgaWYgKCFyZXN1bHQudG9Cb29sZWFuKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTkzNCw3ICs5MzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAg
ICAgICAgYm9vbCBwcmVkaWNhdGVSZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cykudG9Cb29sZWFuKGV4ZWMpOwor
ICAgICAgICBib29sIHByZWRpY2F0ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKS50b0Jvb2xlYW4oKTsKICAg
ICAgICAgaWYgKCFwcmVkaWNhdGVSZXN1bHQpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9v
bGVhbihmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwMjUsNyArMTAyNSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
Y2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbihjYWNo
ZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkpCisgICAgICAgICAgICBpZiAocmVzdWx0LnRvQm9v
bGVhbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHRydWUpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNDIsNyArMTA0Miw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAotICAgICAgICBib29sIHByZWRpY2F0ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKS50b0Jvb2xl
YW4oZXhlYyk7CisgICAgICAgIGJvb2wgcHJlZGljYXRlUmVzdWx0ID0gY2FsbChleGVjLCBmdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLnRvQm9v
bGVhbigpOwogICAgICAgICBpZiAocHJlZGljYXRlUmVzdWx0KSB7CiAgICAgICAgICAgICByZXN1
bHQgPSBqc0Jvb2xlYW4odHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVh
bkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCB2b2lkIEJv
b2xlYW5Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oCiBKU09iamVjdCogY29uc3RydWN0Qm9v
bGVhbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQm9vbGVh
bk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
YXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xl
YW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmds
b2JhbERhdGEoKSwganNCb29sZWFuKGFyZ3MuYXQoMCkudG9Cb29sZWFuKGV4ZWMpKSk7CisgICAg
b2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFuKGFyZ3Mu
YXQoMCkudG9Cb29sZWFuKCkpKTsKICAgICByZXR1cm4gb2JqOwogfQogCkBAIC02OCw3ICs2OCw3
IEBAIENvbnN0cnVjdFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDb24KIC8vIEVDTUEgMTUu
Ni4xCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQm9vbGVhbkNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oZXhlYykpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oKSkp
OwogfQogCiBDYWxsVHlwZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCos
IENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gQmFzaWMgY29udmVyc2lvbnMuCiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSkgY29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRv
dWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7Ci0gICAgICAgIGJvb2wgdG9Cb29sZWFuKEV4
ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBib29sIHRvQm9vbGVhbigpIGNvbnN0OwogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCopIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMiwxMSArNDIy
LDYgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICBn
ZXRDbGFzc1Byb3BlcnR5TmFtZXMoZXhlYywgb2JqZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVydHlO
YW1lcywgbW9kZSk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OnRvQm9vbGVhbihFeGVjU3RhdGUqKSBj
b25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCiBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVy
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBKU1ZhbHVlIHByaW1pdGl2ZSA9IHRvUHJp
bWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsK
ICAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1i
ZXIsIEpTVmFsdWUmKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRv
TnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0
cmluZyogdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
MSw3ICsyMjEsNyBAQCBib29sIEpTU3RyaW5nOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTU3RyaW5nOjp0b0Jvb2xlYW4oRXhlY1N0YXRl
KikgY29uc3QKK2Jvb2wgSlNTdHJpbmc6OnRvQm9vbGVhbigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fbGVuZ3RoOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKICAg
ICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlKSBjb25zdDsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oRXhl
Y1N0YXRlKikgY29uc3Q7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgdG9Cb29sZWFu
KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRv
dWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0b09iamVj
dChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgICAgICBkb3VibGUgdG9O
dW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CkBAIC00MzUsMjMgKzQzNSwyMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGlubGluZSBib29sIGlzSlNTdHJpbmcoSlNWYWx1ZSB2KSB7IHJldHVybiB2
LmlzQ2VsbCgpICYmIHYuYXNDZWxsKCktPmNsYXNzSW5mbygpID09ICZKU1N0cmluZzo6c19pbmZv
OyB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU0NlbGw6OnRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CisgICAgaW5saW5lIGJvb2wgSlNDZWxsOjp0b0Jvb2xlYW4oKSBjb25zdAogICAgIHsK
ICAgICAgICAgaWYgKGlzU3RyaW5nKCkpIAotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEpTU3RyaW5nKj4odGhpcyktPnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+KHRoaXMpLT50b0Jvb2xlYW4oKTsKICAg
ICAgICAgcmV0dXJuICFzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKCk7CiAgICAgfQogCiAgICAgLy8gLS0tIEpTVmFsdWUgaW5saW5lcyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAgICAgCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6dG9Cb29sZWFu
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjp0b0Jvb2xl
YW4oKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSW50MzIoKSkKICAgICAgICAgICAgIHJl
dHVybiBhc0ludDMyKCk7CiAgICAgICAgIGlmIChpc0RvdWJsZSgpKQogICAgICAgICAgICAgcmV0
dXJuIGFzRG91YmxlKCkgPiAwLjAgfHwgYXNEb3VibGUoKSA8IDAuMDsgLy8gZmFsc2UgZm9yIE5h
TgogICAgICAgICBpZiAoaXNDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gYXNDZWxsKCktPnRv
Qm9vbGVhbihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBhc0NlbGwoKS0+dG9Cb29sZWFuKCk7
CiAgICAgICAgIHJldHVybiBpc1RydWUoKTsgLy8gZmFsc2UsIG51bGwsIGFuZCB1bmRlZmluZWQg
YWxsIGNvbnZlcnQgdG8gZmFsc2UuCiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUq
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKICAgICAgICAg
Ym9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFs
dWUmKTsKIAotICAgICAgICBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAg
ICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsKIAogICAgICAgICAvLyB0b051bWJlciBjb252ZXJz
aW9uIGlzIGV4cGVjdGVkIHRvIGJlIHNpZGUgZWZmZWN0IGZyZWUgaWYgYW4gZXhjZXB0aW9uIGhh
cwogICAgICAgICAvLyBiZWVuIHNldCBpbiB0aGUgRXhlY1N0YXRlIGFscmVhZHkuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCwxNCArMjE0LDE0IEBA
IHN0YXRpYyBib29sIHRvUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGEKIAogICAgIFByb3BlcnR5
U2xvdCBlbnVtZXJhYmxlU2xvdChkZXNjcmlwdGlvbik7CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUsIGVu
dW1lcmFibGVTbG90KSkgewotICAgICAgICBkZXNjLnNldEVudW1lcmFibGUoZW51bWVyYWJsZVNs
b3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpLnRvQm9v
bGVhbihleGVjKSk7CisgICAgICAgIGRlc2Muc2V0RW51bWVyYWJsZShlbnVtZXJhYmxlU2xvdC5n
ZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSkudG9Cb29sZWFu
KCkpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUHJvcGVydHlTbG90IGNvbmZpZ3VyYWJsZVNsb3QoZGVz
Y3JpcHRpb24pOwogICAgIGlmIChkZXNjcmlwdGlvbi0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25maWd1cmFibGUsIGNvbmZpZ3VyYWJsZVNsb3QpKSB7Ci0g
ICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGNvbmZpZ3VyYWJsZVNsb3QuZ2V0VmFsdWUoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZpZ3VyYWJsZSkudG9Cb29sZWFuKGV4ZWMpKTsK
KyAgICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUoY29uZmlndXJhYmxlU2xvdC5nZXRWYWx1ZShl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uZmlndXJhYmxlKS50b0Jvb2xlYW4oKSk7CiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC0yMzYsNyArMjM2LDcgQEAgc3RhdGljIGJvb2wgdG9Qcm9wZXJ0eURlc2Ny
aXB0b3IoRXhlY1N0YQogCiAgICAgUHJvcGVydHlTbG90IHdyaXRhYmxlU2xvdChkZXNjcmlwdGlv
bik7CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLndyaXRhYmxlLCB3cml0YWJsZVNsb3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0
V3JpdGFibGUod3JpdGFibGVTbG90LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS53cml0YWJsZSkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgZGVzYy5zZXRXcml0YWJsZSh3
cml0YWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxl
KS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0OSw5ICsyNDksOSBAQCB2b2lkIHNldFJlZ0V4cENvbnN0cnVj
dG9ySW5wdXQoRXhlY1N0YXRlCiAgICAgYXNSZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+
c2V0SW5wdXQoZXhlYywgdmFsdWUudG9TdHJpbmcoZXhlYykpOwogfQogCi12b2lkIHNldFJlZ0V4
cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCit2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGFz
UmVnRXhwQ29uc3RydWN0b3IoYmFzZU9iamVjdCktPnNldE11bHRpbGluZSh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOworICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFzZU9iamVjdCktPnNldE11bHRp
bGluZSh2YWx1ZS50b0Jvb2xlYW4oKSk7CiB9CiAKIC8vIEVDTUEgMTUuMTAuNApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTEgKzE0NywxMSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAKICAgICBjaGFyIHBvc3RmaXhbNV0g
PSB7ICcvJywgMCwgMCwgMCwgMCB9OwogICAgIGludCBpbmRleCA9IDE7Ci0gICAgaWYgKHRoaXNP
YmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS50b0Jvb2xlYW4o
ZXhlYykpCisgICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuZ2xvYmFsKS50b0Jvb2xlYW4oKSkKICAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICdnJzsK
LSAgICBpZiAodGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pZ25v
cmVDYXNlKS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuaWdub3JlQ2FzZSkudG9Cb29sZWFuKCkpCiAgICAgICAgIHBv
c3RmaXhbaW5kZXgrK10gPSAnaSc7Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHRo
aXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKS50b0Jv
b2xlYW4oKSkKICAgICAgICAgcG9zdGZpeFtpbmRleF0gPSAnbSc7CiAgICAgVVN0cmluZyBzb3Vy
Y2UgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZSku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIC8vIElmIHNvdXJjZSBpcyBlbXB0eSwg
dXNlICIvKD86KS8iIHRvIGF2b2lkIGNvbGxpZGluZyB3aXRoIGNvbW1lbnQgc3ludGF4Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138519</attachid>
            <date>2012-04-24 01:54:03 -0700</date>
            <delta_ts>2012-04-24 16:35:41 -0700</delta_ts>
            <desc>more</desc>
            <filename>cfgsimplify_patch_5.diff</filename>
            <type>text/plain</type>
            <size>94907</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0ODYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNCBA
QAorMjAxMi0wNC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTUzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGlu
IHByb2dyZXNzLgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNW
YWx1ZVRvQm9vbGVhbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAg
ICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6
cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAg
ICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2Uu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChDRkdTaW1wbGlmaWNhdGlv
blBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpDRkdT
aW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpbmRPcGVyYW5kU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjprZWVwT3BlcmFuZEFsaXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlm
aWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpD
RkdTaW1wbGlmaWNhdGlvblBoYXNlOjptZXJnZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6
cGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NT
RVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cnVuKToKKyAgICAgICAg
KENTRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2xvYmJlcnNXb3JsZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuaDoKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5oOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3VjY2Vz
c29yRm9yQ29uZGl0aW9uKToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om51bVN1Y2Nlc3NvcnMpOgorICAgICAgICAo
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3JGb3JDb25kaXRpb24pOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR1BoYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6cnVuUGhh
c2UpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbik6CisgICAgICAgICog
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAg
ICAgICAqIGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpydW4pOgorICAgICAgICAo
SlNDOjpERkc6OnBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbik6CisgICAgICAgICogZGZn
L0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OnBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3Bw
OgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
RXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAqIHJ1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9v
bGVhbik6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAg
KEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjp0b0Jvb2xlYW4pOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjp0
b1Byb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4
cFByb3RvRnVuY1RvU3RyaW5nKToKKwogMjAxMi0wNC0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaGF2ZSBjb25zdGFudCBwcm9wYWdhdGlv
bgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9vbCBKU1ZhbHVlVG9Cb29sZWFuKEpT
Q29udGV4dFJlZiBjdHgsIAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKLSAgICByZXR1cm4ganNWYWx1
ZS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIGpzVmFsdWUudG9Cb29sZWFuKCk7CiB9CiAK
IGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1
ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw4IEBACiAJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZEMTQ3
MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYzQjNBMUExNTNF
NjhGMjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE3MTUzRTY4RUYwMDNFRDBG
RiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGM0IzQTFCMTUzRTY4
RjQwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8q
IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyogREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDUxNDYwQ0JBQjAw
MTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJl
Z2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNEIxNDYwQ0Q2RTAw
MTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc2OCw2ICs3
NzAsOCBAQAogCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCM0ExODE1M0U2
OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNCM0EyNDE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NGR1NpbXBsaWZp
Y2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMDQ1LDYgKzIwNDksOCBAQAogCQkJCTBGN0IyOTQ4MTRDM0NE
MjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLywKIAkJCQkwRkZGQzk0QjE0RUY5MDk1
MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTRDMTRFRjkwOTUwMEM3
MjUzMiAvKiBERkdDRkFQaGFzZS5oICovLAorCQkJCTBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAv
KiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjNCM0EyNTE1NDRDOTkx
MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovLAogCQkJCTBGRkZDOTRE
MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVG
OTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEZEODJFMUUxNDE3MkMyRjAw
MTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8sCkBAIC0yNTgzLDYgKzI1ODksNyBAQAog
CQkJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJs
ZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0
NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYz
QjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMzE0Nyw2ICszMTU0LDcgQEAKIAkJCQk4NjQyQzUxMjE1MUMwODNEMDA0
NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2
RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8q
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDYgKzk5LDggQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0
aWFsaXplKEdyYXBoJiBncgogICAgIFBST0ZJTEUoRkxBR19GT1JfQkxPQ0tfSU5JVElBTElaQVRJ
T04pOwogICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKTsKICAg
ICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICByb290LT5jZmFIYXNWaXNpdGVk
ID0gZmFsc2U7CisgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IGdyYXBoW3Jvb3QtPnZhcmlhYmxlc0F0SGVh
ZC5hcmd1bWVudChpKV07CiAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0QXJndW1lbnQp
OwpAQCAtMTQzLDExICsxNDUsMzMgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdy
YXBoJiBncgogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChQ
cmVkaWN0RmxvYXQ2NEFycmF5KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcm9vdC0+dmFs
dWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKKyAgICAgICAgCisgICAgICAgIHJvb3Qt
PnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwogICAgIH0KICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsK
LSAgICAgICAgaWYgKCFncmFwaC5sb2NhbElzQ2FwdHVyZWQoaSkpCisgICAgICAgIGlmIChncmFw
aC5sb2NhbElzQ2FwdHVyZWQoaSkpCisgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9j
YWwoaSkubWFrZVRvcCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmxvY2Fs
KGkpLmNsZWFyKCk7CisgICAgfQorICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMSA7
IGJsb2NrSW5kZXggPCBncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
ICghYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJv
b3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5tYWtlVG9wKCk7CisgICAgICAgIGJsb2NrLT5jZmFT
aG91bGRSZXZpc2l0ID0gZmFsc2U7CisgICAgICAgIGJsb2NrLT5jZmFIYXNWaXNpdGVkID0gZmFs
c2U7CisgICAgICAgIGJsb2NrLT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgKytpKSB7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkp
LmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNs
ZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgYmxvY2st
PnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVl
c0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC01MjYs
OCArNTUwLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKICAg
ICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTEyODMsMTAgKzEzMDUsMTMgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6bWVyZ2VTdGF0ZUF0VAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAg
ICAgY2FzZSBGbHVzaDoKKyAgICBjYXNlIFBoYW50b206CiAgICAgICAgIC8vIFRoZSBibG9jayB0
cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgogICAgICAgICBzb3VyY2UgPSBp
blZhcmlhYmxlOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgZGF0YUxvZygiICAgICAgICAgIFRyYW5zZmVyaW5nIGZyb20gaGVhZCB0byB0YWlsLlxu
Iik7CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgICBUcmFuc2ZlcmluZyAiKTsKKyAgICAgICAg
c291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZygiIGZyb20gaGVh
ZCB0byB0YWlsLlxuIik7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAg
LTEyOTQsNyArMTMxOSw5IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVB
dFQKICAgICAgICAgLy8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRpb25h
bCBzcGVjdWxhdGlvbnMuCiAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZUluZGV4KTsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2co
IiAgICAgICAgICBSZWZpbmluZy5cbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgUmVm
aW5pbmcgdG8gIik7CisgICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAg
ICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
QEAgLTEzMDYsNyArMTMzMyw5IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3Rh
dGVBdFQKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgIGRhdGFMb2coIiAgICAgICAgICBTZXR0aW5nLlxuIik7CisgICAgICAgIGRhdGFMb2coIiAg
ICAgICAgICBTZXR0aW5nIHRvICIpOworICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxl
KCkpOworICAgICAgICBkYXRhTG9nKCJcbiIpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKQEAgLTEzODIsMTIgKzE0MTEsMTkgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
bWVyZ2VUb1N1Y2NlcwogICAgIEFTU0VSVCh0ZXJtaW5hbC5pc1Rlcm1pbmFsKCkpOwogICAgIAog
ICAgIHN3aXRjaCAodGVybWluYWwub3AoKSkgewotICAgIGNhc2UgSnVtcDoKKyAgICBjYXNlIEp1
bXA6IHsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIs
IHRlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2lj
QmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7
CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIEJyYW5jaDoKLSAgICAgICAgcmV0dXJuIG1lcmdl
KGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpXS5n
ZXQoKSkKLSAgICAgICAgICAgIHwgbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVy
bWluYWwubm90VGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAgICBjYXNlIEJyYW5jaDogewor
ICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBN
ZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpKTsKKyAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5h
bC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgICAgICBkYXRhTG9nKCIgICAgICAgIE1l
cmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCkpOwor
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1p
bmFsLm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgIHJldHVybiBjaGFuZ2Vk
OworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBUaHJvdzoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZp
c2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDcgKzMyMywxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RW
YWx1ZSB7CiAgICAgCiAgICAgYm9vbCBpc0NsZWFyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3R5cGUgPT0gUHJlZGljdE5vbmUgJiYgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpOworICAg
ICAgICBib29sIHJlc3VsdCA9IG1fdHlwZSA9PSBQcmVkaWN0Tm9uZSAmJiBtX3N0cnVjdHVyZS5p
c0NsZWFyKCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBBU1NFUlQoIW1fdmFs
dWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICB2b2lkIG1ha2VU
b3AoKQpAQCAtNDIxLDEwICs0MjQsMTQgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIGJv
b2wgbWVyZ2UoY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCiAgICAgewogICAgICAgICBib29s
IHJlc3VsdCA9IGZhbHNlOwotICAgICAgICByZXN1bHQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1fdHlw
ZSwgb3RoZXIubV90eXBlKTsKLSAgICAgICAgcmVzdWx0IHw9IG1fc3RydWN0dXJlLmFkZEFsbChv
dGhlci5tX3N0cnVjdHVyZSk7Ci0gICAgICAgIGlmIChtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWUp
Ci0gICAgICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOworICAgICAgICBpZiAoaXNDbGVhcigp
KQorICAgICAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICByZXN1bHQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1fdHlwZSwgb3RoZXIubV90eXBlKTsKKyAgICAg
ICAgICAgIHJlc3VsdCB8PSBtX3N0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9zdHJ1Y3R1cmUpOwor
ICAgICAgICAgICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlID0gSlNWYWx1ZSgpOworICAgICAgICB9CiAgICAgICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTE0NTU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDkgQEAgcHVibGljOgogICAgICAgICBGaXhlZCwKICAgICAgICAgVmFy
aWFibGUKICAgICB9OwotCisgICAgCisgICAgI2RlZmluZSBBZGphY2VuY3lMaXN0U2l6ZSAzCisg
ICAgCiAgICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQpCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgICAgICA6IG1fa2luZChraW5kKQpAQCAtNzQsMjEgKzc2LDIxIEBAIHB1YmxpYzoKICAgICAK
ICAgICBjb25zdCBFZGdlJiBjaGlsZCh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKLSAgICAgICAg
QVNTRVJUKGkgPCAzKTsKKyAgICAgICAgQVNTRVJUKGkgPCBBZGphY2VuY3lMaXN0U2l6ZSk7CiAg
ICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1tp
XTsKICAgICB9ICAgIAogICAgIAogICAgIEVkZ2UmIGNoaWxkKHVuc2lnbmVkIGkpCiAgICAgewot
ICAgICAgICBBU1NFUlQoaSA8IDMpOworICAgICAgICBBU1NFUlQoaSA8IEFkamFjZW5jeUxpc3RT
aXplKTsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBt
X3dvcmRzW2ldOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldENoaWxkKHVuc2lnbmVkIGksIEVk
Z2Ugbm9kZVVzZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpIDwgMzApOworICAgICAgICBBU1NF
UlQoaSA8IEFkamFjZW5jeUxpc3RTaXplKTsKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhl
ZCk7CiAgICAgICAgIG1fd29yZHNbaV0gPSBub2RlVXNlOwogICAgIH0KQEAgLTE1MCw3ICsxNTIs
NyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBFZGdlIG1fd29yZHNbM107
CisgICAgRWRnZSBtX3dvcmRzW0FkamFjZW5jeUxpc3RTaXplXTsKICNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgS2luZCBtX2tpbmQ7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsMTAgKzk1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHByZXBhcmVUb1BhcnNl
QmxvY2soKTsKICAgICAvLyBQYXJzZSBhIHNpbmdsZSBiYXNpYyBibG9jayBvZiBieXRlY29kZSBp
bnN0cnVjdGlvbnMuCiAgICAgYm9vbCBwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KTsKLSAgICAv
LyBGaW5kIHJlYWNoYWJsZSBjb2RlIGFuZCBzZXR1cCBwcmVkZWNlc3NvciBsaW5rcyBpbiB0aGUg
Z3JhcGgncyBCYXNpY0Jsb2Nrcy4KLSAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOwot
ICAgIC8vIEVucXVldWUgYSBibG9jayBvbnRvIHRoZSB3b3JrbGlzdCwgaWYgbmVjZXNzYXJ5Lgot
ICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0
LCBCbG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3Nvcik7CiAgICAgLy8gTGluayBibG9jayBz
dWNjZXNzb3JzLgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmxvY2tJ
bmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxVbmxp
bmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9zc2libGVU
YXJnZXRzKTsKQEAgLTI1ODUsNDEgKzI1ODEsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5r
QmxvY2tzKFZlY3RvcjxVCiAgICAgfQogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVT
dWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxv
Y2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKLXsKLSAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgPSBtX2dyYXBoLm1fYmxvY2tzW3N1Y2Nlc3NvckluZGV4XS5nZXQoKTsKLSAgICBp
ZiAoIXN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUpIHsKLSAgICAgICAgc3VjY2Vzc29yLT5pc1JlYWNo
YWJsZSA9IHRydWU7Ci0gICAgICAgIHdvcmtsaXN0LmFwcGVuZChzdWNjZXNzb3JJbmRleCk7Ci0g
ICAgfQotICAgIAotICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5k
ZXgpOwotfQotCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQot
ewotICAgIFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7Ci0gICAgd29ya2xpc3QuYXBw
ZW5kKDApOwotICAgIG1fZ3JhcGgubV9ibG9ja3NbMF0tPmlzUmVhY2hhYmxlID0gdHJ1ZTsKLSAg
ICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBCbG9ja0luZGV4IGluZGV4
ID0gd29ya2xpc3QubGFzdCgpOwotICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAg
ICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbaW5kZXhd
LmdldCgpOwotICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGlua2VkKTsKLSAgICAgICAgCi0gICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICBBU1NFUlQo
bm9kZS5pc1Rlcm1pbmFsKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaXNKdW1wKCkp
Ci0gICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2Vu
QmxvY2tJbmRleCgpKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7Ci0gICAg
ICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJ
bmRleCgpKTsKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5v
ZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpidWlsZE9wZXJhbmRNYXBzSWZOZWNlc3NhcnkoKQogewogICAgIGlmICht
X2hhdmVCdWlsdE9wZXJhbmRNYXBzKQpAQCAtMjgzMSw3ICsyNzkyLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2UoKQogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAKICAgICBsaW5rQmxvY2tz
KGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2NrcywgaW5saW5lU3RhY2tFbnRyeS5tX2Js
b2NrTGlua2luZ1RhcmdldHMpOwotICAgIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOworICAgIG1f
Z3JhcGguZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQogICAgIGRhdGFMb2coIlByb2Nlc3NpbmcgbG9jYWwgdmFyaWFibGUg
cGhpcy5cbiIpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
QVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
QVBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAg
ICB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBt
X2NvdW50ID0gMDsKQEAgLTY1LDEyICs2NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2No
YW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHBlcmZvcm1Gb3J3YXJkQ0ZBKCk7CiAgICAgICAg
IH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgcGVyZm9ybUJsb2NrQ0ZBKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCkKICAgICB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCkKICAgICAg
ICAgICAgIHJldHVybjsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CkBAIC0xMjYsOSArMTMwLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotdm9pZCBwZXJmb3Jt
Q0ZBKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUNGQShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAg
cnVuUGhhc2U8Q0ZBUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q0ZBUGhhc2U+
KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3
ICszOSw3IEBAIGNsYXNzIEdyYXBoOwogLy8gdGhlIGNvZGUgYmxvY2suIEl0J3MgYWxzbyByZXNw
b25zaWJsZSBmb3IgaWRlbnRpZnlpbmcgZGVhZCBjb2RlLCBhbmQgaW4gdGhlCiAvLyBmdXR1cmUg
c2hvdWxkIGJlIHVzZWQgYXMgYSBob29rIGZvciBjb25zdGFudCBwcm9wYWdhdGlvbi4KIAotdm9p
ZCBwZXJmb3JtQ0ZBKEdyYXBoJik7Citib29sIHBlcmZvcm1DRkEoR3JhcGgmKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVk
ZSAiREZHUGhhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBDRkdTaW1wbGlmaWNhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBD
RkdTaW1wbGlmaWNhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFw
aCwgIkNGRyBzaW1wbGlmaWNhdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1
bigpCisgICAgeworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgu
bV9ibG9ja3Muc2l6ZSgpOyArKyBibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYg
KCFibG9jay0+aXNSZWFjaGFibGUpIHsKKyAgICAgICAgICAgICAgICAvLyBLaWxsIHRoZSB1bnJl
YWNoYWJsZSBibG9jay4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyAxKSBS
ZW1vdmUgaXRzIHJlZmVyZW5jZXMgdG8gb3RoZXIgYmxvY2tzLgorICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2Jsb2NrKSB7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUmIHBoaU5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5waGlzW2ldXTsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IEFkamFjZW5jeUxp
c3RTaXplOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5jaGls
ZHJlbi5jaGlsZChqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYocGhpTm9kZS5jaGlsZHJlbi5jaGlsZChq
KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gMikgS2lsbCB0aGUgYmxvY2sKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7CisgICAgICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobV9ncmFwaFtibG9jay0+bGFz
dCgpXS5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEp1bXA6IHsKKyAgICAgICAgICAgICAgICAv
LyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCisgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9w
cmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1f
Z3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3Nv
cnNbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgID09IGJsb2NrSW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3Nvcihi
bG9jaywgMCksIE5vQmxvY2spOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IEJsb2NrIG9ubHkgaGFzIGEganVtcCAtPiByZW1vdmUuIFRoaXMgaXMgdHJpY2t5IHRo
b3VnaCBiZWNhdXNlIG9mCisgICAgICAgICAgICAgICAgLy8gbGl2ZW5lc3MuIFdoYXQgd2UgcmVh
bGx5IHdhbnQgaXMgdG8gc2xhbSBpbiBhIHBoYW50b20gYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAg
ICAgICAgICAgICAvLyBibG9jaywgYWZ0ZXIgdGhlIHRlcm1pbmFsLiBCdXQgd2UgY2FuJ3Qgcmln
aHQgbm93LiA6LSgKKyAgICAgICAgICAgICAgICAvLyBJZGVhOiB3aGF0IGlmIEkgc2xhbSB0aGUg
Z2hvc3RpZXMgaW50byBteSBzdWNjZXNzb3I/IE5vcGUsIHRoYXQncworICAgICAgICAgICAgICAg
IC8vIHN1Ym9wdGltYWwsIGJlY2F1c2UgaWYgbXkgc3VjY2Vzc29yIGhhcyBtdWx0aXBsZSBwcmVk
ZWNlc3NvcnMgdGhlbiB3ZSdsbAorICAgICAgICAgICAgICAgIC8vIGJlIGtlZXBpbmcgYWxpdmUg
dGhpbmdzIG9uIG90aGVyIHByZWRlY2Vzc29yIGVkZ2VzIHVubmVjZXNzYXJpbHkuCisgICAgICAg
ICAgICAgICAgLy8gV2hhdCB3ZSByZWFsbHkgbmVlZCBpcyB0aGUgbm90aW9uIG9mIGVuZC1vZi1i
bG9jayBnaG9zdGllcyEKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAgICAgICAg
ICAgLy8gQnJhbmNoIG9uIGNvbnN0YW50IC0+IGpldHRpc29uIHRoZSBub3QtdGFrZW4gYmxvY2sg
YW5kIG1lcmdlLgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW21fZ3JhcGhbYmxvY2stPmxh
c3QoKV0uY2hpbGQxKCldLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9v
bCBjb25kaXRpb24gPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fZ3JhcGhbYmxvY2stPmxh
c3QoKV0uY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fYmxvY2tzWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29y
Rm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pXS0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpCisg
ICAgICAgICAgICAgICAgICAgICAgICA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
ZXJnZUJsb2NrcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJs
b2NrLCBjb25kaXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3Vj
Y2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuQmxv
Y2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24p
OworICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCBub3RUYWtlbkJsb2NrSW5kZXgg
PSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgIWNvbmRpdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dy
YXBoW2Jsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0u
Y29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbYmxvY2stPmxhc3Qo
KV0uc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9ncmFwaFtibG9jay0+bGFzdCgpXS5yZWZDb3VudCgpID09IDEpOworICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2Nr
KGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4
IGp1bXBOb2RlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguYXBwZW5kKE5vZGUoSnVtcCwgT3BJbmZvKHRha2VuQmxvY2tJbmRleCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmQoanVtcE5vZGVJbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAvLyBCcmFuY2ggdG8gc2FtZSBkZXN0aW5hdGlvbiAtPiBq
dW1wLgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgY3VycmVudGx5IG5vdCBi
ZSBoaXQgYmVjYXVzZSBvZiB0aGUgbGFjayBvZiBqdW1wLW9ubHkKKyAgICAgICAgICAgICAgICAv
LyBibG9jayBzaW1wbGlmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5zdWNj
ZXNzb3IoYmxvY2ssIDApID09IG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAxKSkgeworICAgICAg
ICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3Nvcihi
bG9jaywgMCksIE5vQmxvY2spOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGNoYW5nZWQpIHsKKyAgICAgICAgICAgIC8vIElm
IHdlIGNoYW5nZWQgdGhlIGdyYXBoLCB0aGVuIHNvbWUgYmxvY2tzIG1heSBoYXZlIGJlY29tZSB1
bnJlYWNoYWJsZS4gTmVlZCB0bworICAgICAgICAgICAgLy8gcGVyZm9ybSBhIGJsb2NrIEdDIG9m
IHNvcnRzLgorICAgICAgICAgICAgbV9ncmFwaC5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgTm9kZUluZGV4IGZpbmRPcGVyYW5kU291cmNlKGNvbnN0IE9wZXJhbmRzPE5vZGVJbmRl
eCwgTm9kZUluZGV4VHJhaXRzPiYgdmFyaWFibGVzLCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSB2YXJpYWJsZXMub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm4gTm9Ob2Rl
OworICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0gU2V0TG9jYWwpCisgICAg
ICAgICAgICByZXR1cm4gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7CisgICAg
ICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBjcmVhdGVP
cGVyYW5kS2VlcEFsaXZlKEJhc2ljQmxvY2sqIGJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGguaXNDYXB0dXJlZChvcGVy
YW5kKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGZpbmRPcGVyYW5kU291cmNlKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG9wZXJhbmQpOworICAg
ICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgaWYgKCFtX2dyYXBoW25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpICE9IFNldExv
Y2FsKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5oYXNSZXN1bHQoKSk7Cisg
ICAgICAgIE5vZGVJbmRleCBwaGFudG9tTm9kZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAg
ICAgIE5vZGUgcGhhbnRvbShQaGFudG9tLCBjb2RlT3JpZ2luLCBub2RlSW5kZXgpOworICAgICAg
ICBtX2dyYXBoLmFwcGVuZChwaGFudG9tKTsKKyAgICAgICAgbV9ncmFwaC5yZWYocGhhbnRvbU5v
ZGVJbmRleCk7CisgICAgICAgIHJldHVybiBwaGFudG9tTm9kZUluZGV4OworICAgIH0KKyAgICAK
KyAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBibG9jay0+YXBwZW5kKGNy
ZWF0ZU9wZXJhbmRLZWVwQWxpdmUoYmxvY2ssIGNvZGVPcmlnaW4sIG9wZXJhbmQpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBmaXhQb3NzaWJsZUdldExvY2FsKEJhc2ljQmxvY2sqIGJsb2NrLCBF
ZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwor
ICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKG1fZ3JhcGguaXNDYXB0dXJlZChjaGlsZC5sb2NhbCgpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgTm9kZUluZGV4IG9yaWdpbmFsTm9kZUluZGV4ID0gYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLmxvY2FsKCkpOworICAgICAgICBBU1NFUlQo
b3JpZ2luYWxOb2RlSW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAgTm9kZSogb3JpZ2luYWxOb2Rl
ID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5kZXhdOworICAgICAgICBBU1NFUlQob3JpZ2luYWxO
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgLy8gUG9zc2liaWxpdGllczoKKyAgICAg
ICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZhbHVlIG9m
IHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5CisgICAgICAgIC8vICAgICBhdmFpbGFibGUg
aW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2RlSW5kZXguCisgICAgICAgIC8vIEdl
dExvY2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhp
bmcgdGhhdCB0aGUgZmlyc3QKKyAgICAgICAgLy8gICAgIGJsb2NrIGFsc28gZ2V0cy4KKyAgICAg
ICAgLy8gUGhpIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24g
YW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdCBibG9jaworICAgICAgICAvLyAgICAgd2FzIGFsc28g
YXNraW5nIGZvciBrZWVwLWFsaXZlIG9uLgorICAgICAgICAvLyBTZXRBcmd1bWVudCAtPiB0aGUg
c2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9wZXJhbmQgdGhhdCB0
aGUKKyAgICAgICAgLy8gICAgIGZpcnN0IGJsb2NrIHdhcyBrZWVwaW5nIGFsaXZlIGJ5IHZpcnR1
ZSBvZiB0aGUgZmlyc3RCbG9jayBiZWluZyB0aGUgcm9vdCBhbmQKKyAgICAgICAgLy8gICAgIHRo
ZSBvcGVyYW5kIGJlaW5nIGFuIGFyZ3VtZW50LgorICAgICAgICAvLyBGbHVzaCAtPiB0aGUgc2Vj
b25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9wZXJhbmQgdGhhdCB0aGUg
Zmlyc3QKKyAgICAgICAgLy8gICAgIGJsb2NrIHdhcyBmb3JjaW5nIHRvIGJlIGFsaXZlLCBzbyB0
aGUgc2Vjb25kIGJsb2NrIHNob3VsZCByZWZlciBjaGlsZCBvZgorICAgICAgICAvLyAgICAgdGhl
IGZsdXNoLgorICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5vcCgpID09IEZsdXNoKSB7CisgICAg
ICAgICAgICBvcmlnaW5hbE5vZGVJbmRleCA9IG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkuaW5kZXgo
KTsKKyAgICAgICAgICAgIG9yaWdpbmFsTm9kZSA9ICZtX2dyYXBoW29yaWdpbmFsTm9kZUluZGV4
XTsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9yaWdpbmFsTm9kZS0+b3AoKSkgeworICAg
ICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICBFZGdlIG5ld0VkZ2UgPSBvcmlnaW5h
bE5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgRWRnZSBvbGRFZGdlID0gZWRnZTsKKyAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKG5ld0VkZ2UpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihv
bGRFZGdlKTsKKyAgICAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgY2FzZSBQaGk6Cisg
ICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsKKyAgICAgICAgICAgIEVkZ2UgbmV3RWRnZSA9IGVk
Z2U7CisgICAgICAgICAgICBFZGdlIG9sZEVkZ2UgPSBlZGdlOworICAgICAgICAgICAgbmV3RWRn
ZS5zZXRJbmRleChvcmlnaW5hbE5vZGVJbmRleCk7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihu
ZXdFZGdlKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CisgICAgICAgICAg
ICBlZGdlID0gbmV3RWRnZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgamV0dGlzb25CbG9jayhC
bG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0dGlzb25lZEJsb2NrSW5kZXgsIENv
ZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBCYXNp
Y0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
amV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytp
KQorICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShibG9jaywgYm91bmRhcnlDb2RlT3JpZ2lu
LCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
amV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQor
ICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShibG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBp
KTsKKyAgICAgICAgCisgICAgICAgIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoYmxvY2tJbmRl
eCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeEpldHRp
c29uZWRQcmVkZWNlc3NvcnMoQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRp
c29uZWRCbG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0
aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGV4XS5nZXQo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+bV9w
cmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChqZXR0aXNvbmVkQmxv
Y2stPm1fcHJlZGVjZXNzb3JzW2ldICE9IGJsb2NrSW5kZXgpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldID0g
amV0dGlzb25lZEJsb2NrLT5tX3ByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBqZXR0
aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25l
ZEJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggcGhpTm9k
ZUluZGV4ID0gamV0dGlzb25lZEJsb2NrLT5waGlzW2ldOworICAgICAgICAgICAgTm9kZSYgcGhp
Tm9kZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBteU5v
ZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwaGlOb2RlLmxvY2FsKCkp
OworICAgICAgICAgICAgQVNTRVJUKG15Tm9kZUluZGV4ICE9IE5vTm9kZSk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgQWRqYWNlbmN5TGlzdFNpemU7ICsraikKKyAgICAg
ICAgICAgICAgICByZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UobXlOb2RlSW5kZXgs
IHBoaU5vZGUsIGopOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcmVtb3ZlUG90
ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKE5vZGVJbmRleCBteU5vZGVJbmRleCwgTm9kZSYgcGhp
Tm9kZSwgdW5zaWduZWQgZWRnZUluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKHBoaU5vZGUuY2hp
bGRyZW4uY2hpbGQoZWRnZUluZGV4KS5pbmRleFVuY2hlY2tlZCgpICE9IG15Tm9kZUluZGV4KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2dyYXBoLmRlcmVmKG15Tm9kZUluZGV4KTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZWRnZUluZGV4OyBpIDwgQWRqYWNlbmN5TGlzdFNp
emUgLSAxOyArK2kpCisgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLnNldENoaWxkKGksIHBo
aU5vZGUuY2hpbGRyZW4uY2hpbGQoaSArIDEpKTsKKyAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5z
ZXRDaGlsZChBZGphY2VuY3lMaXN0U2l6ZSAtIDEsIEVkZ2UoKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgbWVyZ2VCbG9ja3MoCisgICAgICAgIEJsb2NrSW5kZXggZmlyc3RCbG9ja0luZGV4LCBC
bG9ja0luZGV4IHNlY29uZEJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0dGlzb25lZEJsb2NrSW5k
ZXgpCisgICAgeworICAgICAgICAvLyBUaGlzIHdpbGwgYWRkIGFsbCBvZiB0aGUgbm9kZXMgaW4g
c2Vjb25kQmxvY2sgdG8gZmlyc3RCbG9jaywgYnV0IGluIHNvIGRvaW5nCisgICAgICAgIC8vIGl0
IHdpbGwgYWxzbyBlbnN1cmUgdGhhdCBhbnkgR2V0TG9jYWxzIGZyb20gdGhlIHNlY29uZCBibG9j
ayB0aGF0IHJlZmVyIHRvCisgICAgICAgIC8vIFNldExvY2FscyBpbiB0aGUgZmlyc3QgYmxvY2sg
YXJlIHJlbGlua2VkLiBJZiBqZXR0aXNvbmVkQmxvY2sgaXMgbm90IE5vQmxvY2ssCisgICAgICAg
IC8vIHRoZW4gUGhhbnRvbXMgYXJlIGluc2VydGVkIGZvciBhbnl0aGluZyB0aGF0IHRoZSBqZXR0
aXNvbmVkQmxvY2sgd291bGQgaGF2ZQorICAgICAgICAvLyBrZXB0IGFsaXZlLgorICAgICAgICAK
KyAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbZmlyc3RC
bG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgQmFzaWNCbG9jayogc2Vjb25kQmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW3NlY29uZEJsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAKKyAgICAgICAg
Ly8gUmVtb3ZlIHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJsb2NrIHNpbmNlIHdlIGRvbid0IG5lZWQg
aXQgYW55bW9yZS4gV2VsbCwgd2UgZG9uJ3QKKyAgICAgICAgLy8gcmVhbGx5IHJlbW92ZSBpdDsg
d2UgYWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRvbS4KKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGhbZmlyc3RCbG9jay0+bGFzdCgpXS5pc1Rlcm1pbmFsKCkpOworICAgICAgICBDb2RlT3JpZ2lu
IGJvdW5kYXJ5Q29kZU9yaWdpbiA9IG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5jb2RlT3Jp
Z2luOworICAgICAgICBtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uc2V0T3BBbmREZWZhdWx0
RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3Qo
KV0ucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgCisgICAgICAgIGlmIChqZXR0aXNvbmVkQmxv
Y2tJbmRleCAhPSBOb0Jsb2NrKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVk
QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGV4XS5nZXQoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGltZSB0byBpbnNlcnQgZ2hvc3RpZXMgZm9yIHRo
aW5ncyB0aGF0IG5lZWQgdG8gYmUga2VwdCBhbGl2ZSBpbiBjYXNlIHdlIE9TUgorICAgICAgICAg
ICAgLy8gZXhpdCBwcmlvciB0byBoaXR0aW5nIHRoZSBmaXJzdEJsb2NrJ3MgdGVybWluYWwsIGFu
ZCBlbmQgdXAgZ29pbmcgZG93biBhCisgICAgICAgICAgICAvLyBkaWZmZXJlbnQgcGF0aCB0aGFu
IHNlY29uZEJsb2NrLgorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCk7ICsraSkKKyAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0QmxvY2ssIGJv
dW5kYXJ5Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkpOworICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkxvY2FscygpOyArK2kpCisgICAgICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShmaXJz
dEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGkpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5waGlzLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgZmlyc3RCbG9jay0+cGhpcy5hcHBlbmQoc2Vjb25kQmxvY2stPnBoaXNb
aV0pOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9j
ay0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBzZWNv
bmRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5k
ZXhdOworICAgICAgICAgICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChub2RlLm9wKCkgPT0gUGhhbnRvbSAmJiBub2RlLmNoaWxkMSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUmIHBvc3NpYmxlTG9jYWxPcCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV07CisgICAgICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZUxvY2FsT3AuaGFzTG9jYWwo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHNldExvY2FsSW5kZXggPQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKHBvc3NpYmxlTG9jYWxPcC5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUmIHNldExvY2FsID0gbV9ncmFwaFtzZXRMb2NhbEluZGV4XTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzZXRMb2NhbC5vcCgpID09IFNldExvY2FsKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRWRnZSBuZXdFZGdlID0gc2V0TG9jYWwuY2hpbGQxKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRWRnZSBvbGRFZGdlID0gbm9kZS5jaGlsZDEoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG9sZEVkZ2UpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQxKG5ld0VkZ2UpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBh
IEdldExvY2FsLCB0aGVuIHdlIG1pZ2h0IGxpa2UgdG8gZml4IGl0LgorICAgICAgICAgICAgICAg
IGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hp
bGRyZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KQorICAgICAgICAg
ICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBtX2dyYXBoLm1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5v
ZGUuY2hpbGQxKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChm
aXJzdEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUuY2hpbGQyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxl
R2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRyZW4uY2hpbGQz
KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKG5vZGVJbmRleCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbCA9IHNlY29u
ZEJsb2NrLT52YXJpYWJsZXNBdFRhaWw7CisgICAgICAgIGZpcnN0QmxvY2stPnZhbHVlc0F0VGFp
bCA9IHNlY29uZEJsb2NrLT52YWx1ZXNBdFRhaWw7CisgICAgICAgIAorICAgICAgICAvLyBGaXgg
dGhlIHByZWRlY2Vzc29ycyBvZiBteSBuZXcgc3VjY2Vzc29ycy4gVGhpcyBpcyB0cmlja3ksIHNp
bmNlIHdlIGFyZSBnb2luZyB0byByZXNldAorICAgICAgICAvLyBhbGwgcHJlZGVjZXNzb3JzIGFu
eXdheSBkdWUgdG8gcmVhY2hhYmlsaXR5IGFuYWx5c2lzLiBCdXQgd2UgbmVlZCB0byBmaXggdGhl
CisgICAgICAgIC8vIHByZWRlY2Vzc29ycyBlYWdlcmx5IHRvIGVuc3VyZSB0aGF0IHdlIGtub3cg
d2hhdCB0aGV5IGFyZSBpbiBjYXNlIHRoZSBuZXh0IGJsb2NrIHdlCisgICAgICAgIC8vIGNvbnNp
ZGVyIGluIHRoaXMgcGhhc2Ugd2lzaGVzIHRvIHF1ZXJ5IHRoZSBwcmVkZWNlc3NvcnMgb2Ygb25l
IG9mIHRoZSBibG9ja3Mgd2UKKyAgICAgICAgLy8gYWZmZWN0ZWQuCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhmaXJzdEJsb2NrKTsgaS0tOykgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBo
LnN1Y2Nlc3NvcihmaXJzdEJsb2NrLCBpKV0uZ2V0KCk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraikgewor
ICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzW2pdID09IHNlY29u
ZEJsb2NrSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3Nv
cnNbal0gPSBmaXJzdEJsb2NrSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIEZpeCB0aGUgcHJlZGVjZXNzb3JzIG9mIG15IGZvcm1lciBzdWNjZXNz
b3JzLiBBZ2Fpbiwgd2UnZCByYXRoZXIgbm90IGRvIHRoaXMsIGJ1dCBpdCdzCisgICAgICAgIC8v
IGFuIHVuZm9ydHVuYXRlIG5lY2Vzc2l0eS4gU2VlIGFib3ZlIGNvbW1lbnQuCisgICAgICAgIGlm
IChqZXR0aXNvbmVkQmxvY2tJbmRleCAhPSBOb0Jsb2NrKQorICAgICAgICAgICAgZml4SmV0dGlz
b25lZFByZWRlY2Vzc29ycyhmaXJzdEJsb2NrSW5kZXgsIGpldHRpc29uZWRCbG9ja0luZGV4KTsK
KyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbc2Vjb25kQmxvY2tJbmRleF0uY2xl
YXIoKTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihHcmFwaCYg
Z3JhcGgpCit7CisgICAgcmV0dXJuIHJ1blBoYXNlPENGR1NpbXBsaWZpY2F0aW9uUGhhc2U+KGdy
YXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1w
bGlmaWNhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2VfaAorI2RlZmluZSBERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgR3JhcGg7CisKKy8vIENGRyBzaW1wbGlmaWNhdGlvbjoKKy8vCisvLyBqdW1wIHRvIHNp
bmdsZSBwcmVkZWNlc3NvciAtPiBtZXJnZSBibG9ja3MKKy8vIGJyYW5jaCBvbiBjb25zdGFudCAt
PiBqdW1wCisvLyBicmFuY2ggdG8gc2FtZSBibG9ja3MgLT4ganVtcAorLy8ganVtcC1vbmx5IGJs
b2NrIC0+IHJlbW92ZQorLy8ga2lsbCBkZWFkIGNvZGUKKworYm9vbCBwZXJmb3JtQ0ZHU2ltcGxp
ZmljYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMCArNDUsMTEgQEAgcHVibGljOgogICAgICAgICAg
ICAgbV9yZXBsYWNlbWVudHNbaV0gPSBOb05vZGU7CiAgICAgfQogICAgIAotICAgIHZvaWQgcnVu
KCkKKyAgICBib29sIHJ1bigpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrID0g
MDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9jaykKLSAgICAgICAgICAg
IHBlcmZvcm1CbG9ja0NTRSgqbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja10pOworICAgICAgICAgICAg
cGVyZm9ybUJsb2NrQ1NFKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tdLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7IC8vIE1heWJlIHdlJ2xsIG5lZWQgdG8gbWFrZSB0aGlzIHJlYXNvbiBhYm91
dCB3aGV0aGVyIGl0IGNoYW5nZWQgdGhlIGdyYXBoIGluIGFuIGFjdGlvbmFibGUgd2F5PwogICAg
IH0KICAgICAKIHByaXZhdGU6CkBAIC0xMzksNTIgKzE0MCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmlj
YWwoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICBQcmVkaWN0ZWRUeXBlIHJp
Z2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIHJldHVy
biBpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KTsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBsb2dpY2FsTm90SXNQdXJlKE5vZGUmIG5vZGUpCi0gICAg
ewotICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuIGlzQm9vbGVhblByZWRpY3Rpb24ocHJl
ZGljdGlvbikgfHwgIXByZWRpY3Rpb247Ci0gICAgfQotICAgIAotICAgIGJvb2wgYnlWYWxJc1B1
cmUoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgJiYgKChub2RlLm9wKCkg
PT0gUHV0QnlWYWwgfHwgbm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpCi0gICAgICAgICAgICAg
ICAgPyBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgIDogaXNBY3Rpb25hYmxlQXJyYXlQ
cmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSk7Ci0gICAgfQot
ICAgIAotICAgIGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsK
LSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgaWYgKG5v
ZGUuZmxhZ3MoKSAmIE5vZGVDbG9iYmVyc1dvcmxkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGlmICghKG5vZGUuZmxhZ3MoKSAmIE5vZGVNaWdodENsb2JiZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAg
ICBjYXNlIFZhbHVlQWRkOgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAgICBjYXNl
IENvbXBhcmVMZXNzRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6Ci0gICAgICAgIGNh
c2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgICAg
ICByZXR1cm4gIWlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpOwotICAgICAgICBjYXNlIExvZ2lj
YWxOb3Q6Ci0gICAgICAgICAgICByZXR1cm4gIWxvZ2ljYWxOb3RJc1B1cmUobm9kZSk7Ci0gICAg
ICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICByZXR1cm4gIWJ5VmFsSXNQdXJlKG5vZGUp
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSWYgYnkgc29tZSBvZGRpdHkgd2UgaGl0IHRoaXMg
Y2FzZSBpbiByZWxlYXNlIGJ1aWxkIGl0J3Mgc2FmZXIgdG8gaGF2ZSBDU0UgYXNzdW1lIHRoZSB3
b3JzdC4KLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBOb2RlSW5kZXggaW1wdXJlQ1NFKE5v
ZGUmIG5vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2FsaXpl
KG5vZGUuY2hpbGQxKCkpOwpAQCAtMjE1LDcgKzE3MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9i
YmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMjM4LDcgKzE5Myw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTI1NCwxNCArMjA5LDE0IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAg
ICAgICAgICBpZiAoIWJ5VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAgICAgIGlmICghbV9n
cmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25p
Y2FsaXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAg
ICAgICAgICAgICAgIGlmICghYnlWYWxJc1B1cmUobm9kZSkpCisgICAgICAgICAgICAgICAgaWYg
KCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9Ob2RlOwogICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBj
YW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNoaWxkMikpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7CkBAIC0yODAsNyAr
MjM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBBIHB1c2ggY2Fubm90IGFmZmVj
dCBwcmV2aW91c2x5IGV4aXN0aW5nIGVsZW1lbnRzIGluIHRoZSBhcnJheS4KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNs
b2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJz
V29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzMxLDcgKzI4Niw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAg
ICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChieVZhbElzUHVy
ZShub2RlKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUp
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBp
dCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAgICAgICAgICAgIC8vIGlu
dGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVj
dHVyZQogICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCkBAIC0zNDAsNyArMjk1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxk
KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQpAQCAtMzc3LDcgKzMzMiw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSkgewor
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2lu
ZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgs
IHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQogICAgICAg
ICAgICAgICAgICAgICAvLyBjaGFuZ2UuCkBAIC0zODYsNyArMzQxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkBAIC00MTYsNyArMzcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxp
YXM6Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5
IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdz
IGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAg
ICAgIC8vIGNoYW5nZS4KQEAgLTQyNSw3ICszODAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTQ2MSwxMiArNDE2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAg
ICAgIGlmIChpc0ZpeGVkSW5kZXhlZFN0b3JhZ2VPYmplY3RQcmVkaWN0aW9uKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSAmJiBieVZhbElzUHVyZShub2RlKSkKKyAgICAgICAg
ICAgICAgICBpZiAoaXNGaXhlZEluZGV4ZWRTdG9yYWdlT2JqZWN0UHJlZGljdGlvbihtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkgJiYgbV9ncmFwaC5ieVZhbElzUHVyZShub2Rl
KSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJl
cnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3Js
ZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC02MTAsNiArNTY1LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBJc1N0cmluZzoKICAgICAgICAgY2FzZSBJc09iamVjdDoKICAgICAgICAg
Y2FzZSBJc0Z1bmN0aW9uOgorICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCkBAIC02MzUsMTggKzU5MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29tcGFy
ZUdyZWF0ZXI6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICAgICAgY2FzZSBD
b21wYXJlRXE6IHsKLSAgICAgICAgICAgIGlmIChpc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKSkg
ewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShu
b2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYg
aXNQcmVkaWN0ZWROdW1lcmljYWwobV9ncmFwaFtyZXBsYWNlbWVudEluZGV4XSkpCi0gICAgICAg
ICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHJlcGxhY2VtZW50SW5kZXgpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIExvZ2ljYWxOb3Q6IHsKLSAgICAgICAgICAgIGlmIChsb2dpY2FsTm90SXNQdXJlKG5v
ZGUpKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChub2Rl
KSkgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNT
RShub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUg
JiYgbG9naWNhbE5vdElzUHVyZShtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKKyAgICAgICAg
ICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgbV9ncmFwaC5pc1ByZWRp
Y3RlZE51bWVyaWNhbChtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKICAgICAgICAgICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJbmRleCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTY1OSwxMiArNjA2LDEyIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAg
ICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlW
YWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxM
b2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0
QnlWYWw6Ci0gICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkgJiYgZ2V0QnlWYWxMb2Fk
RWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCkp
ICE9IE5vTm9kZSkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpICYm
IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGls
ZDIoKS5pbmRleCgpKSAhPSBOb05vZGUpCiAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChQdXRC
eVZhbEFsaWFzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC03MDQsMTQg
KzY1MSwxOSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgfQogICAgIAotICAgIHZvaWQgcGVyZm9y
bUJsb2NrQ1NFKEJhc2ljQmxvY2smIGJsb2NrKQorICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJh
c2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAmYmxvY2s7
CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgh
YmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IExhc3ROb2RlVHlwZTsgKytpKQogICAgICAgICAgICAgbV9sYXN0U2VlbltpXSA9IFVJTlRf
TUFYOwogCi0gICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8
IGJsb2NrLnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgbV9jb21waWxl
SW5kZXggPSBibG9ja1ttX2luZGV4SW5CbG9ja107CisgICAgICAgIGZvciAobV9pbmRleEluQmxv
Y2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2sp
IHsKKyAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgICAgIHBlcmZvcm1Ob2RlQ1NFKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTcyMyw5ICs2NzUsOSBAQCBwcml2YXRlOgogICAgIEZpeGVk
QXJyYXk8dW5zaWduZWQsIExhc3ROb2RlVHlwZT4gbV9sYXN0U2VlbjsKIH07CiAKLXZvaWQgcGVy
Zm9ybUNTRShHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoKQogewot
ICAgIHJ1blBoYXNlPENTRVBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPENTRVBo
YXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGEgd2lkZSByYW5nZSBvZiBzdWJleHByZXNz
aW9uIHNpbWlsYXJpdGllcy4gSXQncyBrbm93biB0byBwcm9kdWNlIGJpZyB3aW5zCiAvLyBvbiBh
IGZldyBiZW5jaG1hcmtzLCBhbmQgaXMgcmVsYXRpdmVseSBjaGVhcCB0byBydW4uCiAKLXZvaWQg
cGVyZm9ybUNTRShHcmFwaCYpOworYm9vbCBwZXJmb3JtQ1NFKEdyYXBoJik7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw5IEBACiAjZGVmaW5lIERGR19FTkFC
TEUoREZHX0ZFQVRVUkUpIChkZWZpbmVkIERGR19FTkFCTEVfIyNERkdfRkVBVFVSRSAmJiBERkdf
RU5BQkxFXyMjREZHX0ZFQVRVUkUpCiAKIC8vIEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0
aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMu
Ci0jZGVmaW5lIERGR19FTkFCTEVfREVCVUdfVkVSQk9TRSAwCisjZGVmaW5lIERGR19FTkFCTEVf
REVCVUdfVkVSQk9TRSAxCiAvLyBFbWl0IGR1bXBzIGR1cmluZyBwcm9wYWdhdGlvbiwgaW4gYWRk
aXRpb24gdG8ganVzdCBhZnRlci4KLSNkZWZpbmUgREZHX0VOQUJMRV9ERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFIDAKKyNkZWZpbmUgREZHX0VOQUJMRV9ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
IDEKIC8vIEVtaXQgbG9nZ2luZyBmb3IgT1NSIGV4aXQgdmFsdWUgcmVjb3ZlcmllcyBhdCBldmVy
eSBub2RlLCBub3QganVzdCBub2RlcyB0aGF0CiAvLyBhY3R1YWxseSBoYXMgc3BlY3VsYXRpb24g
Y2hlY2tzLgogI2RlZmluZSBERkdfRU5BQkxFX1ZFUkJPU0VfVkFMVUVfUkVDT1ZFUklFUyAwCkBA
IC02Miw3ICs2Miw3IEBACiAvLyBFbWl0IGEgYnJlYWtwb2ludCBpbnRvIHRoZSBzcGVjdWxhdGlv
biBmYWlsdXJlIGNvZGUuCiAjZGVmaW5lIERGR19FTkFCTEVfSklUX0JSRUFLX09OX1NQRUNVTEFU
SU9OX0ZBSUxVUkUgMAogLy8gTG9nIGV2ZXJ5IHNwZWN1bGF0aW9uIGZhaWx1cmUuCi0jZGVmaW5l
IERGR19FTkFCTEVfVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlMVVJFIDAKKyNkZWZpbmUgREZHX0VO
QUJMRV9WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUgMQogLy8gRGlzYWJsZSB0aGUgREZHIEpJ
VCB3aXRob3V0IGhhdmluZyB0byB0b3VjaCBQbGF0Zm9ybS5oCiAjZGVmaW5lIERGR19ERUJVR19M
T0NBTF9ESVNCQUxFIDAKIC8vIEVuYWJsZSBPU1IgZW50cnkgZnJvbSBiYXNlbGluZSBKSVQuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEz
ICs0MywxNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIHJ1bigpCisg
ICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIAogICAgICAgICBBYnN0cmFjdFN0YXRlIHN0YXRlKG1fZ3JhcGgpOwogICAgICAgICBJbnNl
cnRpb25TZXQ8Tm9kZUluZGV4PiBpbnNlcnRpb25TZXQ7CiAgICAgICAgIAogICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFibG9jay0+
Y2ZhRm91bmRDb25zdGFudHMpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwpAQCAtNjAsMjkgKzY0LDQxIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7CiAgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4
XTsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKQotICAgICAgICAg
ICAgICAgICAgICB8fCAobm9kZS5mbGFncygpICYgKE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9kZU1p
Z2h0Q2xvYmJlcikpCisgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGguY2xvYmJlcnNXb3Js
ZChub2RlKQogICAgICAgICAgICAgICAgICAgICB8fCBub2RlLmhhc0NvbnN0YW50KCkpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBzdGF0ZS5mb3JOb2RlKG5vZGVJbmRleCkudmFsdWUoKTsKICAgICAgICAgICAgICAgICBpZiAo
IXZhbHVlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBOb2RlIHBoYW50b20oUGhhbnRvbSwgbm9kZS5jb2RlT3JpZ2luKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExv
Y2FsKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm9wKCkgIT0gR2V0TG9jYWwpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0uaGFzUmVzdWx0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBwaGFudG9tLmNoaWxkcmVuID0gbm9kZS5jaGlsZHJl
bjsKICAgICAgICAgICAgICAgICBwaGFudG9tLnJlZigpOworICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZUluZGV4LCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHBoYW50b21Ob2RlSW5kZXggPSBtX2dyYXBoLnNp
emUoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChwaGFudG9tKTsKICAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuYXBwZW5kKGluZGV4SW5CbG9jaywgcGhhbnRvbU5vZGVJbmRl
eCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS5yZXNldCgpOwogICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoKmJsb2NrKTsKKyAgICAgICAgICAgIHN0YXRlLnJlc2V0KCk7CiAg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KIH07CiAK
LXZvaWQgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1D
b25zdGFudEZvbGRpbmcoR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNlPENvbnN0YW50Rm9s
ZGluZ1BoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPENvbnN0YW50Rm9sZGluZ1Bo
YXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgJ
KHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBH
cmFwaDsKIC8vIGluZmVycmVkIGNvbnN0YW50cywgYW5kIHJlcGxhY2VzIHRob3NlIG5vZGVzIHdp
dGggY29uc3RhbnRzIHdoaWxzdCBpbmplY3RpbmcKIC8vIFBoYW50b20gbm9kZXMgdG8ga2VlcCB0
aGUgY2hpbGRyZW4gYWxpdmUgKHdoaWNoIGlzIG5lY2Vzc2FyeSBmb3IgT1NSIGV4aXQpLgogCi12
b2lkIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybUNvbnN0YW50
Rm9sZGluZyhHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQnl0ZUNvZGVQYXJzZXIuaCIKICNpbmNsdWRl
ICJERkdDRkFQaGFzZS5oIgorI2luY2x1ZGUgIkRGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgpAQCAtNjAsMTIgKzYxLDE3IEBAIGlu
bGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICBpZiAoY29tcGlsZU1v
ZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQogICAgICAgICBkZmcucHJlZGljdEFyZ3VtZW50VHlwZXMo
KTsKIAotICAgIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbihkZmcpOwogICAgIHBlcmZv
cm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtRml4dXAoZGZnKTsKLSAg
ICBwZXJmb3JtQ0ZBKGRmZyk7Ci0gICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwotICAg
IHBlcmZvcm1DU0UoZGZnKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9
IGZhbHNlOworICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAgICAgIGNoYW5nZWQgfD0gcGVy
Zm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1DRkdT
aW1wbGlmaWNhdGlvbihkZmcpOworICAgICAgICBwZXJmb3JtQ1NFKGRmZyk7CisgICAgICAgIGlm
ICghY2hhbmdlZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBwZXJmb3JtVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDExNDU1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNv
bnN0IHsgcmV0dXJuIGluZGV4VW5jaGVja2VkKCkgIT0gTm9Ob2RlOyB9CisgICAgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KEVkZ2Ug
b3RoZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSwxMSBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQog
ICAgIHsKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKICAgICAgICAgICAgIGZp
eHVwQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTM1OSw5ICszNjAsOSBAQCBwcml2YXRl
OgogICAgIEluc2VydGlvblNldDxOb2RlSW5kZXg+IG1faW5zZXJ0aW9uU2V0OwogfTsKICAgICAK
LXZvaWQgcGVyZm9ybUZpeHVwKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUZpeHVwKEdyYXBo
JiBncmFwaCkKIHsKLSAgICBydW5QaGFzZTxGaXh1cFBoYXNlPihncmFwaCk7CisgICAgcmV0dXJu
IHJ1blBoYXNlPEZpeHVwUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmgJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIEdyYXBoOwogLy8gRml4
IHBvcnRpb25zIG9mIHRoZSBncmFwaCB0aGF0IGFyZSBpbmVmZmljaWVudCBnaXZlbiB0aGUgcHJl
ZGljdGlvbnMgdGhhdAogLy8gd2UgaGF2ZS4gVGhpcyBzaG91bGQgcnVuIGFmdGVyIHByZWRpY3Rp
b24gcHJvcGFnYXRpb24gYnV0IGJlZm9yZSBDU0UuCiAKLXZvaWQgcGVyZm9ybUZpeHVwKEdyYXBo
Jik7Citib29sIHBlcmZvcm1GaXh1cChHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHOjpQaGFzZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OCw2ICsyNzgsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKCkK
ICAgICBOb2RlSW5kZXggbGFzdE5vZGVJbmRleCA9IE5vTm9kZTsKICAgICBmb3IgKHNpemVfdCBi
ID0gMDsgYiA8IG1fYmxvY2tzLnNpemUoKTsgKytiKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ibG9ja3NbYl0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgZGF0YUxvZygiQmxvY2sgIyV1IChiYyMldSk6ICVzJXNcbiIs
IChpbnQpYiwgYmxvY2stPmJ5dGVjb2RlQmVnaW4sIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIiIDog
IiAoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7
CiAgICAgICAgIGRhdGFMb2coIiAgUGhpIE5vZGVzOlxuIik7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKQEAgLTMwNSw2ICszMDcsOSBA
QCB2b2lkIEdyYXBoOjpkdW1wKCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGF0YUxvZygi
PGVtcHR5PiIpOwogICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICBkYXRhTG9nKCIgIHZh
ciBsaW5rczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFyaWFibGVzQXRUYWls
LCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAgIH0KIH0KIApA
QCAtMzYyLDYgKzM2Nyw1NCBAQCB2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcygpCiAg
ICAgfQogfQogCit2b2lkIEdyYXBoOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgs
IDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNz
b3JJbmRleCkKK3sKKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2Jsb2Nrc1tzdWNjZXNz
b3JJbmRleF0uZ2V0KCk7CisgICAgaWYgKCFzdWNjZXNzb3ItPmlzUmVhY2hhYmxlKSB7CisgICAg
ICAgIHN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgICAgICB3b3JrbGlzdC5hcHBl
bmQoc3VjY2Vzc29ySW5kZXgpOworICAgIH0KKyAgICAKKyAgICBzdWNjZXNzb3ItPm1fcHJlZGVj
ZXNzb3JzLmFwcGVuZChibG9ja0luZGV4KTsKK30KKwordm9pZCBHcmFwaDo6ZGV0ZXJtaW5lUmVh
Y2hhYmlsaXR5KCkKK3sKKyAgICBWZWN0b3I8QmxvY2tJbmRleCwgMTY+IHdvcmtsaXN0OworICAg
IHdvcmtsaXN0LmFwcGVuZCgwKTsKKyAgICBtX2Jsb2Nrc1swXS0+aXNSZWFjaGFibGUgPSB0cnVl
OworICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJsb2NrSW5kZXgg
aW5kZXggPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsK
KyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbaW5kZXhdLmdl
dCgpOworICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGlua2VkKTsKKyAgICAgICAgCisgICAgICAg
IE5vZGUmIG5vZGUgPSBhdChibG9jay0+bGFzdCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUuaXNU
ZXJtaW5hbCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLmlzSnVtcCgpKQorICAgICAg
ICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS50YWtlbkJsb2NrSW5k
ZXgoKSk7CisgICAgICAgIGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkgeworICAgICAgICAgICAg
aGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7
CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLm5vdFRh
a2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBHcmFwaDo6cmVz
ZXRSZWFjaGFiaWxpdHkoKQoreworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9i
bG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYmxvY2stPmlzUmVhY2hhYmxlID0gZmFsc2U7Cisg
ICAgICAgIGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5jbGVhcigpOworICAgIH0KKyAgICAKKyAgICBk
ZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9u
IDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQ2LDYgKzM0Niw2NCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpc0Nh
cHR1cmVkKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgfQogICAgIAor
ICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAg
ICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkubnVtU3VjY2Vzc29ycygpOworICAgIH0KKyAg
ICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgp
CisgICAgeworICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29yKGluZGV4
KTsKKyAgICB9CisgICAgQmxvY2tJbmRleCBzdWNjZXNzb3JGb3JDb25kaXRpb24oQmFzaWNCbG9j
ayogYmxvY2ssIGJvb2wgY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGJsb2Nr
LT5sYXN0KCkpLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgIH0KKyAgICAK
KyAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUmIG5vZGUpCisgICAgeworICAgICAg
ICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBhdChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9u
KCk7CisgICAgICAgIHJldHVybiBpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQ
cmVkaWN0aW9uKHJpZ2h0KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBieVZhbElzUHVyZShOb2Rl
JiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKQorICAgICAgICAgICAgJiYgKChub2RlLm9wKCkgPT0gUHV0QnlWYWwg
fHwgbm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpCisgICAgICAgICAgICAgICAgPyBpc0FjdGlv
bmFibGVNdXRhYmxlQXJyYXlQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24o
KSkKKyAgICAgICAgICAgICAgICA6IGlzQWN0aW9uYWJsZUFycmF5UHJlZGljdGlvbihhdChub2Rl
LmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjbG9iYmVy
c1dvcmxkKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9k
ZUNsb2JiZXJzV29ybGQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCEo
bm9kZS5mbGFncygpICYgTm9kZU1pZ2h0Q2xvYmJlcikpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6
CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToK
KyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRl
ckVxOgorICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAgICAgIHJldHVybiAhaXNQcmVk
aWN0ZWROdW1lcmljYWwobm9kZSk7CisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAg
ICByZXR1cm4gIWJ5VmFsSXNQdXJlKG5vZGUpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSWYg
Ynkgc29tZSBvZGRpdHkgd2UgaGl0IHRoaXMgY2FzZSBpbiByZWxlYXNlIGJ1aWxkIGl0J3Mgc2Fm
ZXIgdG8gaGF2ZSBDU0UgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBjbG9iYmVyc1dvcmxkKGF0KG5vZGVJbmRleCkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOworICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxp
dHkoKTsKKyAgICAKICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKICAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwpAQCAtMzY0
LDYgKzQyMiw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwogcHJp
dmF0ZToKICAgICAKKyAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwg
MTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3Nv
ckluZGV4KTsKKyAgICAKICAgICBib29sIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoTm9kZSYgYWRkLCBOb2RlJiB2YXJpYWJsZSwgTm9kZSYgaW1tZWRpYXRlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBzdHJ1
Y3QgT3BJbmZvIHsKIC8vIE5vZGUgcmVwcmVzZW50cyBhIHNpbmdsZSBvcGVyYXRpb24gaW4gdGhl
IGRhdGEgZmxvdyBncmFwaC4KIHN0cnVjdCBOb2RlIHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZh
ckFyZyB9OwotCisgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hp
bGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogY29kZU9y
aWdpbihjb2RlT3JpZ2luKQpAQCAtMjAyLDcgKzIwMiw4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgbV9vcCA9IEpTQ29uc3RhbnQ7CiAgICAgICAgIGlmIChtX2ZsYWdzICYgTm9kZU11c3RHZW5l
cmF0ZSkKICAgICAgICAgICAgIG1fcmVmQ291bnQtLTsKLSAgICAgICAgbV9mbGFncyAmPSB+Tm9k
ZU11c3RHZW5lcmF0ZTsKKyAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVDbG9iYmVyc1dv
cmxkKSk7CisgICAgICAgIG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0
Q2xvYmJlcik7CiAgICAgICAgIG1fb3BJbmZvID0gY29uc3RhbnROdW1iZXI7CiAgICAgICAgIGNo
aWxkcmVuLnJlc2V0KCk7CiAgICAgfQpAQCAtNDY4LDYgKzQ2OSwzNyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIHJldHVybiBtX29wSW5mbzI7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG51
bVN1Y2Nlc3NvcnMoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNh
c2UgSnVtcDoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEJyYW5jaDoKKyAg
ICAgICAgICAgIHJldHVybiAyOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQmxvY2tJbmRleCBzdWNjZXNzb3IodW5z
aWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4KSB7CisgICAgICAgIGNh
c2UgMDoKKyAgICAgICAgICAgIHJldHVybiB0YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgY2Fz
ZSAxOgorICAgICAgICAgICAgcmV0dXJuIG5vdFRha2VuQmxvY2tJbmRleCgpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBy
ZXR1cm4gTm9CbG9jazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBCbG9ja0luZGV4IHN1
Y2Nlc3NvckZvckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0JyYW5jaCgpKTsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/IHRha2VuQmxvY2tJbmRl
eCgpIDogbm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzSGVh
cFByZWRpY3Rpb24oKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3Niw3ICsxNzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFj
cm8oSXNTdHJpbmcsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNPYmplY3QsIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNGdW5jdGlvbiwgTm9kZVJlc3VsdEJvb2xl
YW4pIFwKLSAgICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNaWdo
dENsb2JiZXIpIFwKKyAgICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAog
ICAgIG1hY3JvKFRvUHJpbWl0aXZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhTdHJDYXQsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAg
ICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIxLDcgKzExMjEsNyBAQCBzaXplX3QgREZH
X09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3ApLnRvQm9vbGVhbigpOwogfQogCiAjaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNV
TEFUSU9OX0ZBSUxVUkUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3MywxMCBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgUGhhc2VUeXBlPgotdm9pZCBydW5QaGFzZShHcmFwaCYgZ3JhcGgpCitib29s
IHJ1blBoYXNlKEdyYXBoJiBncmFwaCkKIHsKICAgICBQaGFzZVR5cGUgcGhhc2UoZ3JhcGgpOwot
ICAgIHBoYXNlLnJ1bigpOworICAgIHJldHVybiBwaGFzZS5ydW4oKTsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEx
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgbV9jb3Vu
dCA9IDA7CkBAIC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRvUm91bmRPZkRv
dWJsZVZvdGluZygpOwogICAgICAgICAgICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKICAgICAgICAg
fSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAKIHByaXZhdGU6CkBAIC04MzEsOSArODMzLDkgQEAgcHJpdmF0ZToKICNlbmRpZgog
fTsKICAgICAKLXZvaWQgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYgZ3JhcGgp
Citib29sIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQogewotICAg
IHJ1blBoYXNlPFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CisgICAgcmV0dXJu
IHJ1blBoYXNlPFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgJKHJldmlzaW9uIDEx
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBHcmFwaDsK
IC8vIGFyaXRobWV0aWMgbm9kZXMpIGRvIG5vdCBxdWFsaWZ5IGZvciBhbnkgb2YgdGhlc2UgY2F0
ZWdvcmllcy4gQnV0IGFmdGVyIHJ1bm5pbmcKIC8vIHRoaXMgcGhhc2UsIHdlJ2xsIGhhdmUgZnVs
bCBpbmZvcm1hdGlvbiBmb3IgdGhlIGV4cGVjdGVkIHR5cGUgb2YgZWFjaCBub2RlLgogCi12b2lk
IHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybVByZWRp
Y3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHOjpQ
aGFzZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVs
aW1pbmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBkbyB7CkBAIC02Myw3ICs2Myw4IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotCisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6CkBA
IC0xNjYsOSArMTY3LDkgQEAgcHJpdmF0ZToKIAogfTsKIAotdm9pZCBwZXJmb3JtUmVkdW5kYW50
UGhpRWxpbWluYXRpb24oR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtUmVkdW5kYW50UGhpRWxp
bWluYXRpb24oR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNlPFJlZHVuZGFudFBoaUVsaW1p
bmF0aW9uUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UmVkdW5kYW50UGhpRWxp
bWluYXRpb25QaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9u
UGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVu
ZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBXZSBpbnNlcnRlZCBt
YW55IGNhbi1iZS1yZWR1bmRhbnQgUGhpIG5vZGVzIHdoZW4gYnVpbGRpbmcgdGhlIGdyYXBoLgog
Ly8gVGhpcyBwaGFzZSB3aWxsIGp1c3QgcmVtb3ZlIHRoZW0uCiAKLXZvaWQgcGVyZm9ybVJlZHVu
ZGFudFBoaUVsaW1pbmF0aW9uKEdyYXBoJik7Citib29sIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGlt
aW5hdGlvbihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDEyICsxMjAsMjUgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gQ2xlYXIg
dGhlIHVzZSBjb3VudCAmIGFkZCB0byB0aGUgZnJlZSBsaXN0LgogICAgICAgICAgICAgbV91c2Vk
W2luZGV4XSA9IDA7CiAgICAgICAgICAgICBtX2ZyZWUuYXBwZW5kKGluZGV4KTsKKyAgICAgICAg
fSBlbHNlIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAg
ICAgICAgICBkYXRhTG9nKCIgVmlydHVhbCByZWdpc3RlciAldSBpcyBhdCAldS8ldSB1c2VzLiIs
IGluZGV4LCBtX3VzZWRbaW5kZXhdLCBub2RlLnJlZkNvdW50KCkpOworI2VuZGlmCiAgICAgICAg
IH0KICAgICB9CiAgICAgdm9pZCB1c2UoRWRnZSBjaGlsZCkKICAgICB7CiAgICAgICAgIHVzZShj
aGlsZC5pbmRleFVuY2hlY2tlZCgpKTsKICAgICB9CisgICAgCisgICAgdm9pZCB1c2VJZkhhc1Jl
c3VsdChFZGdlIGNoaWxkKQorICAgIHsKKyAgICAgICAgaWYgKCFjaGlsZCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgaWYgKCFtX2dyYXBoW2NoaWxkXS5oYXNSZXN1bHQoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgdXNlKGNoaWxkKTsKKyAgICB9CiAKICAgICB1bnNpZ25l
ZCBoaWdoV2F0ZXJtYXJrKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyODAsOCArMTI4MCwxMSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIEdQUkluZm86OnJlZ1QwKTsKIAogICAg
IEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwotICAgIGZvciAobV9ibG9jayA9IDA7IG1fYmxvY2sg
PCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKyttX2Jsb2NrKQotICAgICAgICBjb21w
aWxlKCptX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdKTsKKyAgICBmb3IgKG1fYmxvY2sg
PSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrbV9ibG9jaykg
eworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9i
bG9ja10uZ2V0KCk7CisgICAgICAgIGlmIChibG9jaykKKyAgICAgICAgICAgIGNvbXBpbGUoKmJs
b2NrKTsKKyAgICB9CiAgICAgbGlua0JyYW5jaGVzKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBA
IC0xMjg5LDggKzEyOTIsMTAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjcmVhdGVPU1JFbnRyaWVzKCkKIHsKICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNp
emUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2smIGJsb2NrID0gKm1faml0
LmdyYXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF07Ci0gICAgICAgIGlmICghYmxvY2suaXNPU1JU
YXJnZXQpCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IG5lZWQgdG8gY3JlYXRlIE9T
UiBlbnRyeSB0cmFtcG9saW5lcyB3aGVuIHVzaW5nIGVkZ2UgY29kZQpAQCAtMTMxMiw5ICsxMzE3
LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKExpbmsKIHsKICAgICB1
bnNpZ25lZCBvc3JFbnRyeUluZGV4ID0gMDsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKytibG9j
a0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2smIGJsb2NrID0gKm1faml0LmdyYXBoKCkubV9i
bG9ja3NbYmxvY2tJbmRleF07Ci0gICAgICAgIGlmIChibG9jay5pc09TUlRhcmdldCkKLSAgICAg
ICAgICAgIG1faml0Lm5vdGljZU9TUkVudHJ5KGJsb2NrLCBtX29zckVudHJ5SGVhZHNbb3NyRW50
cnlJbmRleCsrXSwgbGlua0J1ZmZlcik7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9q
aXQuZ3JhcGgoKS5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9j
aykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdl
dCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2ppdC5ub3RpY2VPU1JFbnRyeSgq
YmxvY2ssIG1fb3NyRW50cnlIZWFkc1tvc3JFbnRyeUluZGV4KytdLCBsaW5rQnVmZmVyKTsKICAg
ICB9CiAgICAgQVNTRVJUKG9zckVudHJ5SW5kZXggPT0gbV9vc3JFbnRyeUhlYWRzLnNpemUoKSk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw3ICszMDYsMTAgQEAgcHVibGlj
OgogICAgIC8vIENhbGxlZCBvbiBhbiBvcGVyYW5kIG9uY2UgaXQgaGFzIGJlZW4gY29uc3VtZWQg
YnkgYSBwYXJlbnQgbm9kZS4KICAgICB2b2lkIHVzZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAg
IHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGF0KG5vZGVJbmRl
eCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgp
OworICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdp
c3RlcigpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9b
dmlydHVhbFJlZ2lzdGVyXTsKIAogICAgICAgICAvLyB1c2UoKSByZXR1cm5zIHRydWUgd2hlbiB0
aGUgdmFsdWUgYmVjb21lcyBkZWFkLCBhbmQgYW55CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4o
KQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQog
ICAgICAgICBkYXRhTG9nKCJQcmVzZXJ2ZWQgdmFyczogIik7CkBAIC01NCw2ICs1NCwxMCBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleEluQmxvY2sgPSAwOyBpbmRleElu
QmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewogICAgICAgICAgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC02NiwyMiArNzAsMjEgQEAgcHVi
bGljOgogICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUo
KSB8fCBub2RlLm9wKCkgPT0gUGhpIHx8IG5vZGUub3AoKSA9PSBGbHVzaCkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBHZXRM
b2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVzIGluIHRoZSBncmFwaCwgcmVmZXJl
bmNpbmcKLSAgICAgICAgICAgICAgICAvLyByZXN1bHRzIGZyb20gcHJpb3IgYmxvY2tzLgotICAg
ICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0gR2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gRmlyc3QsIGNhbGwgdXNlIG9uIGFsbCBvZiB0aGUgY3VycmVudCBub2RlJ3MgY2hp
bGRyZW4sIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgLy8gYWxsb2NhdGUgYSBWaXJ0dWFsUmVn
aXN0ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8gc28gaW4gdGhpcwotICAgICAgICAgICAgICAgICAg
ICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQot
ICAgICAgICAgICAgICAgICAgICAvLyBWaXJ0dWFsUmVnaXN0ZXIgaXMgZnJlZWQsIHRoZW4gaXQg
bWF5IGJlIHJldXNlZCBmb3Igbm9kZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuZmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJz
dENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UobV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2No
aWxkSWR4XSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdl
dExvY2FsKQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0uaGFzUmVzdWx0KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZp
cnN0LCBjYWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVu
CisgICAgICAgICAgICAgICAgLy8gYWxsb2NhdGUgYSBWaXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMg
bm9kZS4gV2UgZG8gc28gaW4gdGhpcworICAgICAgICAgICAgICAgIC8vIG9yZGVyIHNvIHRoYXQg
aWYgYSBjaGlsZCBpcyBvbiBpdHMgbGFzdCB1c2UsIGFuZCBhCisgICAgICAgICAgICAgICAgLy8g
VmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUu
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hp
bGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsg
Y2hpbGRJZHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNS
ZXN1bHQobV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3Vs
dChub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhh
c1Jlc3VsdChub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51
c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMygpKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCkBAIC0xMTQsMTIgKzExNywxNCBAQCBw
dWJsaWM6CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKCJO
dW0gY2FsbGVlIHJlZ2lzdGVyczogJXVcbiIsIGNhbGxlZVJlZ2lzdGVycyk7CiAjZW5kaWYKKyAg
ICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07CiAKLXZvaWQgcGVyZm9ybVZp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8VmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPFZp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgJKHJldmlzaW9uIDEx
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgR3Jh
cGg7CiAvLyBmb3IgbG9vay11cCB0YWJsZXMgZm9yIHRoZSBsaW5lYXIgc2NhbiByZWdpc3RlciBh
bGxvY2F0b3IgdGhhdCB0aGUgYmFja2VuZAogLy8gdXNlcy4KIAotdm9pZCBwZXJmb3JtVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYpOworYm9vbCBwZXJmb3JtVmlydHVhbFJlZ2lzdGVy
QWxsb2NhdGlvbihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4NSw3ICsyNTg1LDcgQEAgSlNW
YWx1ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICAqLwogICAgICAg
ICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyYyA9IHZQQ1syXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFjYWxsRnJhbWUt
PnIoc3JjKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNhbGxGcmFtZSkpOworICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzQm9vbGVhbighY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpLnRvQm9vbGVh
bigpKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICBjYWxsRnJhbWUt
PnVuY2hlY2tlZFIoZHN0KSA9IHJlc3VsdDsKIApAQCAtMzkwNSw3ICszOTA1LDcgQEAgc2tpcF9p
ZF9jdXN0b21fc2VsZjoKICAgICAgICAgICovCiAgICAgICAgIGludCBjb25kID0gdlBDWzFdLnUu
b3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAg
IGlmIChjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7
CisgICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbigpKSB7
CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAgICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVP
VVQoKTsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTM5MjUsNyArMzkyNSw3
IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICAqLwogICAgICAgICBpbnQgY29uZCA9
IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5k
OwotICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNh
bGxGcmFtZSkpIHsKKyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRv
Qm9vbGVhbigpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAgICAgICAgICAgQ0hF
Q0tfRk9SX1RJTUVPVVQoKTsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTM5
NDIsNyArMzk0Miw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICovCiAgICAgICAg
IGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9IHZQQ1sy
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRv
Qm9vbGVhbihjYWxsRnJhbWUpKSB7CisgICAgICAgIGlmIChjYWxsRnJhbWUtPnIoY29uZCkuanNW
YWx1ZSgpLnRvQm9vbGVhbigpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAgICAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgICAgICB9CkBAIC0zOTU4LDcgKzM5NTgsNyBA
QCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAqLwogICAgICAgICBpbnQgY29uZCA9IHZQ
Q1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwot
ICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNhbGxG
cmFtZSkpIHsKKyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9v
bGVhbigpKSB7CiAgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OwogICAgICAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NTUsOSArMjg1NSw3IEBAIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgIEpTVmFsdWUgc3JjID0g
c3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0KLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVh
bighc3JjLnRvQm9vbGVhbihjYWxsRnJhbWUpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9v
bGVhbighc3JjLnRvQm9vbGVhbigpKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTI4NjgsOSArMjg2
Niw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKGludCwgb3BfanRydWUpCiAKICAgICBKU1ZhbHVl
IHNyYzEgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwogCi0gICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLQotICAgIGJvb2wgcmVzdWx0ID0gc3Jj
MS50b0Jvb2xlYW4oY2FsbEZyYW1lKTsKKyAgICBib29sIHJlc3VsdCA9IHNyYzEudG9Cb29sZWFu
KCk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsNyArNTA3LDcgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19yZWdleAogTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX25vdCkKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIExMSU5UX1JFVFVS
Tihqc0Jvb2xlYW4oIUxMSU5UX09QX0MoMikuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSkpOwor
ICAgIExMSU5UX1JFVFVSTihqc0Jvb2xlYW4oIUxMSU5UX09QX0MoMikuanNWYWx1ZSgpLnRvQm9v
bGVhbigpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9lcSkKQEAgLTEx
MTAsMTMgKzExMTAsMTMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2ptcF9zY29w
ZQogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2p0cnVlKQogewogICAgIExMSU5UX0JF
R0lOKCk7Ci0gICAgTExJTlRfQlJBTkNIKG9wX2p0cnVlLCBMTElOVF9PUF9DKDEpLmpzVmFsdWUo
KS50b0Jvb2xlYW4oZXhlYykpOworICAgIExMSU5UX0JSQU5DSChvcF9qdHJ1ZSwgTExJTlRfT1Bf
QygxKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfamZhbHNlKQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgTExJTlRfQlJBTkNI
KG9wX2pmYWxzZSwgIUxMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7Cisg
ICAgTExJTlRfQlJBTkNIKG9wX2pmYWxzZSwgIUxMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvQm9v
bGVhbigpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2psZXNzKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTcsNyArNzk3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQu
dG9Cb29sZWFuKGV4ZWMpKQorICAgICAgICAgICAgaWYgKHJlc3VsdC50b0Jvb2xlYW4oKSkKICAg
ICAgICAgICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgZmlsdGVySW5k
ZXgrKywgdik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGsgPT0gbGVuZ3RoKQpAQCAtODE4LDcg
KzgxOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAg
ICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQodGhpc09iaik7CiAKICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywg
ZWFjaEFyZ3VtZW50cyk7Ci0gICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFuKGV4ZWMpKQorICAg
ICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbigpKQogICAgICAgICAgICAgcmVzdWx0QXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGZpbHRlckluZGV4KyssIHYpOwogICAgIH0KICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdEFycmF5KTsKQEAgLTkxNyw3ICs5MTcsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0
QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hl
ZENhbGwuY2FsbCgpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudG9Cb29sZWFuKGNhY2hlZENh
bGwubmV3Q2FsbEZyYW1lKGV4ZWMpKSkKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRvQm9vbGVh
bigpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC05MzQsNyArOTM0LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCi0gICAgICAgIGJvb2wgcHJlZGljYXRlUmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbihl
eGVjKTsKKyAgICAgICAgYm9vbCBwcmVkaWNhdGVSZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cykudG9Cb29sZWFu
KCk7CiAgICAgICAgIGlmICghcHJlZGljYXRlUmVzdWx0KSB7CiAgICAgICAgICAgICByZXN1bHQg
PSBqc0Jvb2xlYW4oZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDI1LDcgKzEwMjUs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC50b0Jvb2xl
YW4oY2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpKQorICAgICAgICAgICAgaWYgKHJlc3Vs
dC50b0Jvb2xlYW4oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0cnVlKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDQyLDcgKzEwNDIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKLSAgICAgICAgYm9vbCBwcmVkaWNhdGVSZXN1bHQgPSBjYWxsKGV4ZWMs
IGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cyku
dG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBib29sIHByZWRpY2F0ZVJlc3VsdCA9IGNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRz
KS50b0Jvb2xlYW4oKTsKICAgICAgICAgaWYgKHByZWRpY2F0ZVJlc3VsdCkgewogICAgICAgICAg
ICAgcmVzdWx0ID0ganNCb29sZWFuKHRydWUpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAg
dm9pZCBCb29sZWFuQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKAogSlNPYmplY3QqIGNvbnN0
cnVjdEJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAg
IEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxE
YXRhKCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgp
LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwotICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShl
eGVjLT5nbG9iYWxEYXRhKCksIGpzQm9vbGVhbihhcmdzLmF0KDApLnRvQm9vbGVhbihleGVjKSkp
OworICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzQm9vbGVh
bihhcmdzLmF0KDApLnRvQm9vbGVhbigpKSk7CiAgICAgcmV0dXJuIG9iajsKIH0KIApAQCAtNjgs
NyArNjgsNyBAQCBDb25zdHJ1Y3RUeXBlIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uCiAvLyBF
Q01BIDE1LjYuMQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEJvb2xl
YW5Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29s
ZWFuKCkpKTsKIH0KIAogQ2FsbFR5cGUgQm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShK
U0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIC8vIEJhc2ljIGNvbnZlcnNpb25zLgogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUpIGNvbnN0OwogICAgICAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3Rh
dGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OwotICAgICAgICBib29sIHRvQm9v
bGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNv
bnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjIs
MTEgKzQyMiw2IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAg
ICAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKCksIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIEpTT2JqZWN0Ojp0b0Jvb2xlYW4oRXhlY1N0
YXRlKikgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogZG91YmxlIEpTT2JqZWN0Ojp0
b051bWJlcihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSlNWYWx1ZSBwcmltaXRpdmUg
PSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJOdW1iZXIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyAr
MTM4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2
ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25z
dDsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikg
Y29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJs
ZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGRv
dWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNTdHJpbmcqIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjEsNyArMjIxLDcgQEAgYm9vbCBKU1N0cmluZzo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4
ZWNTdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU1N0cmluZzo6dG9Cb29sZWFuKEV4
ZWNTdGF0ZSopIGNvbnN0Citib29sIEpTU3RyaW5nOjp0b0Jvb2xlYW4oKSBjb25zdAogewogICAg
IHJldHVybiBtX2xlbmd0aDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsg
fQogCiAgICAgICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJp
bWl0aXZlVHlwZSkgY29uc3Q7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgdG9Cb29s
ZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHRv
Qm9vbGVhbigpIGNvbnN0OwogICAgICAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3Rh
dGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OwogICAgICAgICBKU09iamVjdCog
dG9PYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICAgICAgZG91
YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwpAQCAtNDM1LDIzICs0MzUsMjMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgYm9vbCBpc0pTU3RyaW5nKEpTVmFsdWUgdikgeyBy
ZXR1cm4gdi5pc0NlbGwoKSAmJiB2LmFzQ2VsbCgpLT5jbGFzc0luZm8oKSA9PSAmSlNTdHJpbmc6
OnNfaW5mbzsgfQogCi0gICAgaW5saW5lIGJvb2wgSlNDZWxsOjp0b0Jvb2xlYW4oRXhlY1N0YXRl
KiBleGVjKSBjb25zdAorICAgIGlubGluZSBib29sIEpTQ2VsbDo6dG9Cb29sZWFuKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIGlmIChpc1N0cmluZygpKSAKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+KHRoaXMpLT50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih0aGlzKS0+dG9Cb29sZWFu
KCk7CiAgICAgICAgIHJldHVybiAhc3RydWN0dXJlKCktPnR5cGVJbmZvKCkubWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIC8vIC0tLSBKU1ZhbHVlIGlubGluZXMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIAotICAgIGlubGluZSBib29sIEpTVmFsdWU6OnRv
Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6
dG9Cb29sZWFuKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0ludDMyKCkpCiAgICAgICAg
ICAgICByZXR1cm4gYXNJbnQzMigpOwogICAgICAgICBpZiAoaXNEb3VibGUoKSkKICAgICAgICAg
ICAgIHJldHVybiBhc0RvdWJsZSgpID4gMC4wIHx8IGFzRG91YmxlKCkgPCAwLjA7IC8vIGZhbHNl
IGZvciBOYU4KICAgICAgICAgaWYgKGlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGFzQ2Vs
bCgpLT50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gYXNDZWxsKCktPnRvQm9v
bGVhbigpOwogICAgICAgICByZXR1cm4gaXNUcnVlKCk7IC8vIGZhbHNlLCBudWxsLCBhbmQgdW5k
ZWZpbmVkIGFsbCBjb252ZXJ0IHRvIGZhbHNlLgogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyAr
MTk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhl
Y1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7CiAg
ICAgICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVy
LCBKU1ZhbHVlJik7CiAKLSAgICAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7
CisgICAgICAgIGJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CiAKICAgICAgICAgLy8gdG9OdW1iZXIg
Y29udmVyc2lvbiBpcyBleHBlY3RlZCB0byBiZSBzaWRlIGVmZmVjdCBmcmVlIGlmIGFuIGV4Y2Vw
dGlvbiBoYXMKICAgICAgICAgLy8gYmVlbiBzZXQgaW4gdGhlIEV4ZWNTdGF0ZSBhbHJlYWR5LgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsMTQgKzIx
NCwxNCBAQCBzdGF0aWMgYm9vbCB0b1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhCiAKICAgICBQ
cm9wZXJ0eVNsb3QgZW51bWVyYWJsZVNsb3QoZGVzY3JpcHRpb24pOwogICAgIGlmIChkZXNjcmlw
dGlvbi0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5lbnVtZXJh
YmxlLCBlbnVtZXJhYmxlU2xvdCkpIHsKLSAgICAgICAgZGVzYy5zZXRFbnVtZXJhYmxlKGVudW1l
cmFibGVTbG90LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5lbnVtZXJhYmxl
KS50b0Jvb2xlYW4oZXhlYykpOworICAgICAgICBkZXNjLnNldEVudW1lcmFibGUoZW51bWVyYWJs
ZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpLnRv
Qm9vbGVhbigpKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIFByb3BlcnR5U2xvdCBjb25maWd1cmFibGVT
bG90KGRlc2NyaXB0aW9uKTsKICAgICBpZiAoZGVzY3JpcHRpb24tPmdldFByb3BlcnR5U2xvdChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uZmlndXJhYmxlLCBjb25maWd1cmFibGVTbG90
KSkgewotICAgICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShjb25maWd1cmFibGVTbG90LmdldFZh
bHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25maWd1cmFibGUpLnRvQm9vbGVhbihl
eGVjKSk7CisgICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGNvbmZpZ3VyYWJsZVNsb3QuZ2V0
VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZpZ3VyYWJsZSkudG9Cb29sZWFu
KCkpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQpAQCAtMjM2LDcgKzIzNiw3IEBAIHN0YXRpYyBib29sIHRvUHJvcGVy
dHlEZXNjcmlwdG9yKEV4ZWNTdGEKIAogICAgIFByb3BlcnR5U2xvdCB3cml0YWJsZVNsb3QoZGVz
Y3JpcHRpb24pOwogICAgIGlmIChkZXNjcmlwdGlvbi0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSwgd3JpdGFibGVTbG90KSkgewotICAgICAgICBk
ZXNjLnNldFdyaXRhYmxlKHdyaXRhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkud3JpdGFibGUpLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgIGRlc2Muc2V0V3Jp
dGFibGUod3JpdGFibGVTbG90LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53
cml0YWJsZSkudG9Cb29sZWFuKCkpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksOSArMjQ5LDkgQEAgdm9pZCBzZXRSZWdFeHBD
b25zdHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZQogICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFzZU9i
amVjdCktPnNldElucHV0KGV4ZWMsIHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAotdm9pZCBz
ZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQordm9pZCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRp
bGluZShFeGVjU3RhdGUqLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICBhc1JlZ0V4cENvbnN0cnVjdG9yKGJhc2VPYmplY3QpLT5zZXRNdWx0aWxpbmUodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBhc1JlZ0V4cENvbnN0cnVjdG9yKGJhc2VPYmplY3QpLT5z
ZXRNdWx0aWxpbmUodmFsdWUudG9Cb29sZWFuKCkpOwogfQogCiAvLyBFQ01BIDE1LjEwLjQKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDExICsxNDcsMTEgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogCiAgICAgY2hhciBwb3N0
Zml4WzVdID0geyAnLycsIDAsIDAsIDAsIDAgfTsKICAgICBpbnQgaW5kZXggPSAxOwotICAgIGlm
ICh0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmdsb2JhbCkudG9C
b29sZWFuKGV4ZWMpKQorICAgIGlmICh0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmdsb2JhbCkudG9Cb29sZWFuKCkpCiAgICAgICAgIHBvc3RmaXhbaW5kZXgrK10g
PSAnZyc7Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuaWdub3JlQ2FzZSkudG9Cb29sZWFuKGV4ZWMpKQorICAgIGlmICh0aGlzT2JqZWN0LT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlnbm9yZUNhc2UpLnRvQm9vbGVhbigpKQogICAg
ICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2knOwotICAgIGlmICh0aGlzT2JqZWN0LT5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm11bHRpbGluZSkudG9Cb29sZWFuKGV4ZWMpKQorICAg
IGlmICh0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm11bHRpbGlu
ZSkudG9Cb29sZWFuKCkpCiAgICAgICAgIHBvc3RmaXhbaW5kZXhdID0gJ20nOwogICAgIFVTdHJp
bmcgc291cmNlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5z
b3VyY2UpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAvLyBJZiBzb3VyY2UgaXMg
ZW1wdHksIHVzZSAiLyg/OikvIiB0byBhdm9pZCBjb2xsaWRpbmcgd2l0aCBjb21tZW50IHN5bnRh
eAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138683</attachid>
            <date>2012-04-24 16:35:41 -0700</date>
            <delta_ts>2012-04-24 19:27:23 -0700</delta_ts>
            <desc>more</desc>
            <filename>cfgsimplify_patch_6.diff</filename>
            <type>text/plain</type>
            <size>111363</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0ODYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNCBA
QAorMjAxMi0wNC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTUzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGlu
IHByb2dyZXNzLgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNW
YWx1ZVRvQm9vbGVhbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAg
ICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6
cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAg
ICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2Uu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChDRkdTaW1wbGlmaWNhdGlv
blBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpDRkdT
aW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpbmRPcGVyYW5kU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjprZWVwT3BlcmFuZEFsaXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlm
aWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpD
RkdTaW1wbGlmaWNhdGlvblBoYXNlOjptZXJnZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6
cGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NT
RVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cnVuKToKKyAgICAgICAg
KENTRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2xvYmJlcnNXb3JsZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuaDoKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5oOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3VjY2Vz
c29yRm9yQ29uZGl0aW9uKToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om51bVN1Y2Nlc3NvcnMpOgorICAgICAgICAo
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3JGb3JDb25kaXRpb24pOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR1BoYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6cnVuUGhh
c2UpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbik6CisgICAgICAgICog
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAg
ICAgICAqIGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpydW4pOgorICAgICAgICAo
SlNDOjpERkc6OnBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbik6CisgICAgICAgICogZGZn
L0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OnBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3Bw
OgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
RXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAqIHJ1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9v
bGVhbik6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAg
KEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjp0b0Jvb2xlYW4pOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjp0
b1Byb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4
cFByb3RvRnVuY1RvU3RyaW5nKToKKwogMjAxMi0wNC0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaGF2ZSBjb25zdGFudCBwcm9wYWdhdGlv
bgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9vbCBKU1ZhbHVlVG9Cb29sZWFuKEpT
Q29udGV4dFJlZiBjdHgsIAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKLSAgICByZXR1cm4ganNWYWx1
ZS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIGpzVmFsdWUudG9Cb29sZWFuKCk7CiB9CiAK
IGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1
ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCwxMCBAQAogCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0
NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGM0IzQTFBMTUz
RTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0ExNzE1M0U2OEVGMDAzRUQw
RkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwICovOyB9OwogCQkwRjNCM0ExQjE1M0U2
OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAv
KiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0IzQTI1MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTI5MTU0NzRGRjQw
MDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGM0IzQTJDMTU0NzUwMDIwMDNF
RDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgx
NDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JB
QjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRh
Rm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NjgsNiArNzcyLDEwIEBACiAJCTBG
MkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAv
KiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGM0IzQTI0MTU0NEM5
OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDRkdTaW1w
bGlmaWNhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYg
LyogREZHVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHVmFsaWRhdGUuY3BwOyBwYXRoID0gZGZnL0RGR1ZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7IHBhdGgg
PSBkZmcvREZHVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZB
NDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1h
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDQ1LDYgKzIwNTMsOCBAQAogCQkJCTBGN0IyOTQ4
MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLywKIAkJCQkwRkZGQzk0QjE0
RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTRDMTRFRjkw
OTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oICovLAorCQkJCTBGM0IzQTI0MTU0NEM5OTEwMDNF
RDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjNCM0EyNTE1
NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovLAogCQkJCTBG
RkZDOTREMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5
NEUxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEZEODJFMUUxNDE3
MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8sCkBAIC0yMTAxLDYgKzIxMTEs
OCBAQAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAq
LywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJ
MEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCAqLywKKwkJCQkwRjNC
M0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLywKIAkJCQkwRjYyMDE3MjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8sCiAJCQkJMEZGRkM5
NTMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5j
cHAgKi8sCiAJCQkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oICovLApAQCAtMjU4Myw2ICsyNTk1LDggQEAKIAkJCQkwRjNCM0Ex
QjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGM0IzQTI4MTU0NEM5
OTcwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMzE0Nyw2ICszMTYxLDggQEAKIAkJCQk4NjQyQzUxMjE1MUMwODNEMDA0NkQ0RUYg
LyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUy
MTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQjNBMkIxNTQ3
NTAwMDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDExNDU1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQsNiArMTI0LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9jYWwob3BlcmFu
ZCwgdmFsdWUpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50
IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0Fy
Z3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzZXRBcmd1bWVudEZpcnN0VGltZShvcGVy
YW5kVG9Bcmd1bWVudChvcGVyYW5kKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzZXRMb2NhbEZpcnN0VGltZShvcGVyYW5kLCB2YWx1
ZSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTE0
NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTksNiArOTksOCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxp
emUoR3JhcGgmIGdyCiAgICAgUFJPRklMRShGTEFHX0ZPUl9CTE9DS19JTklUSUFMSVpBVElPTik7
CiAgICAgQmFzaWNCbG9jayogcm9vdCA9IGdyYXBoLm1fYmxvY2tzWzBdLmdldCgpOwogICAgIHJv
b3QtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOworICAgIHJvb3QtPmNmYUhhc1Zpc2l0ZWQgPSBm
YWxzZTsKKyAgICByb290LT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
aSkgewogICAgICAgICBOb2RlJiBub2RlID0gZ3JhcGhbcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFy
Z3VtZW50KGkpXTsKICAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBTZXRBcmd1bWVudCk7CkBA
IC0xNDMsMTEgKzE0NSwzMyBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgm
IGdyCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRp
Y3RGbG9hdDY0QXJyYXkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOworICAgICAgICAKKyAgICAgICAgcm9vdC0+dmFs
dWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewotICAg
ICAgICBpZiAoIWdyYXBoLmxvY2FsSXNDYXB0dXJlZChpKSkKKyAgICAgICAgaWYgKGdyYXBoLmxv
Y2FsSXNDYXB0dXJlZChpKSkKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5sb2NhbChp
KS5tYWtlVG9wKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVh
ZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICByb290LT52YWx1ZXNBdFRhaWwubG9jYWwoaSku
Y2xlYXIoKTsKKyAgICB9CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAxIDsgYmxv
Y2tJbmRleCA8IGdyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Cisg
ICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcm9vdC0+
dmFsdWVzQXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNS
ZWFjaGFibGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYmxvY2stPmNmYVNob3Vs
ZFJldmlzaXQgPSBmYWxzZTsKKyAgICAgICAgYmxvY2stPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsK
KyAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuY2xl
YXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIo
KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7CisgICAgICAgICAgICBibG9jay0+dmFs
dWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRU
YWlsLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTUyNiw4ICs1
NTAsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwogICAgICAg
ICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtMTI4Niw3ICsxMzA4LDkgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVy
Z2VTdGF0ZUF0VAogICAgICAgICAvLyBUaGUgYmxvY2sgdHJhbnNmZXJzIHRoZSB2YWx1ZSBmcm9t
IGhlYWQgdG8gdGFpbC4KICAgICAgICAgc291cmNlID0gaW5WYXJpYWJsZTsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIiAgICAgICAg
ICBUcmFuc2ZlcmluZyBmcm9tIGhlYWQgdG8gdGFpbC5cbiIpOworICAgICAgICBkYXRhTG9nKCIg
ICAgICAgICAgVHJhbnNmZXJpbmcgIik7CisgICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZp
bGUoKSk7CisgICAgICAgIGRhdGFMb2coIiBmcm9tIGhlYWQgdG8gdGFpbC5cbiIpOwogI2VuZGlm
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMjk0LDcgKzEzMTgsOSBAQCBpbmxp
bmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgIC8vIFRoZSBibG9j
ayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3BlY3VsYXRpb25zLgogICAgICAg
ICBzb3VyY2UgPSBmb3JOb2RlKG5vZGVJbmRleCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgUmVmaW5pbmcuXG4i
KTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICAgIFJlZmluaW5nIHRvICIpOworICAgICAgICBz
b3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nKCJcbiIpOwogI2Vu
ZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMzA2LDcgKzEzMzIsOSBAQCBp
bmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIgICAgICAgICAg
U2V0dGluZy5cbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgU2V0dGluZyB0byAiKTsK
KyAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZygi
XG4iKTsKICNlbmRpZgogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0xMzgyLDEyICsxNDEw
LDE5IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICBBU1NF
UlQodGVybWluYWwuaXNUZXJtaW5hbCgpKTsKICAgICAKICAgICBzd2l0Y2ggKHRlcm1pbmFsLm9w
KCkpIHsKLSAgICBjYXNlIEp1bXA6CisgICAgY2FzZSBKdW1wOiB7CisgICAgICAgIGRhdGFMb2co
IiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5k
ZXgoKSk7CiAgICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0
ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgIH0KICAgICAgICAgCi0gICAg
Y2FzZSBCcmFuY2g6Ci0gICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Js
b2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpCi0gICAgICAgICAgICB8IG1l
cmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRl
eCgpXS5nZXQoKSk7CisgICAgY2FzZSBCcmFuY2g6IHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0g
ZmFsc2U7CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4i
LCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2Uo
YmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdl
dCgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIs
IHRlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC5ub3RUYWtlbkJsb2NrSW5kZXgo
KV0uZ2V0KCkpOworICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgUmV0dXJuOgogICAgIGNhc2UgVGhyb3c6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyMyw3ICszMjMsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIGJvb2wg
aXNDbGVhcigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV90eXBlID09IFByZWRpY3RO
b25lICYmIG1fc3RydWN0dXJlLmlzQ2xlYXIoKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBtX3R5
cGUgPT0gUHJlZGljdE5vbmUgJiYgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpOworICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgQVNTRVJUKCFtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAgICAgCiAgICAgdm9pZCBtYWtlVG9wKCkKQEAgLTQyMSwxMCArNDI0LDE0
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICBib29sIG1lcmdlKGNvbnN0IEFic3RyYWN0
VmFsdWUmIG90aGVyKQogICAgIHsKICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAg
ICAgcmVzdWx0IHw9IG1lcmdlUHJlZGljdGlvbihtX3R5cGUsIG90aGVyLm1fdHlwZSk7Ci0gICAg
ICAgIHJlc3VsdCB8PSBtX3N0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9zdHJ1Y3R1cmUpOwotICAg
ICAgICBpZiAobV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKQotICAgICAgICAgICAgbV92YWx1ZSA9
IEpTVmFsdWUoKTsKKyAgICAgICAgaWYgKGlzQ2xlYXIoKSkKKyAgICAgICAgICAgICp0aGlzID0g
b3RoZXI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0IHw9IG1lcmdlUHJlZGlj
dGlvbihtX3R5cGUsIG90aGVyLm1fdHlwZSk7CisgICAgICAgICAgICByZXN1bHQgfD0gbV9zdHJ1
Y3R1cmUuYWRkQWxsKG90aGVyLm1fc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVl
ICE9IG90aGVyLm1fdmFsdWUpCisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsK
KyAgICAgICAgfQogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2Vu
Y3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGph
Y2VuY3lMaXN0LmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw5IEBAIHB1
YmxpYzoKICAgICAgICAgRml4ZWQsCiAgICAgICAgIFZhcmlhYmxlCiAgICAgfTsKLQorICAgIAor
ICAgICNkZWZpbmUgQWRqYWNlbmN5TGlzdFNpemUgMworICAgIAogICAgIEFkamFjZW5jeUxpc3Qo
S2luZCBraW5kKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBtX2tpbmQoa2luZCkK
QEAgLTc0LDIxICs3NiwyMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgRWRnZSYgY2hpbGQo
dW5zaWduZWQgaSkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpIDwgMyk7CisgICAgICAg
IEFTU0VSVChpIDwgQWRqYWNlbmN5TGlzdFNpemUpOwogICAgICAgICBBU1NFUlQobV9raW5kID09
IEZpeGVkKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CiAgICAgfSAgICAKICAgICAKICAg
ICBFZGdlJiBjaGlsZCh1bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCAzKTsK
KyAgICAgICAgQVNTRVJUKGkgPCBBZGphY2VuY3lMaXN0U2l6ZSk7CiAgICAgICAgIEFTU0VSVCht
X2tpbmQgPT0gRml4ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBzZXRDaGlsZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2UpCiAgICAgewotICAg
ICAgICBBU1NFUlQoaSA8IDMwKTsKKyAgICAgICAgQVNTRVJUKGkgPCBBZGphY2VuY3lMaXN0U2l6
ZSk7CiAgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAgICBtX3dvcmRzW2ld
ID0gbm9kZVVzZTsKICAgICB9CkBAIC0xNTAsNyArMTUyLDcgQEAgcHVibGljOgogICAgIH0KICAg
ICAKIHByaXZhdGU6Ci0gICAgRWRnZSBtX3dvcmRzWzNdOworICAgIEVkZ2UgbV93b3Jkc1tBZGph
Y2VuY3lMaXN0U2l6ZV07CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIEtpbmQgbV9raW5kOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
cmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDIzIEBAIHN0cnVjdCBCYXNpY0Jsb2Nr
IDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICAgICAgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxvY2Fs
cyhuZXdOdW1Mb2NhbHMpOwogICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051
bUxvY2Fscyk7CiAgICAgfQorICAgIAorICAgIHNpemVfdCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0
dXJuIHBoaXMuc2l6ZSgpICsgc2l6ZSgpOyB9CisgICAgTm9kZUluZGV4IG5vZGVJbmRleChzaXpl
X3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpIDwgcGhpcy5zaXplKCkpCisgICAgICAg
ICAgICByZXR1cm4gcGhpc1tpXTsKKyAgICAgICAgcmV0dXJuIGF0KGkgLSBwaGlzLnNpemUoKSk7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNJblBoaXMoTm9kZUluZGV4IG5vZGVJbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgaWYgKHBoaXNbaV0gPT0gbm9kZUluZGV4KQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CiAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYmxvY2sgbGlua2lu
ZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xlc3MKICAgICAvLyBmb3Igb3Ro
ZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NSwxMCArOTUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJlcGFyZVRvUGFyc2VC
bG9jaygpOwogICAgIC8vIFBhcnNlIGEgc2luZ2xlIGJhc2ljIGJsb2NrIG9mIGJ5dGVjb2RlIGlu
c3RydWN0aW9ucy4KICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpOwotICAgIC8v
IEZpbmQgcmVhY2hhYmxlIGNvZGUgYW5kIHNldHVwIHByZWRlY2Vzc29yIGxpbmtzIGluIHRoZSBn
cmFwaCdzIEJhc2ljQmxvY2tzLgotICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7Ci0g
ICAgLy8gRW5xdWV1ZSBhIGJsb2NrIG9udG8gdGhlIHdvcmtsaXN0LCBpZiBuZWNlc3NhcnkuCi0g
ICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3Qs
IEJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29yKTsKICAgICAvLyBMaW5rIGJsb2NrIHN1
Y2Nlc3NvcnMuCiAgICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxCbG9ja0lu
ZGV4PiYgcG9zc2libGVUYXJnZXRzKTsKICAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPFVubGlu
a2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJsZVRh
cmdldHMpOwpAQCAtMjU4NSw0MSArMjU4MSw2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtC
bG9ja3MoVmVjdG9yPFUKICAgICB9CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVN1
Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9j
a0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KQotewotICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3Nbc3VjY2Vzc29ySW5kZXhdLmdldCgpOwotICAgIGlm
ICghc3VjY2Vzc29yLT5pc1JlYWNoYWJsZSkgewotICAgICAgICBzdWNjZXNzb3ItPmlzUmVhY2hh
YmxlID0gdHJ1ZTsKLSAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3NvckluZGV4KTsKLSAg
ICB9Ci0gICAgCi0gICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2tJbmRl
eCk7Ci19Ci0KLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmRldGVybWluZVJlYWNoYWJpbGl0eSgpCi17
Ci0gICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlzdDsKLSAgICB3b3JrbGlzdC5hcHBl
bmQoMCk7Ci0gICAgbV9ncmFwaC5tX2Jsb2Nrc1swXS0+aXNSZWFjaGFibGUgPSB0cnVlOwotICAg
IHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEJsb2NrSW5kZXggaW5kZXgg
PSB3b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAg
ICAgCi0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tpbmRleF0u
Z2V0KCk7Ci0gICAgICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQpOwotICAgICAgICAKLSAgICAg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmxhc3QoKV07Ci0gICAgICAgIEFTU0VSVChu
b2RlLmlzVGVybWluYWwoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkK
LSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5C
bG9ja0luZGV4KCkpOwotICAgICAgICBlbHNlIGlmIChub2RlLmlzQnJhbmNoKCkpIHsKLSAgICAg
ICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0lu
ZGV4KCkpOwotICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9k
ZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmJ1aWxkT3BlcmFuZE1hcHNJZk5lY2Vzc2FyeSgpCiB7CiAgICAgaWYgKG1f
aGF2ZUJ1aWx0T3BlcmFuZE1hcHMpCkBAIC0yODMxLDcgKzI3OTIsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZSgpCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKIAogICAgIGxpbmtCbG9ja3Mo
aW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxv
Y2tMaW5raW5nVGFyZ2V0cyk7Ci0gICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CisgICAgbV9n
cmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCiAgICAgZGF0YUxvZygiUHJvY2Vzc2luZyBsb2NhbCB2YXJpYWJsZSBw
aGlzLlxuIik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZB
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZB
UGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAg
IHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIG1f
Y291bnQgPSAwOwpAQCAtNjUsMTIgKzY1LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgcGVyZm9ybUZvcndhcmRDRkEoKTsKICAgICAgICAg
fSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBwZXJmb3JtQmxvY2tDRkEoQmxvY2tJbmRleCBi
bG9ja0luZGV4KQogICAgIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBpZiAoIWJsb2NrLT5jZmFTaG91bGRSZXZpc2l0KQogICAgICAg
ICAgICAgcmV0dXJuOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
QEAgLTEyNiw5ICsxMzAsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi12b2lkIHBlcmZvcm1D
RkEoR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtQ0ZBKEdyYXBoJiBncmFwaCkKIHsKLSAgICBy
dW5QaGFzZTxDRkFQaGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFzZTxDRkFQaGFzZT4o
Z3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyB0aGUgY29kZSBibG9jay4gSXQncyBhbHNvIHJlc3Bv
bnNpYmxlIGZvciBpZGVudGlmeWluZyBkZWFkIGNvZGUsIGFuZCBpbiB0aGUKIC8vIGZ1dHVyZSBz
aG91bGQgYmUgdXNlZCBhcyBhIGhvb2sgZm9yIGNvbnN0YW50IHByb3BhZ2F0aW9uLgogCi12b2lk
IHBlcmZvcm1DRkEoR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybUNGQShHcmFwaCYpOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5j
bHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRl
ICJERkdQaGFzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IENGR1NpbXBsaWZpY2F0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIENG
R1NpbXBsaWZpY2F0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBo
LCAiQ0ZHIHNpbXBsaWZpY2F0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVu
KCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7ICsrIGJsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAo
IWJsb2NrLT5pc1JlYWNoYWJsZSkgeworICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShi
bG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLm9w
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgSnVtcDogeworICAgICAgICAgICAgICAgIC8vIFN1Y2Nl
c3NvciB3aXRoIG9uZSBwcmVkZWNlc3NvciAtPiBtZXJnZS4KKyAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCldLT5tX3ByZWRlY2Vz
c29ycy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaC5t
X2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCldLT5tX3ByZWRlY2Vzc29yc1swXQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gYmxvY2tJbmRleCk7CisgICAgICAgICAgICAg
ICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAw
KSwgTm9CbG9jayk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
QmxvY2sgb25seSBoYXMgYSBqdW1wIC0+IHJlbW92ZS4gVGhpcyBpcyB0cmlja3kgdGhvdWdoIGJl
Y2F1c2Ugb2YKKyAgICAgICAgICAgICAgICAvLyBsaXZlbmVzcy4gV2hhdCB3ZSByZWFsbHkgd2Fu
dCBpcyB0byBzbGFtIGluIGEgcGhhbnRvbSBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAg
ICAgIC8vIGJsb2NrLCBhZnRlciB0aGUgdGVybWluYWwuIEJ1dCB3ZSBjYW4ndCByaWdodCBub3cu
IDotKAorICAgICAgICAgICAgICAgIC8vIElkZWE6IHdoYXQgaWYgSSBzbGFtIHRoZSBnaG9zdGll
cyBpbnRvIG15IHN1Y2Nlc3Nvcj8gTm9wZSwgdGhhdCdzCisgICAgICAgICAgICAgICAgLy8gc3Vi
b3B0aW1hbCwgYmVjYXVzZSBpZiBteSBzdWNjZXNzb3IgaGFzIG11bHRpcGxlIHByZWRlY2Vzc29y
cyB0aGVuIHdlJ2xsCisgICAgICAgICAgICAgICAgLy8gYmUga2VlcGluZyBhbGl2ZSB0aGluZ3Mg
b24gb3RoZXIgcHJlZGVjZXNzb3IgZWRnZXMgdW5uZWNlc3NhcmlseS4KKyAgICAgICAgICAgICAg
ICAvLyBXaGF0IHdlIHJlYWxseSBuZWVkIGlzIHRoZSBub3Rpb24gb2YgZW5kLW9mLWJsb2NrIGdo
b3N0aWVzIQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBCcmFuY2g6IHsKKyAgICAgICAgICAgICAgICAvLyBC
cmFuY2ggb24gY29uc3RhbnQgLT4gamV0dGlzb24gdGhlIG5vdC10YWtlbiBibG9jayBhbmQgbWVy
Z2UuCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbV9ncmFwaFtibG9jay0+bGFzdCgpXS5j
aGlsZDEoKV0uaGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGNvbmRp
dGlvbiA9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0uY2hpbGQxKCkuaW5kZXgoKSkudG9Cb29sZWFuKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzWworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRp
b24pXS0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICA9PSAx
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBibG9ja0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAh
Y29uZGl0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29y
Rm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAg
QmxvY2tJbmRleCBub3RUYWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRp
dGlvbihibG9jaywgIWNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmlzVGVybWlu
YWwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9y
aWdpbiA9IG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0uY29kZU9yaWdpbjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0uc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+bGFz
dCgpXS5yZWZDb3VudCgpID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJ
bmRleCwgYm91bmRhcnlDb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGp1bXBOb2RlSW5kZXggPSBtX2dyYXBoLnNp
emUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUoSnVtcCwg
Ym91bmRhcnlDb2RlT3JpZ2luLCBPcEluZm8odGFrZW5CbG9ja0luZGV4KSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZChqdW1wTm9kZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIEJyYW5jaCB0byBzYW1lIGRlc3RpbmF0aW9uIC0+IGp1bXAuCisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IHRoaXMgd2lsbCBjdXJyZW50bHkgbm90IGJlIGhpdCBi
ZWNhdXNlIG9mIHRoZSBsYWNrIG9mIGp1bXAtb25seQorICAgICAgICAgICAgICAgIC8vIGJsb2Nr
IHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnN1Y2Nlc3Nvcihi
bG9jaywgMCkgPT0gbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDEpKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAw
KSwgTm9CbG9jayk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoY2hhbmdlZCkgeworICAgICAgICAgICAgLy8gSWYgd2UgY2hh
bmdlZCB0aGUgZ3JhcGgsIHRoZW4gc29tZSBibG9ja3MgbWF5IGhhdmUgYmVjb21lIHVucmVhY2hh
YmxlLiBOZWVkIHRvCisgICAgICAgICAgICAvLyBwZXJmb3JtIGEgYmxvY2sgR0Mgb2Ygc29ydHMu
CisgICAgICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIEtpbGwgYW55IG5ldyB1bnJlYWNoYWJsZSBibG9ja3MgdGhhdCB3ZSBp
bnRyb2R1Y2VkLgorICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrIGJsb2NrSW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5pc1JlYWNoYWJsZSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAga2lsbFVucmVh
Y2hhYmxlKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBraWxs
VW5yZWFjaGFibGUoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAg
ICAKKyAgICAgICAgQVNTRVJUKGJsb2NrKTsKKyAgICAgICAgQVNTRVJUKCFibG9jay0+aXNSZWFj
aGFibGUpOworICAgICAgICAKKyAgICAgICAgLy8gMSkgUmVtb3ZlIGl0cyByZWZlcmVuY2VzIHRv
IG90aGVyIGJsb2Nrcy4KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhp
cy5zaXplKCk7ICsrYmxvY2spIHsKKyAgICAgICAgICAgIE5vZGUmIHBoaU5vZGUgPSBtX2dyYXBo
W2Jsb2NrLT5waGlzW2ldXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBB
ZGphY2VuY3lMaXN0U2l6ZTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLmNo
aWxkcmVuLmNoaWxkKGopKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLmRlcmVmKHBoaU5vZGUuY2hpbGRyZW4uY2hpbGQoaikpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAyKSBLaWxsIHRoZSBibG9jawor
ICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7CisgICAgfQorICAg
IAorICAgIE5vZGVJbmRleCBmaW5kT3BlcmFuZFNvdXJjZShjb25zdCBPcGVyYW5kczxOb2RlSW5k
ZXgsIE5vZGVJbmRleFRyYWl0cz4mIHZhcmlhYmxlcywgaW50IG9wZXJhbmQpCisgICAgeworICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gdmFyaWFibGVzLm9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IFNldExvY2FsKQorICAg
ICAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKS5pbmRleCgpOworICAg
ICAgICByZXR1cm4gbm9kZUluZGV4OworICAgIH0KKyAgICAKKyAgICB2b2lkIGtlZXBPcGVyYW5k
QWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgaW50IG9wZXJh
bmQpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5pc0NhcHR1cmVkKG9wZXJhbmQpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZmluZE9wZXJh
bmRTb3VyY2UoYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgb3BlcmFuZCk7CisgICAgICAgIGlmIChu
b2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIW1f
Z3JhcGhbbm9kZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgIT0gU2V0TG9jYWwpOworICAg
ICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgTm9k
ZUluZGV4IHBoYW50b21Ob2RlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgTm9kZSBw
aGFudG9tKFBoYW50b20sIGNvZGVPcmlnaW4sIG5vZGVJbmRleCk7CisgICAgICAgIG1fZ3JhcGgu
YXBwZW5kKHBoYW50b20pOworICAgICAgICBtX2dyYXBoLnJlZihwaGFudG9tTm9kZUluZGV4KTsK
KyAgICAgICAgYmxvY2stPmFwcGVuZChwaGFudG9tTm9kZUluZGV4KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBmaXhQb3NzaWJsZUdldExvY2FsKEJhc2ljQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdl
KQorICAgIHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOworICAgICAgICBp
ZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKG1fZ3JhcGguaXNDYXB0dXJlZChjaGlsZC5sb2NhbCgpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgTm9kZUluZGV4IG9yaWdpbmFsTm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKGNoaWxkLmxvY2FsKCkpOworICAgICAgICBBU1NFUlQob3JpZ2luYWxO
b2RlSW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gJm1fZ3Jh
cGhbb3JpZ2luYWxOb2RlSW5kZXhdOworICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlLT5zaG91
bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgLy8gUG9zc2liaWxpdGllczoKKyAgICAgICAgLy8gU2V0
TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZhbHVlIG9mIHNvbWV0aGlu
ZyB0aGF0IGlzIGltbWVkaWF0ZWx5CisgICAgICAgIC8vICAgICBhdmFpbGFibGUgaW4gdGhlIGZp
cnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2RlSW5kZXguCisgICAgICAgIC8vIEdldExvY2FsIC0+
IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhpbmcgdGhhdCB0
aGUgZmlyc3QKKyAgICAgICAgLy8gICAgIGJsb2NrIGFsc28gZ2V0cy4KKyAgICAgICAgLy8gUGhp
IC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFu
ZCB0aGF0IHRoZSBmaXJzdCBibG9jaworICAgICAgICAvLyAgICAgd2FzIGFsc28gYXNraW5nIGZv
ciBrZWVwLWFsaXZlIG9uLgorICAgICAgICAvLyBTZXRBcmd1bWVudCAtPiB0aGUgc2Vjb25kQmxv
Y2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9wZXJhbmQgdGhhdCB0aGUKKyAgICAg
ICAgLy8gICAgIGZpcnN0IGJsb2NrIHdhcyBrZWVwaW5nIGFsaXZlIGJ5IHZpcnR1ZSBvZiB0aGUg
Zmlyc3RCbG9jayBiZWluZyB0aGUgcm9vdCBhbmQKKyAgICAgICAgLy8gICAgIHRoZSBvcGVyYW5k
IGJlaW5nIGFuIGFyZ3VtZW50LgorICAgICAgICAvLyBGbHVzaCAtPiB0aGUgc2Vjb25kQmxvY2sg
aXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9wZXJhbmQgdGhhdCB0aGUgZmlyc3QKKyAg
ICAgICAgLy8gICAgIGJsb2NrIHdhcyBmb3JjaW5nIHRvIGJlIGFsaXZlLCBzbyB0aGUgc2Vjb25k
IGJsb2NrIHNob3VsZCByZWZlciBjaGlsZCBvZgorICAgICAgICAvLyAgICAgdGhlIGZsdXNoLgor
ICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5vcCgpID09IEZsdXNoKSB7CisgICAgICAgICAgICBv
cmlnaW5hbE5vZGVJbmRleCA9IG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkuaW5kZXgoKTsKKyAgICAg
ICAgICAgIG9yaWdpbmFsTm9kZSA9ICZtX2dyYXBoW29yaWdpbmFsTm9kZUluZGV4XTsKKyAgICAg
ICAgfQorICAgICAgICBzd2l0Y2ggKG9yaWdpbmFsTm9kZS0+b3AoKSkgeworICAgICAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgICAgICBFZGdlIG5ld0VkZ2UgPSBvcmlnaW5hbE5vZGUtPmNo
aWxkMSgpOworICAgICAgICAgICAgRWRnZSBvbGRFZGdlID0gZWRnZTsKKyAgICAgICAgICAgIG1f
Z3JhcGgucmVmKG5ld0VkZ2UpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsK
KyAgICAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAgIGNh
c2UgU2V0QXJndW1lbnQ6IHsKKyAgICAgICAgICAgIEVkZ2UgbmV3RWRnZSA9IGVkZ2U7CisgICAg
ICAgICAgICBFZGdlIG9sZEVkZ2UgPSBlZGdlOworICAgICAgICAgICAgbmV3RWRnZS5zZXRJbmRl
eChvcmlnaW5hbE5vZGVJbmRleCk7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsK
KyAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CisgICAgICAgICAgICBlZGdlID0g
bmV3RWRnZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgamV0dGlzb25CbG9jayhCbG9ja0luZGV4
IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0dGlzb25lZEJsb2NrSW5kZXgsIENvZGVPcmlnaW4g
Ym91bmRhcnlDb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBCYXNpY0Jsb2NrKiBq
ZXR0aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGV4XS5n
ZXQoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25l
ZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAg
ICAgICAga2VlcE9wZXJhbmRBbGl2ZShibG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBhcmd1bWVu
dFRvT3BlcmFuZChpKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25l
ZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAgICAg
ICAga2VlcE9wZXJhbmRBbGl2ZShibG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsKKyAgICAg
ICAgCisgICAgICAgIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoYmxvY2tJbmRleCwgamV0dGlz
b25lZEJsb2NrSW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeEpldHRpc29uZWRQcmVk
ZWNlc3NvcnMoQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9j
a0luZGV4KQorICAgIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgIGRhdGFMb2coIkZpeGluZyBwcmVkZWNlc3NvcnMgYW5kIHBoaXMgZHVlIHRvIGpl
dHRpc29uIG9mIEJsb2NrICMldSBmcm9tIEJsb2NrICMldS5cbiIsCisgICAgICAgICAgICAgICAg
amV0dGlzb25lZEJsb2NrSW5kZXgsIGJsb2NrSW5kZXgpOworI2VuZGlmCisgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAg
ICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNv
bmVkQmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBq
ZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBpZiAoamV0dGlzb25lZEJsb2NrLT5tX3ByZWRlY2Vzc29yc1tpXSAhPSBibG9ja0luZGV4KQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5t
X3ByZWRlY2Vzc29yc1tpXSA9IGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMubGFzdCgp
OworICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5tX3ByZWRlY2Vzc29ycy5yZW1vdmVMYXN0
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+cGhpcy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IGpldHRpc29uZWRCbG9jay0+cGhpc1tpXTsKKyAg
ICAgICAgICAgIE5vZGUmIHBoaU5vZGUgPSBtX2dyYXBoW3BoaU5vZGVJbmRleF07CisgICAgICAg
ICAgICBOb2RlSW5kZXggbXlOb2RlSW5kZXggPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJh
bmQocGhpTm9kZS5sb2NhbCgpKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCisgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyByZW1vdmluZyByZWZlcmVu
Y2UgZnJvbSBwaGkgQCV1IHRvIEAldSBvbiBsb2NhbCByJWQ6IiwKKyAgICAgICAgICAgICAgICAg
ICAgcGhpTm9kZUluZGV4LCBteU5vZGVJbmRleCwgcGhpTm9kZS5sb2NhbCgpKTsKKyNlbmRpZgor
ICAgICAgICAgICAgQVNTRVJUKG15Tm9kZUluZGV4ICE9IE5vTm9kZSk7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgQWRqYWNlbmN5TGlzdFNpemU7ICsraikKKyAgICAgICAg
ICAgICAgICByZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UobXlOb2RlSW5kZXgsIHBo
aU5vZGUsIGopOworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAg
ICAgICAgICAgIGRhdGFMb2coIlxuIik7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIHJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJlZmVyZW5jZShOb2RlSW5kZXggbXlO
b2RlSW5kZXgsIE5vZGUmIHBoaU5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCkKKyAgICB7CisgICAg
ICAgIGlmIChwaGlOb2RlLmNoaWxkcmVuLmNoaWxkKGVkZ2VJbmRleCkuaW5kZXhVbmNoZWNrZWQo
KSAhPSBteU5vZGVJbmRleCkKKyAgICAgICAgICAgIHJldHVybjsKKyNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIiBSZW1vdmluZyByZWZl
cmVuY2UgYXQgY2hpbGQgJXUuIiwgZWRnZUluZGV4KTsKKyNlbmRpZgorICAgICAgICBtX2dyYXBo
LmRlcmVmKG15Tm9kZUluZGV4KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZWRnZUluZGV4
OyBpIDwgQWRqYWNlbmN5TGlzdFNpemUgLSAxOyArK2kpCisgICAgICAgICAgICBwaGlOb2RlLmNo
aWxkcmVuLnNldENoaWxkKGksIHBoaU5vZGUuY2hpbGRyZW4uY2hpbGQoaSArIDEpKTsKKyAgICAg
ICAgcGhpTm9kZS5jaGlsZHJlbi5zZXRDaGlsZChBZGphY2VuY3lMaXN0U2l6ZSAtIDEsIEVkZ2Uo
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZml4VGFpbE9wZXJhbmQoQmFzaWNCbG9jayogZmly
c3RCbG9jaywgQmFzaWNCbG9jayogc2Vjb25kQmxvY2ssIGludCBvcGVyYW5kKQorICAgIHsKKyAg
ICAgICAgTm9kZUluZGV4IGF0U2Vjb25kVGFpbCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmlzQ2Fw
dHVyZWQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgYmxvY2sgZGlkIHNv
bWV0aGluZyB0byBhIHZhcmlhYmxlIHRoYXQgaXMgY2FwdHVyZWQsIHNvIHJlZmxlY3QgdGhpcy4K
KyAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQp
ID0gYXRTZWNvbmRUYWlsOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoYXRTZWNvbmRUYWlsID09IE5vTm9kZSkgeworICAgICAgICAgICAgLy8g
SWYgdGhlIHZhcmlhYmxlIGlzIGRlYWQgYXQgdGhlIGVuZCBvZiB0aGUgc2Vjb25kIGJsb2NrLCB0
aGVuIGRvIG5vdGhpbmc7IGVzc2VudGlhbGx5CisgICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRo
YXQgd2Ugd2FudCB0aGUgdGFpbCBzdGF0ZSB0byByZWZsZWN0IHdoYXRldmVyIHRoZSBmaXJzdCBi
bG9jayBkaWQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIE5vZGUmIHNlY29uZE5vZGUgPSBtX2dyYXBoW2F0U2Vjb25kVGFpbF07CisgICAgICAgIHN3
aXRjaCAoc2Vjb25kTm9kZS5vcCgpKSB7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAg
IGNhc2UgRmx1c2g6IHsKKyAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgYmxvY2sgZGlkIGludGVy
ZXN0aW5nIHRoaW5ncyB0byB0aGUgdmFyaWFibGVzLCBzbyB1cGRhdGUgdGhlIHRhaWwKKyAgICAg
ICAgICAgIC8vIGFjY29yZGluZ2x5LgorICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBhdFNlY29uZFRhaWw7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAg
ICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAvLyBLZWVwIHdoYXQgd2FzIGluIHRoZSBmaXJz
dCBibG9jay4KKyAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKSAhPSBOb05vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZUJsb2Nr
cygKKyAgICAgICAgQmxvY2tJbmRleCBmaXJzdEJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc2Vjb25k
QmxvY2tJbmRleCwgQmxvY2tJbmRleCBqZXR0aXNvbmVkQmxvY2tJbmRleCkKKyAgICB7CisgICAg
ICAgIC8vIFRoaXMgd2lsbCBhZGQgYWxsIG9mIHRoZSBub2RlcyBpbiBzZWNvbmRCbG9jayB0byBm
aXJzdEJsb2NrLCBidXQgaW4gc28gZG9pbmcKKyAgICAgICAgLy8gaXQgd2lsbCBhbHNvIGVuc3Vy
ZSB0aGF0IGFueSBHZXRMb2NhbHMgZnJvbSB0aGUgc2Vjb25kIGJsb2NrIHRoYXQgcmVmZXIgdG8K
KyAgICAgICAgLy8gU2V0TG9jYWxzIGluIHRoZSBmaXJzdCBibG9jayBhcmUgcmVsaW5rZWQuIElm
IGpldHRpc29uZWRCbG9jayBpcyBub3QgTm9CbG9jaywKKyAgICAgICAgLy8gdGhlbiBQaGFudG9t
cyBhcmUgaW5zZXJ0ZWQgZm9yIGFueXRoaW5nIHRoYXQgdGhlIGpldHRpc29uZWRCbG9jayB3b3Vs
ZCBoYXZlCisgICAgICAgIC8vIGtlcHQgYWxpdmUuCisgICAgICAgIAorICAgICAgICBCYXNpY0Js
b2NrKiBmaXJzdEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tmaXJzdEJsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBCYXNpY0Jsb2NrKiBzZWNvbmRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nbc2Vj
b25kQmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIAorICAgICAgICAvLyBSZW1vdmUgdGhlIHRl
cm1pbmFsIG9mIGZpcnN0QmxvY2sgc2luY2Ugd2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlLiBXZWxs
LCB3ZSBkb24ndAorICAgICAgICAvLyByZWFsbHkgcmVtb3ZlIGl0OyB3ZSBhY3R1YWxseSB0dXJu
IGl0IGludG8gYSBQaGFudG9tLgorICAgICAgICBBU1NFUlQobV9ncmFwaFtmaXJzdEJsb2NrLT5s
YXN0KCldLmlzVGVybWluYWwoKSk7CisgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3Jp
Z2luID0gbV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLmNvZGVPcmlnaW47CisgICAgICAgIG1f
Z3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsK
KyAgICAgICAgQVNTRVJUKG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5yZWZDb3VudCgpID09
IDEpOworICAgICAgICAKKyAgICAgICAgaWYgKGpldHRpc29uZWRCbG9ja0luZGV4ICE9IE5vQmxv
Y2spIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBUaW1lIHRvIGluc2VydCBnaG9zdGllcyBmb3IgdGhpbmdzIHRoYXQgbmVlZCB0
byBiZSBrZXB0IGFsaXZlIGluIGNhc2Ugd2UgT1NSCisgICAgICAgICAgICAvLyBleGl0IHByaW9y
IHRvIGhpdHRpbmcgdGhlIGZpcnN0QmxvY2sncyB0ZXJtaW5hbCwgYW5kIGVuZCB1cCBnb2luZyBk
b3duIGEKKyAgICAgICAgICAgIC8vIGRpZmZlcmVudCBwYXRoIHRoYW4gc2Vjb25kQmxvY2suCisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25l
ZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAg
ICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoZmlyc3RCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2lu
LCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkKKyAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0QmxvY2ssIGJvdW5kYXJ5
Q29kZU9yaWdpbiwgaSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBm
aXJzdEJsb2NrLT5waGlzLmFwcGVuZChzZWNvbmRCbG9jay0+cGhpc1tpXSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IHNlY29uZEJsb2NrLT5hdChpKTsK
KyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAg
ICBpZiAobm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUu
b3AoKSA9PSBQaGFudG9tICYmIG5vZGUuY2hpbGQxKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Tm9kZSYgcG9zc2libGVMb2NhbE9wID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHBvc3NpYmxlTG9jYWxPcC5oYXNMb2NhbCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggc2V0TG9jYWxJbmRleCA9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocG9zc2libGVM
b2NhbE9wLmxvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYgc2V0TG9jYWwg
PSBtX2dyYXBoW3NldExvY2FsSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNl
dExvY2FsLm9wKCkgPT0gU2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
ZGdlIG5ld0VkZ2UgPSBzZXRMb2NhbC5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFZGdlIG9sZEVkZ2UgPSBub2RlLmNoaWxkMSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKG5ld0VkZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS5jaGlsZHJlbi5zZXRDaGlsZDEobmV3RWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGEgR2V0TG9jYWwsIHRoZW4g
d2UgbWlnaHQgbGlrZSB0byBmaXggaXQuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3Mo
KSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpCisgICAgICAgICAgICAgICAgICAgICAgICBm
aXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltj
aGlsZElkeF0pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZDEoKSkgewor
ICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUu
Y2hpbGRyZW4uY2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDIo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJs
b2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLmNoaWxkMygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxl
R2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGlsZDMoKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmaXJzdEJsb2NrLT5hcHBlbmQobm9kZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gRml4IHRoZSBwcmVkZWNlc3NvcnMgb2YgbXkgbmV3IHN1Y2Nlc3NvcnMuIFRoaXMg
aXMgdHJpY2t5LCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gcmVzZXQKKyAgICAgICAgLy8gYWxsIHBy
ZWRlY2Vzc29ycyBhbnl3YXkgZHVlIHRvIHJlYWNoYWJpbGl0eSBhbmFseXNpcy4gQnV0IHdlIG5l
ZWQgdG8gZml4IHRoZQorICAgICAgICAvLyBwcmVkZWNlc3NvcnMgZWFnZXJseSB0byBlbnN1cmUg
dGhhdCB3ZSBrbm93IHdoYXQgdGhleSBhcmUgaW4gY2FzZSB0aGUgbmV4dCBibG9jayB3ZQorICAg
ICAgICAvLyBjb25zaWRlciBpbiB0aGlzIHBoYXNlIHdpc2hlcyB0byBxdWVyeSB0aGUgcHJlZGVj
ZXNzb3JzIG9mIG9uZSBvZiB0aGUgYmxvY2tzIHdlCisgICAgICAgIC8vIGFmZmVjdGVkLgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoZmlyc3RCbG9jayk7
IGktLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9i
bG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoZmlyc3RCbG9jaywgaSldLmdldCgpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuc2l6
ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29y
c1tqXSA9PSBzZWNvbmRCbG9ja0luZGV4KQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3It
Pm1fcHJlZGVjZXNzb3JzW2pdID0gZmlyc3RCbG9ja0luZGV4OworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaXggdGhlIHByZWRlY2Vzc29ycyBvZiBteSBm
b3JtZXIgc3VjY2Vzc29ycy4gQWdhaW4sIHdlJ2QgcmF0aGVyIG5vdCBkbyB0aGlzLCBidXQgaXQn
cworICAgICAgICAvLyBhbiB1bmZvcnR1bmF0ZSBuZWNlc3NpdHkuIFNlZSBhYm92ZSBjb21tZW50
LgorICAgICAgICBpZiAoamV0dGlzb25lZEJsb2NrSW5kZXggIT0gTm9CbG9jaykKKyAgICAgICAg
ICAgIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoZmlyc3RCbG9ja0luZGV4LCBqZXR0aXNvbmVk
QmxvY2tJbmRleCk7CisgICAgICAgIAorICAgICAgICAvLyBGaXggdXAgdGhlIHZhcmlhYmxlcyBh
dCB0YWlsLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAgICAgICAgZml4VGFp
bE9wZXJhbmQoZmlyc3RCbG9jaywgc2Vjb25kQmxvY2ssIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkKKyAgICAgICAgICAgIGZpeFRhaWxPcGVyYW5kKGZp
cnN0QmxvY2ssIHNlY29uZEJsb2NrLCBpKTsKKyAgICAgICAgZmlyc3RCbG9jay0+dmFsdWVzQXRU
YWlsID0gc2Vjb25kQmxvY2stPnZhbHVlc0F0VGFpbDsKKyAgICAgICAgCisgICAgICAgIG1fZ3Jh
cGgubV9ibG9ja3Nbc2Vjb25kQmxvY2tJbmRleF0uY2xlYXIoKTsKKyAgICB9Cit9OworCitib29s
IHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgcmV0dXJuIHJ1
blBoYXNlPENGR1NpbXBsaWZpY2F0aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2VfaAorI2RlZmluZSBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlX2gK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENGRyBz
aW1wbGlmaWNhdGlvbjoKKy8vCisvLyBqdW1wIHRvIHNpbmdsZSBwcmVkZWNlc3NvciAtPiBtZXJn
ZSBibG9ja3MKKy8vIGJyYW5jaCBvbiBjb25zdGFudCAtPiBqdW1wCisvLyBicmFuY2ggdG8gc2Ft
ZSBibG9ja3MgLT4ganVtcAorLy8ganVtcC1vbmx5IGJsb2NrIC0+IHJlbW92ZQorLy8ga2lsbCBk
ZWFkIGNvZGUKKworYm9vbCBwZXJmb3JtQ0ZHU2ltcGxpZmljYXRpb24oR3JhcGgmKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSwxMCArNDUsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgbV9yZXBsYWNlbWVudHNbaV0gPSBO
b05vZGU7CiAgICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9jaykKLSAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NTRSgqbV9ncmFw
aC5tX2Jsb2Nrc1tibG9ja10pOworICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tdLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7IC8vIE1heWJlIHdl
J2xsIG5lZWQgdG8gbWFrZSB0aGlzIHJlYXNvbiBhYm91dCB3aGV0aGVyIGl0IGNoYW5nZWQgdGhl
IGdyYXBoIGluIGFuIGFjdGlvbmFibGUgd2F5PwogICAgIH0KICAgICAKIHByaXZhdGU6CkBAIC0x
MzksNTIgKzE0MCw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQog
ICAgIAotICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSYgbm9kZSkKLSAgICB7Ci0g
ICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGlj
dGlvbigpOwotICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIHJldHVybiBpc051bWJlclByZWRpY3Rpb24obGVm
dCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBs
b2dpY2FsTm90SXNQdXJlKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAg
ICAgcmV0dXJuIGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikgfHwgIXByZWRpY3Rpb247
Ci0gICAgfQotICAgIAotICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKQotICAgICAgICAgICAgJiYgKChub2RlLm9wKCkgPT0gUHV0QnlWYWwgfHwgbm9kZS5vcCgp
ID09IFB1dEJ5VmFsQWxpYXMpCi0gICAgICAgICAgICAgICAgPyBpc0FjdGlvbmFibGVNdXRhYmxl
QXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKQotICAg
ICAgICAgICAgICAgIDogaXNBY3Rpb25hYmxlQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgY2xvYmJlcnNX
b3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVDbG9iYmVy
c1dvcmxkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghKG5vZGUuZmxh
Z3MoKSAmIE5vZGVNaWdodENsb2JiZXIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICBjYXNlIFZhbHVlQWRkOgotICAgICAg
ICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0gICAgICAg
IGNhc2UgQ29tcGFyZUdyZWF0ZXI6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAg
ICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgICAgICByZXR1cm4gIWlzUHJlZGljdGVkTnVt
ZXJpY2FsKG5vZGUpOwotICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6Ci0gICAgICAgICAgICByZXR1
cm4gIWxvZ2ljYWxOb3RJc1B1cmUobm9kZSk7Ci0gICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAg
ICAgICAgICByZXR1cm4gIWJ5VmFsSXNQdXJlKG5vZGUpOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsg
Ly8gSWYgYnkgc29tZSBvZGRpdHkgd2UgaGl0IHRoaXMgY2FzZSBpbiByZWxlYXNlIGJ1aWxkIGl0
J3Mgc2FmZXIgdG8gaGF2ZSBDU0UgYXNzdW1lIHRoZSB3b3JzdC4KLSAgICAgICAgfQotICAgIH0K
LSAgICAKICAgICBOb2RlSW5kZXggaW1wdXJlQ1NFKE5vZGUmIG5vZGUpCiAgICAgewogICAgICAg
ICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQxKCkpOwpAQCAtMjE1
LDcgKzE3MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRl
eCkpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAt
MjM4LDcgKzE5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29y
bGQoaW5kZXgpKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKQEAgLTI1NCwxNCArMjA5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewogICAg
ICAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAgICAgICBpZiAoIWJ5VmFsSXNQdXJl
KG5vZGUpKQorICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBpZiAo
bm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpID09
IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAg
ICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmICghYnlWYWxJ
c1B1cmUobm9kZSkpCisgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5v
ZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAg
IGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIo
KSkgPT0gY2Fub25pY2FsaXplKGNoaWxkMikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlLmNoaWxkMygpLmluZGV4KCk7CkBAIC0yODAsNyArMjM1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAvLyBBIHB1c2ggY2Fubm90IGFmZmVjdCBwcmV2aW91c2x5IGV4aXN0aW5nIGVs
ZW1lbnRzIGluIHRoZSBhcnJheS4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQpAQCAtMzMxLDcgKzI4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OgotICAgICAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSkgeworICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3
aXRoIGFuCiAgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBp
bXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAg
ICAvLyBjaGFuZ2UuCkBAIC0zNDAsNyArMjk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAt
Mzc3LDcgKzMzMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAg
ICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5
VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAgICAg
ICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZv
ciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2Uu
CkBAIC0zODYsNyArMzQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9O
b2RlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05v
ZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00MTYsNyArMzcx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYg
KGJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJ
c1B1cmUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3Vs
YXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAgICAg
ICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNh
dXNlIGEgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KQEAgLTQyNSw3
ICszODAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChj
bG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTQ2MSwxMiArNDE2LDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmIChpc0ZpeGVkSW5kZXhlZFN0
b3JhZ2VPYmplY3RQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
KSAmJiBieVZhbElzUHVyZShub2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoaXNGaXhlZEluZGV4
ZWRTdG9yYWdlT2JqZWN0UHJlZGljdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKSkgJiYgbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKIAogICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CkBAIC02MTAsNiArNTY1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJc1N0cmluZzoK
ICAgICAgICAgY2FzZSBJc09iamVjdDoKICAgICAgICAgY2FzZSBJc0Z1bmN0aW9uOgorICAgICAg
ICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5v
ZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC02MzUsMTggKzU5MSw5
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgICAgIGNhc2Ug
Q29tcGFyZUdyZWF0ZXJFcToKICAgICAgICAgY2FzZSBDb21wYXJlRXE6IHsKLSAgICAgICAgICAg
IGlmIChpc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKSkgewotICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgICAgICBp
ZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgaXNQcmVkaWN0ZWROdW1lcmljYWwobV9n
cmFwaFtyZXBsYWNlbWVudEluZGV4XSkpCi0gICAgICAgICAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KHJlcGxhY2VtZW50SW5kZXgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKLSAg
ICAgICAgICAgIGlmIChsb2dpY2FsTm90SXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICBpZiAo
bV9ncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKSkgewogICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgICAg
ICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgbG9naWNhbE5vdElzUHVyZShtX2dy
YXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKKyAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJ
bmRleCAhPSBOb05vZGUgJiYgbV9ncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChtX2dyYXBoW3Jl
cGxhY2VtZW50SW5kZXhdKSkKICAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVw
bGFjZW1lbnRJbmRleCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTY1
OSwxMiArNjA2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5v
ZGUpKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGls
ZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBpZiAo
YnlWYWxJc1B1cmUobm9kZSkgJiYgZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEo
KS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCkpICE9IE5vTm9kZSkKKyAgICAgICAgICAg
IGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpICYmIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9u
KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKSAhPSBOb05vZGUp
CiAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChQdXRCeVZhbEFsaWFzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCkBAIC03MDQsMTQgKzY1MSwxOSBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAgICAgfQogICAgIAotICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2smIGJs
b2NrKQorICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsK
LSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAmYmxvY2s7CisgICAgICAgIGlmICghYmxvY2spCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9j
azsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IExhc3ROb2RlVHlwZTsgKytpKQog
ICAgICAgICAgICAgbV9sYXN0U2VlbltpXSA9IFVJTlRfTUFYOwogCi0gICAgICAgIGZvciAobV9p
bmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKyttX2luZGV4
SW5CbG9jaykgewotICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBibG9ja1ttX2luZGV4SW5C
bG9ja107CisgICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8
IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKKyAgICAgICAgICAgIG1fY29tcGls
ZUluZGV4ID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIHBlcmZvcm1O
b2RlQ1NFKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KQEAgLTcy
Myw5ICs2NzUsOSBAQCBwcml2YXRlOgogICAgIEZpeGVkQXJyYXk8dW5zaWduZWQsIExhc3ROb2Rl
VHlwZT4gbV9sYXN0U2VlbjsKIH07CiAKLXZvaWQgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCiti
b29sIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNlPENTRVBoYXNlPihn
cmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPENTRVBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1NFUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBHcmFw
aDsKIC8vIGEgd2lkZSByYW5nZSBvZiBzdWJleHByZXNzaW9uIHNpbWlsYXJpdGllcy4gSXQncyBr
bm93biB0byBwcm9kdWNlIGJpZyB3aW5zCiAvLyBvbiBhIGZldyBiZW5jaG1hcmtzLCBhbmQgaXMg
cmVsYXRpdmVseSBjaGVhcCB0byBydW4uCiAKLXZvaWQgcGVyZm9ybUNTRShHcmFwaCYpOworYm9v
bCBwZXJmb3JtQ1NFKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw5ICszNyw5IEBACiAjZGVmaW5lIERGR19FTkFCTEUoREZHX0ZFQVRVUkUpIChkZWZpbmVk
IERGR19FTkFCTEVfIyNERkdfRkVBVFVSRSAmJiBERkdfRU5BQkxFXyMjREZHX0ZFQVRVUkUpCiAK
IC8vIEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1
ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMuCi0jZGVmaW5lIERGR19FTkFCTEVfREVC
VUdfVkVSQk9TRSAwCisjZGVmaW5lIERGR19FTkFCTEVfREVCVUdfVkVSQk9TRSAxCiAvLyBFbWl0
IGR1bXBzIGR1cmluZyBwcm9wYWdhdGlvbiwgaW4gYWRkaXRpb24gdG8ganVzdCBhZnRlci4KLSNk
ZWZpbmUgREZHX0VOQUJMRV9ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFIDAKKyNkZWZpbmUgREZH
X0VOQUJMRV9ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFIDEKIC8vIEVtaXQgbG9nZ2luZyBmb3Ig
T1NSIGV4aXQgdmFsdWUgcmVjb3ZlcmllcyBhdCBldmVyeSBub2RlLCBub3QganVzdCBub2RlcyB0
aGF0CiAvLyBhY3R1YWxseSBoYXMgc3BlY3VsYXRpb24gY2hlY2tzLgogI2RlZmluZSBERkdfRU5B
QkxFX1ZFUkJPU0VfVkFMVUVfUkVDT1ZFUklFUyAwCkBAIC00OSw2ICs0OSwxMiBAQAogI2Vsc2UK
ICNkZWZpbmUgREZHX0VOQUJMRV9KSVRfQVNTRVJUIDAKICNlbmRpZgorLy8gRW5hYmxlIHZhbGlk
YXRpb24gb2YgdGhlIGdyYXBoLgorI2lmICFBU1NFUlRfRElTQUJMRUQKKyNkZWZpbmUgREZHX0VO
QUJMRV9WQUxJREFUSU9OIDEKKyNlbHNlCisjZGVmaW5lIERGR19FTkFCTEVfVkFMSURBVElPTiAw
CisjZW5kaWYKIC8vIENvbnNpc3RlbmN5IGNoZWNrIGNvbnRlbnRzIGNvbXBpbGVyIGRhdGEgc3Ry
dWN0dXJlcy4KICNkZWZpbmUgREZHX0VOQUJMRV9DT05TSVNURU5DWV9DSEVDSyAwCiAvLyBFbWl0
IGEgYnJlYWtwb2ludCBpbnRvIHRoZSBoZWFkIG9mIGV2ZXJ5IGdlbmVyYXRlZCBmdW5jdGlvbiwg
dG8gYWlkIGRlYnVnZ2luZyBpbiBHREIuCkBAIC02Miw3ICs2OCw3IEBACiAvLyBFbWl0IGEgYnJl
YWtwb2ludCBpbnRvIHRoZSBzcGVjdWxhdGlvbiBmYWlsdXJlIGNvZGUuCiAjZGVmaW5lIERGR19F
TkFCTEVfSklUX0JSRUFLX09OX1NQRUNVTEFUSU9OX0ZBSUxVUkUgMAogLy8gTG9nIGV2ZXJ5IHNw
ZWN1bGF0aW9uIGZhaWx1cmUuCi0jZGVmaW5lIERGR19FTkFCTEVfVkVSQk9TRV9TUEVDVUxBVElP
Tl9GQUlMVVJFIDAKKyNkZWZpbmUgREZHX0VOQUJMRV9WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxV
UkUgMQogLy8gRGlzYWJsZSB0aGUgREZHIEpJVCB3aXRob3V0IGhhdmluZyB0byB0b3VjaCBQbGF0
Zm9ybS5oCiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFIDAKIC8vIEVuYWJsZSBPU1Ig
ZW50cnkgZnJvbSBiYXNlbGluZSBKSVQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEzICs0MywxNyBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAg
Ym9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAogICAgICAgICBBYnN0cmFjdFN0YXRlIHN0
YXRlKG1fZ3JhcGgpOwogICAgICAgICBJbnNlcnRpb25TZXQ8Tm9kZUluZGV4PiBpbnNlcnRpb25T
ZXQ7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgaWYgKCFibG9jay0+Y2ZhRm91bmRDb25zdGFudHMpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2sp
OwpAQCAtNjAsMjkgKzY0LDUzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKQotICAgICAgICAgICAgICAgICAgICB8fCAobm9kZS5mbGFncygpICYg
KE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9kZU1pZ2h0Q2xvYmJlcikpCisgICAgICAgICAgICAgICAg
ICAgIHx8IG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKQogICAgICAgICAgICAgICAgICAgICB8
fCBub2RlLmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdGF0ZS5mb3JOb2RlKG5vZGVJbmRleCkudmFs
dWUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBOb2RlIHBoYW50b20o
UGhhbnRvbSwgbm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChtX2dyYXBoW25vZGUuY2hpbGQxKCldLm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLmhhc1Jlc3VsdCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9PSBub2RlSW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzSW5QaGlzKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkp
OworICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9k
ZS5sb2NhbCgpKSA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCB0YWlsTm9kZUluZGV4ID0gYmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0YWlsTm9kZUluZGV4ID09IG5vZGVJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpID0gbm9kZS5jaGls
ZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3RhaWxOb2RlSW5kZXhdLm9wKCkgPT0gRmx1c2gKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3RhaWxOb2RlSW5kZXhdLm9w
KCkgPT0gU2V0TG9jYWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHBoYW50b20uY2hpbGRyZW4gPSBu
b2RlLmNoaWxkcmVuOwogICAgICAgICAgICAgICAgIHBoYW50b20ucmVmKCk7CisgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlSW5k
ZXgsIHZhbHVlKTsKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggcGhhbnRvbU5vZGVJbmRleCA9
IG1fZ3JhcGguc2l6ZSgpOwogICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHBoYW50b20p
OwogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2NrLCBwaGFu
dG9tTm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLnJlc2V0KCk7CiAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgqYmxvY2spOworICAgICAgICAgICAgc3RhdGUu
cmVzZXQoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAg
ICAgfQogfTsKIAotdm9pZCBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKEdyYXBoJiBncmFwaCkKK2Jv
b2wgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8
Q29uc3RhbnRGb2xkaW5nUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q29uc3Rh
bnRGb2xkaW5nUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3
IEBAIGNsYXNzIEdyYXBoOwogLy8gaW5mZXJyZWQgY29uc3RhbnRzLCBhbmQgcmVwbGFjZXMgdGhv
c2Ugbm9kZXMgd2l0aCBjb25zdGFudHMgd2hpbHN0IGluamVjdGluZwogLy8gUGhhbnRvbSBub2Rl
cyB0byBrZWVwIHRoZSBjaGlsZHJlbiBhbGl2ZSAod2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBPU1Ig
ZXhpdCkuCiAKLXZvaWQgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhHcmFwaCYpOworYm9vbCBwZXJm
b3JtQ29uc3RhbnRGb2xkaW5nKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24g
MTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5o
IgogI2luY2x1ZGUgIkRGR0NGQVBoYXNlLmgiCisjaW5jbHVkZSAiREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NTRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdGaXh1cFBoYXNlLmgiCkBAIC02MCwxMiAr
NjEsMTcgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIGlm
IChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pCiAgICAgICAgIGRmZy5wcmVkaWN0QXJn
dW1lbnRUeXBlcygpOwogCi0gICAgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0aW9uKGRmZyk7
CiAgICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1
cChkZmcpOwotICAgIHBlcmZvcm1DRkEoZGZnKTsKLSAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5n
KGRmZyk7Ci0gICAgcGVyZm9ybUNTRShkZmcpOworICAgIGZvciAoOzspIHsKKyAgICAgICAgYm9v
bCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKKyAgICAgICAgY2hh
bmdlZCB8PSBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7CisgICAgICAgIGNoYW5nZWQgfD0g
cGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKGRmZyk7CisgICAgICAgIHBlcmZvcm1DU0UoZGZnKTsK
KyAgICAgICAgaWYgKCFjaGFuZ2VkKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIHBl
cmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRmZyk7CiAKICNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNp
b24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBib29s
IGlzU2V0KCkgY29uc3QgeyByZXR1cm4gaW5kZXhVbmNoZWNrZWQoKSAhPSBOb05vZGU7IH0KKyAg
ICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICAKICAgICBib29sIG9wZXJh
dG9yPT0oRWRnZSBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQx
LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBi
b29sIHJ1bigpCiAgICAgewogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KQogICAg
ICAgICAgICAgZml4dXBCbG9jayhtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzU5LDkgKzM2MCw5
IEBAIHByaXZhdGU6CiAgICAgSW5zZXJ0aW9uU2V0PE5vZGVJbmRleD4gbV9pbnNlcnRpb25TZXQ7
CiB9OwogICAgIAotdm9pZCBwZXJmb3JtRml4dXAoR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3Jt
Rml4dXAoR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNlPEZpeHVwUGhhc2U+KGdyYXBoKTsK
KyAgICByZXR1cm4gcnVuUGhhc2U8Rml4dXBQaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgR3Jh
cGg7CiAvLyBGaXggcG9ydGlvbnMgb2YgdGhlIGdyYXBoIHRoYXQgYXJlIGluZWZmaWNpZW50IGdp
dmVuIHRoZSBwcmVkaWN0aW9ucyB0aGF0CiAvLyB3ZSBoYXZlLiBUaGlzIHNob3VsZCBydW4gYWZ0
ZXIgcHJlZGljdGlvbiBwcm9wYWdhdGlvbiBidXQgYmVmb3JlIENTRS4KIAotdm9pZCBwZXJmb3Jt
Rml4dXAoR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybUZpeHVwKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkc6OlBoYXNlCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDE1ICsyNzUsMjUgQEAgdm9pZCBH
cmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4KQogCiB2b2lkIEdyYXBoOjpkdW1wKCkKIHsK
KyAgICBib29sIGR1bXBBbGwgPSBmYWxzZTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCisgICAgZHVtcEFsbCA9IHRydWU7CisjZW5kaWYKKwogICAgIE5vZGVJbmRl
eCBsYXN0Tm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9i
bG9ja3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nr
c1tiXS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBkYXRhTG9nKCJCbG9jayAjJXUgKGJjIyV1KTogJXMlc1xuIiwgKGludCliLCBibG9j
ay0+Ynl0ZWNvZGVCZWdpbiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiIChza2lwcGVkKSIs
IGJsb2NrLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiKTsKICAgICAgICAgZGF0
YUxvZygiICBQaGkgTm9kZXM6XG4iKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+cGhpcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgLy8gRHVtcGluZyB0aGUgZGVh
ZCBQaGkgbm9kZXMgaXMganVzdCBhbm5veWluZyEKLSAgICAgICAgICAgIGlmIChhdChibG9jay0+
cGhpc1tpXSkucmVmQ291bnQoKSkKKyAgICAgICAgICAgIGlmIChkdW1wQWxsIHx8IGF0KGJsb2Nr
LT5waGlzW2ldKS5yZWZDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgZHVtcENvZGVPcmlnaW4o
bGFzdE5vZGVJbmRleCwgYmxvY2stPnBoaXNbaV0pOwogICAgICAgICAgICAgICAgIGR1bXAoYmxv
Y2stPnBoaXNbaV0pOworICAgICAgICAgICAgICAgIGxhc3ROb2RlSW5kZXggPSBibG9jay0+cGhp
c1tpXTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBkYXRhTG9nKCIgIHZhcnMg
YmVmb3JlOiAiKTsKICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQpAQCAtMzA1LDYg
KzMxNSw5IEBAIHZvaWQgR3JhcGg6OmR1bXAoKQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBk
YXRhTG9nKCI8ZW1wdHk+Iik7CiAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgIGRhdGFM
b2coIiAgdmFyIGxpbmtzOiAiKTsKKyAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAg
fQogfQogCkBAIC0zNjIsNiArMzc1LDU0IEBAIHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5
cGVzKCkKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8Qmxv
Y2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4
IHN1Y2Nlc3NvckluZGV4KQoreworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fYmxvY2tz
W3N1Y2Nlc3NvckluZGV4XS5nZXQoKTsKKyAgICBpZiAoIXN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUp
IHsKKyAgICAgICAgc3VjY2Vzc29yLT5pc1JlYWNoYWJsZSA9IHRydWU7CisgICAgICAgIHdvcmts
aXN0LmFwcGVuZChzdWNjZXNzb3JJbmRleCk7CisgICAgfQorICAgIAorICAgIHN1Y2Nlc3Nvci0+
bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOworfQorCit2b2lkIEdyYXBoOjpkZXRl
cm1pbmVSZWFjaGFiaWxpdHkoKQoreworICAgIFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xp
c3Q7CisgICAgd29ya2xpc3QuYXBwZW5kKDApOworICAgIG1fYmxvY2tzWzBdLT5pc1JlYWNoYWJs
ZSA9IHRydWU7CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgQmxv
Y2tJbmRleCBpbmRleCA9IHdvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgd29ya2xpc3QucmVtb3Zl
TGFzdCgpOworICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tp
bmRleF0uZ2V0KCk7CisgICAgICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQpOworICAgICAgICAK
KyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KGJsb2NrLT5sYXN0KCkpOworICAgICAgICBBU1NFUlQo
bm9kZS5pc1Rlcm1pbmFsKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUuaXNKdW1wKCkp
CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2Vu
QmxvY2tJbmRleCgpKTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7CisgICAg
ICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJ
bmRleCgpKTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5v
ZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdy
YXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCit7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSBtX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9j
aykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBibG9jay0+aXNSZWFjaGFibGUgPSBm
YWxzZTsKKyAgICAgICAgYmxvY2stPm1fcHJlZGVjZXNzb3JzLmNsZWFyKCk7CisgICAgfQorICAg
IAorICAgIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNiArMzQ2LDc4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGlzQ2FwdHVyZWQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICB9
CiAgICAgCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaykKKyAg
ICB7CisgICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5udW1TdWNjZXNzb3JzKCk7Cisg
ICAgfQorICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25l
ZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNjZXNz
b3IoaW5kZXgpOworICAgIH0KKyAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvckZvckNvbmRpdGlvbihC
YXNpY0Jsb2NrKiBibG9jaywgYm9vbCBjb25kaXRpb24pCisgICAgeworICAgICAgICByZXR1cm4g
YXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSYgbm9kZSkKKyAgICB7
CisgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rp
b24oKTsKKyAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9IGF0KG5vZGUuY2hpbGQyKCkpLnBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgcmV0dXJuIGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBp
c051bWJlclByZWRpY3Rpb24ocmlnaHQpOworICAgIH0KKyAgICAKKyAgICBib29sIGJ5VmFsSXNQ
dXJlKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZS5jaGlsZDIoKSku
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCisgICAgICAgICAgICAmJiAoKG5vZGUub3AoKSA9PSBQ
dXRCeVZhbCB8fCBub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykKKyAgICAgICAgICAgICAgICA/
IGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVByZWRpY3Rpb24oYXQobm9kZS5jaGlsZDEoKSkucHJl
ZGljdGlvbigpKQorICAgICAgICAgICAgICAgIDogaXNBY3Rpb25hYmxlQXJyYXlQcmVkaWN0aW9u
KGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSkpOworICAgIH0KKyAgICAKKyAgICBib29s
IGNsb2JiZXJzV29ybGQoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLmZsYWdz
KCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIShub2RlLmZsYWdzKCkgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgY2FzZSBW
YWx1ZUFkZDoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJl
TGVzc0VxOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAgICBjYXNlIENvbXBh
cmVHcmVhdGVyRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAgICAgICAgICAgcmV0dXJu
ICFpc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKTsKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAg
ICAgICAgICAgIHJldHVybiAhYnlWYWxJc1B1cmUobm9kZSk7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OyAvLyBJZiBieSBzb21lIG9kZGl0eSB3ZSBoaXQgdGhpcyBjYXNlIGluIHJlbGVhc2UgYnVpbGQg
aXQncyBzYWZlciB0byBoYXZlIENTRSBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICB9CisgICAg
fQorICAgIAorICAgIGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNsb2JiZXJzV29ybGQoYXQobm9kZUluZGV4KSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CisgICAgdm9pZCByZXNldFJl
YWNoYWJpbGl0eSgpOworICAgIAorICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuKE5vZGUmIG5vZGUp
CisgICAgeworICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCisgICAg
ICAgICAgICByZXR1cm4gbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICByZXR1cm4gQWRqYWNl
bmN5TGlzdFNpemU7CisgICAgfQorICAgIAorICAgIEVkZ2UgY2hpbGQoTm9kZSYgbm9kZSwgdW5z
aWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpCisgICAgICAgICAgICByZXR1cm4gbV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hp
bGQoKSArIGluZGV4XTsKKyAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uY2hpbGQoaW5kZXgp
OworICAgIH0KKyAgICAKICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKICAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwpAQCAt
MzY0LDYgKzQzNiw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwog
cHJpdmF0ZToKICAgICAKKyAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRl
eCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nl
c3NvckluZGV4KTsKKyAgICAKICAgICBib29sIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoTm9kZSYgYWRkLCBOb2RlJiB2YXJpYWJsZSwgTm9kZSYgaW1tZWRpYXRlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS5oYXNDb25zdGFudCgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBz
dHJ1Y3QgT3BJbmZvIHsKIC8vIE5vZGUgcmVwcmVzZW50cyBhIHNpbmdsZSBvcGVyYXRpb24gaW4g
dGhlIGRhdGEgZmxvdyBncmFwaC4KIHN0cnVjdCBOb2RlIHsKICAgICBlbnVtIFZhckFyZ1RhZyB7
IFZhckFyZyB9OwotCisgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMg
Y2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBj
aGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogY29k
ZU9yaWdpbihjb2RlT3JpZ2luKQpAQCAtMjAyLDcgKzIwMiw4IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgbV9vcCA9IEpTQ29uc3RhbnQ7CiAgICAgICAgIGlmIChtX2ZsYWdzICYgTm9kZU11c3RH
ZW5lcmF0ZSkKICAgICAgICAgICAgIG1fcmVmQ291bnQtLTsKLSAgICAgICAgbV9mbGFncyAmPSB+
Tm9kZU11c3RHZW5lcmF0ZTsKKyAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVDbG9iYmVy
c1dvcmxkKSk7CisgICAgICAgIG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1p
Z2h0Q2xvYmJlcik7CiAgICAgICAgIG1fb3BJbmZvID0gY29uc3RhbnROdW1iZXI7CiAgICAgICAg
IGNoaWxkcmVuLnJlc2V0KCk7CiAgICAgfQpAQCAtNDY4LDYgKzQ2OSwzNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzI7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVk
IG51bVN1Y2Nlc3NvcnMoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAg
IGNhc2UgSnVtcDoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEJyYW5jaDoK
KyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQmxvY2tJbmRleCBzdWNjZXNzb3Io
dW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4KSB7CisgICAgICAg
IGNhc2UgMDoKKyAgICAgICAgICAgIHJldHVybiB0YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAg
Y2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIG5vdFRha2VuQmxvY2tJbmRleCgpOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICByZXR1cm4gTm9CbG9jazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBCbG9ja0luZGV4
IHN1Y2Nlc3NvckZvckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc0JyYW5jaCgpKTsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/IHRha2VuQmxvY2tJ
bmRleCgpIDogbm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFz
SGVhcFByZWRpY3Rpb24oKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3Niw3ICsxNzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oSXNTdHJpbmcsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNPYmplY3Qs
IE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNGdW5jdGlvbiwgTm9kZVJlc3VsdEJv
b2xlYW4pIFwKLSAgICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVN
aWdodENsb2JiZXIpIFwKKyAgICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0Qm9vbGVhbikg
XAogICAgIG1hY3JvKFRvUHJpbWl0aXZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhTdHJDYXQsIE5vZGVSZXN1bHRKUyB8
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBc
CiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIxLDcgKzExMjEsNyBAQCBzaXplX3Qg
REZHX09QRVJBVElPTiBkZmdDb252ZXJ0SlNWYWx1ZVRvCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3ApLnRvQm9vbGVhbigpOwogfQogCiAjaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQ
RUNVTEFUSU9OX0ZBSUxVUkUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNl
LmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCisjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKKwogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQpAQCAtMzYsMTAgKzM4LDEyIEBAIHZvaWQgUGhhc2U6OmJlZ2luUGhhc2UoKQogICAgIGRhdGFM
b2coIkJlZ2lubmluZyBERkcgcGhhc2UgJXMuXG4iLCBtX25hbWUpOwogICAgIGRhdGFMb2coIkdy
YXBoIGJlZm9yZSAlczpcbiIsIG1fbmFtZSk7CiAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgdmFs
aWRhdGUobV9ncmFwaCwgRG9udER1bXBHcmFwaCk7CiB9CiAKIHZvaWQgUGhhc2U6OmVuZFBoYXNl
KCkKIHsKKyAgICB2YWxpZGF0ZShtX2dyYXBoLCBEdW1wR3JhcGgpOwogfQogI2VuZGlmCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NzMsMTAgKzczLDEwIEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQaGFzZVR5
cGU+Ci12b2lkIHJ1blBoYXNlKEdyYXBoJiBncmFwaCkKK2Jvb2wgcnVuUGhhc2UoR3JhcGgmIGdy
YXBoKQogewogICAgIFBoYXNlVHlwZSBwaGFzZShncmFwaCk7Ci0gICAgcGhhc2UucnVuKCk7Cisg
ICAgcmV0dXJuIHBoYXNlLnJ1bigpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBtX2NvdW50ID0gMDsKQEAgLTc3LDYgKzc3
LDggQEAgcHVibGljOgogICAgICAgICAgICAgZG9Sb3VuZE9mRG91YmxlVm90aW5nKCk7CiAgICAg
ICAgICAgICBwcm9wYWdhdGVCYWNrd2FyZCgpOwogICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQp
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogcHJpdmF0ZToK
QEAgLTgzMSw5ICs4MzMsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogICAgIAotdm9pZCBwZXJm
b3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybVByZWRp
Y3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8UHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIEdyYXBoOwogLy8gYXJpdGhtZXRpYyBub2Rl
cykgZG8gbm90IHF1YWxpZnkgZm9yIGFueSBvZiB0aGVzZSBjYXRlZ29yaWVzLiBCdXQgYWZ0ZXIg
cnVubmluZwogLy8gdGhpcyBwaGFzZSwgd2UnbGwgaGF2ZSBmdWxsIGluZm9ybWF0aW9uIGZvciB0
aGUgZXhwZWN0ZWQgdHlwZSBvZiBlYWNoIG5vZGUuCiAKLXZvaWQgcGVyZm9ybVByZWRpY3Rpb25Q
cm9wYWdhdGlvbihHcmFwaCYpOworYm9vbCBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKEdy
YXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkc6OlBoYXNlCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlF
bGltaW5hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2
b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0g
ZmFsc2U7CiAgICAgICAgIGRvIHsKQEAgLTYzLDcgKzYzLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTE2Niw5ICsxNjcsOSBAQCBw
cml2YXRlOgogCiB9OwogCi12b2lkIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbihHcmFw
aCYgZ3JhcGgpCitib29sIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbihHcmFwaCYgZ3Jh
cGgpCiB7Ci0gICAgcnVuUGhhc2U8UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZT4oZ3JhcGgp
OworICAgIHJldHVybiBydW5QaGFzZTxSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlPihncmFw
aCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25Q
aGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyAr
MzksNyBAQCBjbGFzcyBHcmFwaDsKIC8vIFdlIGluc2VydGVkIG1hbnkgY2FuLWJlLXJlZHVuZGFu
dCBQaGkgbm9kZXMgd2hlbiBidWlsZGluZyB0aGUgZ3JhcGguCiAvLyBUaGlzIHBoYXNlIHdpbGwg
anVzdCByZW1vdmUgdGhlbS4KIAotdm9pZCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24o
R3JhcGgmKTsKK2Jvb2wgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0aW9uKEdyYXBoJik7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTY29yZUJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTY29yZUJvYXJkLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTIgKzEy
MCwyNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBDbGVhciB0aGUgdXNlIGNvdW50ICYgYWRk
IHRvIHRoZSBmcmVlIGxpc3QuCiAgICAgICAgICAgICBtX3VzZWRbaW5kZXhdID0gMDsKICAgICAg
ICAgICAgIG1fZnJlZS5hcHBlbmQoaW5kZXgpOworICAgICAgICB9IGVsc2UgeworI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coIiBW
aXJ0dWFsIHJlZ2lzdGVyICV1IGlzIGF0ICV1LyV1IHVzZXMuIiwgaW5kZXgsIG1fdXNlZFtpbmRl
eF0sIG5vZGUucmVmQ291bnQoKSk7CisjZW5kaWYKICAgICAgICAgfQogICAgIH0KICAgICB2b2lk
IHVzZShFZGdlIGNoaWxkKQogICAgIHsKICAgICAgICAgdXNlKGNoaWxkLmluZGV4VW5jaGVja2Vk
KCkpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHVzZUlmSGFzUmVzdWx0KEVkZ2UgY2hpbGQpCisg
ICAgeworICAgICAgICBpZiAoIWNoaWxkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAoIW1fZ3JhcGhbY2hpbGRdLmhhc1Jlc3VsdCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB1c2UoY2hpbGQpOworICAgIH0KIAogICAgIHVuc2lnbmVkIGhpZ2hXYXRlcm1hcmsoKQog
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4MCw4ICsxMjgwLDEx
IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgR1BSSW5mbzo6cmVnVDApOwogCiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJ
bmRleCk7Ci0gICAgZm9yIChtX2Jsb2NrID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9i
bG9ja3Muc2l6ZSgpOyArK21fYmxvY2spCi0gICAgICAgIGNvbXBpbGUoKm1faml0LmdyYXBoKCku
bV9ibG9ja3NbbV9ibG9ja10pOworICAgIGZvciAobV9ibG9jayA9IDA7IG1fYmxvY2sgPCBtX2pp
dC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKyttX2Jsb2NrKSB7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS5nZXQoKTsKKyAgICAg
ICAgaWYgKGJsb2NrKQorICAgICAgICAgICAgY29tcGlsZSgqYmxvY2spOworICAgIH0KICAgICBs
aW5rQnJhbmNoZXMoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyODksOCArMTI5MiwxMCBA
QCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNy
ZWF0ZU9TUkVudHJpZXMoKQogewogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKLSAgICAgICAgQmFzaWNCbG9jayYgYmxvY2sgPSAqbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ti
bG9ja0luZGV4XTsKLSAgICAgICAgaWYgKCFibG9jay5pc09TUlRhcmdldCkKKyAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
ICghYmxvY2stPmlzT1NSVGFyZ2V0KQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
Ly8gQ3VycmVudGx5IHdlIG9ubHkgbmVlZCB0byBjcmVhdGUgT1NSIGVudHJ5IHRyYW1wb2xpbmVz
IHdoZW4gdXNpbmcgZWRnZSBjb2RlCkBAIC0xMzEyLDkgKzEzMTcsMTIgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bGlua09TUkVudHJpZXMoTGluawogewogICAgIHVuc2lnbmVkIG9zckVudHJ5SW5k
ZXggPSAwOwogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAg
QmFzaWNCbG9jayYgYmxvY2sgPSAqbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1tibG9ja0luZGV4XTsK
LSAgICAgICAgaWYgKGJsb2NrLmlzT1NSVGFyZ2V0KQotICAgICAgICAgICAgbV9qaXQubm90aWNl
T1NSRW50cnkoYmxvY2ssIG1fb3NyRW50cnlIZWFkc1tvc3JFbnRyeUluZGV4KytdLCBsaW5rQnVm
ZmVyKTsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIG1faml0Lm5vdGljZU9TUkVudHJ5KCpibG9jaywgbV9vc3JFbnRyeUhl
YWRzW29zckVudHJ5SW5kZXgrK10sIGxpbmtCdWZmZXIpOwogICAgIH0KICAgICBBU1NFUlQob3Ny
RW50cnlJbmRleCA9PSBtX29zckVudHJ5SGVhZHMuc2l6ZSgpKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDExNDU1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIG9u
IGFuIG9wZXJhbmQgb25jZSBpdCBoYXMgYmVlbiBjb25zdW1lZCBieSBhIHBhcmVudCBub2RlLgog
ICAgIHZvaWQgdXNlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAgICAgIGlmICghbm9k
ZS5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwog
CiAgICAgICAgIC8vIHVzZSgpIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBiZWNvbWVzIGRl
YWQsIGFuZCBhbnkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKyNpZiBE
RkdfRU5BQkxFKFZBTElEQVRJT04pCisKK2NsYXNzIFZhbGlkYXRlIHsKK3B1YmxpYzoKKyAgICBW
YWxpZGF0ZShHcmFwaCYgZ3JhcGgsIEdyYXBoRHVtcE1vZGUgZ3JhcGhEdW1wTW9kZSkKKyAgICAg
ICAgOiBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1fZ3JhcGhEdW1wTW9kZShncmFwaER1bXBN
b2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgI2RlZmluZSBWQUxJREFURShjb250ZXh0LCBh
c3NlcnRpb24pIGRvIHsgXAorICAgICAgICBpZiAoIShhc3NlcnRpb24pKSB7IFwKKyAgICAgICAg
ICAgIGRhdGFMb2coIlxuXG5cbkF0ICIpOyBcCisgICAgICAgICAgICByZXBvcnRWYWxpZGF0aW9u
Q29udGV4dCBjb250ZXh0OyBcCisgICAgICAgICAgICBkYXRhTG9nKCI6IHZhbGlkYXRpb24gJXMg
KCVzOiVkKSBmYWlsZWQuXG4iLCAjYXNzZXJ0aW9uLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisg
ICAgICAgICAgICBkdW1wR3JhcGhJZkFwcHJvcHJpYXRlKCk7IFwKKyAgICAgICAgICAgIFdURlJl
cG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNU
SU9OLCAjYXNzZXJ0aW9uKTsgXAorICAgICAgICAgICAgQ1JBU0goKTsgXAorICAgICAgICB9IFwK
KyAgICB9IHdoaWxlICgwKQorICAgIAorICAgICNkZWZpbmUgVl9FUVVBTChjb250ZXh0LCBsZWZ0
LCByaWdodCkgZG8geyBcCisgICAgICAgIGlmIChsZWZ0ICE9IHJpZ2h0KSB7IFwKKyAgICAgICAg
ICAgIGRhdGFMb2coIlxuXG5cbkF0ICIpOyBcCisgICAgICAgICAgICByZXBvcnRWYWxpZGF0aW9u
Q29udGV4dCBjb250ZXh0OyBcCisgICAgICAgICAgICBkYXRhTG9nKCI6IHZhbGlkYXRpb24gKCVz
ID0gIiwgI2xlZnQpOyBcCisgICAgICAgICAgICBkdW1wRGF0YShsZWZ0KTsgXAorICAgICAgICAg
ICAgZGF0YUxvZygiKSA9PSAoJXMgPSAiLCAjcmlnaHQpOyBcCisgICAgICAgICAgICBkdW1wRGF0
YShyaWdodCk7IFwKKyAgICAgICAgICAgIGRhdGFMb2coIikgKCVzOiVkKSBmYWlsZWQuXG4iLCBf
X0ZJTEVfXywgX19MSU5FX18pOyBcCisgICAgICAgICAgICBkdW1wR3JhcGhJZkFwcHJvcHJpYXRl
KCk7IFwKKyAgICAgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9f
TElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjbGVmdCAiID09ICIgI3JpZ2h0KTsgXAorICAg
ICAgICAgICAgQ1JBU0goKTsgXAorICAgICAgICB9IFwKKyAgICB9IHdoaWxlICgwKQorCisgICAg
dm9pZCB2YWxpZGF0ZSgpCisgICAgeworICAgICAgICAvLyBOQi4gVGhpcyBjb2RlIGlzIG5vdCB3
cml0dGVuIGZvciBwZXJmb3JtYW5jZSwgc2luY2UgaXQgaXMgbm90IGludGVuZGVkIHRvIHJ1bgor
ICAgICAgICAvLyBpbiByZWxlYXNlIGJ1aWxkcy4KKyAgICAgICAgCisgICAgICAgIC8vIFZhbGlk
YXRlIHJlZiBjb3VudHMgYW5kIHVzZXMuCisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbXlSZWZD
b3VudHM7CisgICAgICAgIG15UmVmQ291bnRzLmZpbGwoMCwgbV9ncmFwaC5zaXplKCkpOworICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYg
KCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPm5vZGVJbmRleChpKTsK
KyAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAg
ICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9n
cmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIEVkZ2Ug
ZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
ZWRnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgbXlSZWZDb3VudHNbZWRnZS5pbmRleCgpXSsrOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIEknbSBh
IEZsdXNoLCBQaGFudG9tLCBHZXRMb2NhbCwgb3IgUGhpLCBteSBjaGlsZHJlbiBzaG91bGQgaGFz
UmVzdWx0KCkuCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhh
bnRvbToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlSW5kZXgsIGVkZ2UpLCBtX2dyYXBoW2VkZ2VdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
aWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsK
KyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPm5vZGVJbmRleChp
KTsKKyAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlSW5kZXgpLCBteVJlZkNvdW50c1tub2Rl
SW5kZXhdLCBtX2dyYXBoW25vZGVJbmRleF0uYWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgR3JhcGgmIG1fZ3Jh
cGg7CisgICAgR3JhcGhEdW1wTW9kZSBtX2dyYXBoRHVtcE1vZGU7CisgICAgCisgICAgdm9pZCBy
ZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAg
ICAgZGF0YUxvZygiQCV1Iiwgbm9kZUluZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXBv
cnRWYWxpZGF0aW9uQ29udGV4dChOb2RlSW5kZXggbm9kZUluZGV4LCBFZGdlIGVkZ2UpCisgICAg
eworICAgICAgICBkYXRhTG9nKCJAJXUgLT4gJXNAJXUiLCBub2RlSW5kZXgsIHVzZUtpbmRUb1N0
cmluZyhlZGdlLnVzZUtpbmQoKSksIGVkZ2UuaW5kZXgoKSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZHVtcERhdGEodW5zaWduZWQgdmFsdWUpCisgICAgeworICAgICAgICBkYXRhTG9nKCIldSIs
IHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wR3JhcGhJZkFwcHJvcHJpYXRlKCkK
KyAgICB7CisgICAgICAgIGlmIChtX2dyYXBoRHVtcE1vZGUgPT0gRG9udER1bXBHcmFwaCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YUxvZygiR3JhcGggYXQgdGltZSBvZiBmYWls
dXJlOlxuIik7CisgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgIH0KK307CisKK3ZvaWQgdmFs
aWRhdGUoR3JhcGgmIGdyYXBoLCBHcmFwaER1bXBNb2RlIGdyYXBoRHVtcE1vZGUpCit7CisgICAg
VmFsaWRhdGUgdmFsaWRhdGlvbk9iamVjdChncmFwaCwgZ3JhcGhEdW1wTW9kZSk7CisgICAgdmFs
aWRhdGlvbk9iamVjdC52YWxpZGF0ZSgpOworfQorCisjZW5kaWYgLy8gREZHX0VOQUJMRShWQUxJ
REFUSU9OKQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1ZhbGlkYXRlX2gKKyNkZWZpbmUgREZHVmFs
aWRhdGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBHcmFwaER1bXBNb2RlIHsgRG9u
dER1bXBHcmFwaCwgRHVtcEdyYXBoIH07CisKKyNpZiBERkdfRU5BQkxFKFZBTElEQVRJT04pCit2
b2lkIHZhbGlkYXRlKEdyYXBoJiwgR3JhcGhEdW1wTW9kZSk7CisjZWxzZQoraW5saW5lIHZvaWQg
dmFsaWRhdGUoR3JhcGgmLCBHcmFwaER1bXBNb2RlKSB7IH0KKyNlbmRpZgorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFs
UmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigp
CiAgICAgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygi
UHJlc2VydmVkIHZhcnM6ICIpOwpAQCAtNTQsNiArNTQsMTAgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICgh
YmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNp
emUoKTsgKytpbmRleEluQmxvY2spIHsKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQpAQCAtNjYsMjIgKzcwLDIxIEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkgfHwgbm9kZS5vcCgpID09
IFBoaSB8fCBub2RlLm9wKCkgPT0gRmx1c2gpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gR2V0TG9jYWwgbm9kZXMgYXJlIGVm
ZmVjdGl2ZWx5IHBoaSBub2RlcyBpbiB0aGUgZ3JhcGgsIHJlZmVyZW5jaW5nCi0gICAgICAgICAg
ICAgICAgLy8gcmVzdWx0cyBmcm9tIHByaW9yIGJsb2Nrcy4KLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS5vcCgpICE9IEdldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBj
YWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5v
ZGUuIFdlIGRvIHNvIGluIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgLy8gb3JkZXIgc28gdGhh
dCBpZiBhIGNoaWxkIGlzIG9uIGl0cyBsYXN0IHVzZSwgYW5kIGEKLSAgICAgICAgICAgICAgICAg
ICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9y
IG5vZGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFy
QXJncykgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5u
dW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
b3JlQm9hcmQudXNlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2Fy
ZC51c2Uobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJk
LnVzZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQu
dXNlKG5vZGUuY2hpbGQzKCkpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLmhhc1Jlc3VsdCgpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ugb24g
YWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhlbgorICAgICAgICAgICAgICAg
IC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGlu
IHRoaXMKKyAgICAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24g
aXRzIGxhc3QgdXNlLCBhbmQgYQorICAgICAgICAgICAgICAgIC8vIFZpcnR1YWxSZWdpc3RlciBp
cyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2VkIGZvciBub2RlLgorICAgICAgICAgICAgICAg
IGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwg
bm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCisgICAg
ICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobm9kZS5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobm9kZS5jaGls
ZDIoKSk7CisgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobm9k
ZS5jaGlsZDMoKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKCFu
b2RlLmhhc1Jlc3VsdCgpKQpAQCAtMTE0LDEyICsxMTcsMTQgQEAgcHVibGljOgogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygiTnVtIGNhbGxlZSByZWdpc3Rl
cnM6ICV1XG4iLCBjYWxsZWVSZWdpc3RlcnMpOwogI2VuZGlmCisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiB9OwogCi12b2lkIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxv
Y2F0aW9uKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRp
b24oR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNlPFZpcnR1YWxSZWdpc3RlckFsbG9jYXRp
b25QaGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFzZTxWaXJ0dWFsUmVnaXN0ZXJBbGxv
Y2F0aW9uUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1
YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIEdyYXBoOwogLy8gZm9yIGxvb2st
dXAgdGFibGVzIGZvciB0aGUgbGluZWFyIHNjYW4gcmVnaXN0ZXIgYWxsb2NhdG9yIHRoYXQgdGhl
IGJhY2tlbmQKIC8vIHVzZXMuCiAKLXZvaWQgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRp
b24oR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgm
KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDExNDU1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1ODUsNyArMjU4NSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9IHZQQ1sx
XS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBzcmMgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbighY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgp
LnRvQm9vbGVhbihjYWxsRnJhbWUpKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xl
YW4oIWNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIENI
RUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkg
PSByZXN1bHQ7CiAKQEAgLTM5MDUsNyArMzkwNSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAg
ICAgICAgICAqLwogICAgICAgICBpbnQgY29uZCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAg
IGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpZiAoY2FsbEZyYW1lLT5y
KGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAoY2Fs
bEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkgewogICAgICAgICAgICAgdlBD
ICs9IHRhcmdldDsKICAgICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7CiAgICAgICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zOTI1LDcgKzM5MjUsNyBAQCBza2lwX2lkX2N1c3Rv
bV9zZWxmOgogICAgICAgICAgKi8KICAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5k
OwogICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKCFj
YWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7CisgICAg
ICAgIGlmICghY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkgewogICAg
ICAgICAgICAgdlBDICs9IHRhcmdldDsKICAgICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7
CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zOTQyLDcgKzM5NDIsNyBAQCBz
a2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAqLwogICAgICAgICBpbnQgY29uZCA9IHZQQ1sx
XS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwotICAg
ICAgICBpZiAoY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1l
KSkgeworICAgICAgICBpZiAoY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4o
KSkgewogICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKICAgICAgICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKICAgICAgICAgfQpAQCAtMzk1OCw3ICszOTU4LDcgQEAgc2tpcF9pZF9jdXN0b21f
c2VsZjoKICAgICAgICAgKi8KICAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5kOwog
ICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKCFjYWxs
RnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7CisgICAgICAg
IGlmICghY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkgewogICAgICAg
ICAgICAgdlBDICs9IHRhcmdldDsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlz
aW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yODU1LDkgKzI4NTUsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihF
bmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAgICBKU1ZhbHVlIHNyYyA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2Fs
bEZyYW1lOwotCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oIXNyYy50b0Jvb2xlYW4o
Y2FsbEZyYW1lKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oIXNyYy50b0Jvb2xl
YW4oKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0yODY4LDkgKzI4NjYsNyBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTihpbnQsIG9wX2p0cnVlKQogCiAgICAgSlNWYWx1ZSBzcmMxID0gc3RhY2tGcmFt
ZS5hcmdzWzBdLmpzVmFsdWUoKTsKIAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tG
cmFtZS5jYWxsRnJhbWU7Ci0KLSAgICBib29sIHJlc3VsdCA9IHNyYzEudG9Cb29sZWFuKGNhbGxG
cmFtZSk7CisgICAgYm9vbCByZXN1bHQgPSBzcmMxLnRvQm9vbGVhbigpOwogICAgIENIRUNLX0ZP
Ul9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24g
MTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTA3LDcgKzUwNyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9uZXdfcmVnZXgKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9ub3Qp
CiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBMTElOVF9SRVRVUk4oanNCb29sZWFuKCFMTElO
VF9PUF9DKDIpLmpzVmFsdWUoKS50b0Jvb2xlYW4oZXhlYykpKTsKKyAgICBMTElOVF9SRVRVUk4o
anNCb29sZWFuKCFMTElOVF9PUF9DKDIpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkpOwogfQogCiBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZXEpCkBAIC0xMTEwLDEzICsxMTEwLDEzIEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbXBfc2NvcGUKIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9qdHJ1ZSkKIHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIExMSU5U
X0JSQU5DSChvcF9qdHJ1ZSwgTExJTlRfT1BfQygxKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMp
KTsKKyAgICBMTElOVF9CUkFOQ0gob3BfanRydWUsIExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRv
Qm9vbGVhbigpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pmYWxzZSkK
IHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIExMSU5UX0JSQU5DSChvcF9qZmFsc2UsICFMTElO
VF9PUF9DKDEpLmpzVmFsdWUoKS50b0Jvb2xlYW4oZXhlYykpOworICAgIExMSU5UX0JSQU5DSChv
cF9qZmFsc2UsICFMTElOVF9PUF9DKDEpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbGVzcykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDExNDU1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzk3LDcgKzc5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwg
dGhpc09iaik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2Fj
aGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbihleGVjKSkK
KyAgICAgICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFuKCkpCiAgICAgICAgICAgICAgICAgcmVz
dWx0QXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGZpbHRlckluZGV4KyssIHYpOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChrID09IGxlbmd0aCkKQEAgLTgxOCw3ICs4MTgsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGVhY2hBcmd1bWVudHMu
YXBwZW5kKHRoaXNPYmopOwogCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBm
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpOwot
ICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbihleGVjKSkKKyAgICAgICAgaWYgKHJlc3VsdC50
b0Jvb2xlYW4oKSkKICAgICAgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRleChleGVj
LCBmaWx0ZXJJbmRleCsrLCB2KTsKICAgICB9CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHRBcnJheSk7CkBAIC05MTcsNyArOTE3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBq
c051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNP
YmopOwogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKLSAg
ICAgICAgICAgIGlmICghcmVzdWx0LnRvQm9vbGVhbihjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShl
eGVjKSkpCisgICAgICAgICAgICBpZiAoIXJlc3VsdC50b0Jvb2xlYW4oKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgICAgICB9
CiAgICAgfQpAQCAtOTM0LDcgKzkzNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgICAgICBib29s
IHByZWRpY2F0ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJv
b2wgcHJlZGljYXRlUmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbigpOwogICAgICAgICBpZiAo
IXByZWRpY2F0ZVJlc3VsdCkgewogICAgICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAyNSw3ICsxMDI1LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3Vt
ZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxs
LmNhbGwoKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFuKGNhY2hlZENhbGwubmV3
Q2FsbEZyYW1lKGV4ZWMpKSkKKyAgICAgICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFuKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTA0Miw3ICsxMDQyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0g
ICAgICAgIGJvb2wgcHJlZGljYXRlUmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbihleGVjKTsK
KyAgICAgICAgYm9vbCBwcmVkaWNhdGVSZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxs
VHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cykudG9Cb29sZWFuKCk7CiAg
ICAgICAgIGlmIChwcmVkaWNhdGVSZXN1bHQpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9v
bGVhbih0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAx
MTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgQm9vbGVhbkNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbigKIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBCb29sZWFuT2JqZWN0KiBv
YmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVybmFs
RnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0
cnVjdHVyZSgpKTsKLSAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBqc0Jvb2xlYW4oYXJncy5hdCgwKS50b0Jvb2xlYW4oZXhlYykpKTsKKyAgICBvYmotPnNldElu
dGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc0Jvb2xlYW4oYXJncy5hdCgwKS50b0Jv
b2xlYW4oKSkpOwogICAgIHJldHVybiBvYmo7CiB9CiAKQEAgLTY4LDcgKzY4LDcgQEAgQ29uc3Ry
dWN0VHlwZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENvbgogLy8gRUNNQSAxNS42LjEKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxCb29sZWFuQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGV4
ZWMtPmFyZ3VtZW50KDApLnRvQm9vbGVhbihleGVjKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDApLnRvQm9vbGVhbigpKSk7CiB9CiAKIENh
bGxUeXBlIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEm
IGNhbGxEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAvLyBCYXNpYyBjb252ZXJzaW9ucy4KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1
ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsK
ICAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1i
ZXIsIEpTVmFsdWUmKSBjb25zdDsKLSAgICAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikg
Y29uc3Q7CisgICAgICAgIGJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIyLDExICs0MjIsNiBAQCB2b2lk
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgIGdldENsYXNzUHJv
cGVydHlOYW1lcyhleGVjLCBvYmplY3QtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKIH0KIAotYm9vbCBKU09iamVjdDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAogewogICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhl
YywgUHJlZmVyTnVtYmVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogCiAgICAgICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJl
ZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7Ci0gICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBi
b29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1
ZSYpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBkb3VibGUgdG9OdW1iZXIoRXhl
Y1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU3RyaW5nKiB0b1N0
cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw3
IEBAIGJvb2wgSlNTdHJpbmc6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3QKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgSlNTdHJpbmc6OnRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdAor
Ym9vbCBKU1N0cmluZzo6dG9Cb29sZWFuKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9sZW5ndGg7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlz
aW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNSw3ICsyMTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAogICAgICAgICBKU1Zh
bHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBj
b25zdDsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsK
ICAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1i
ZXIsIEpTVmFsdWUmKSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgICAgIGRvdWJsZSB0b051bWJlcihFeGVj
U3RhdGUqKSBjb25zdDsKQEAgLTQzNSwyMyArNDM1LDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgaW5saW5lIGJvb2wgaXNKU1N0cmluZyhKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkg
JiYgdi5hc0NlbGwoKS0+Y2xhc3NJbmZvKCkgPT0gJkpTU3RyaW5nOjpzX2luZm87IH0KIAotICAg
IGlubGluZSBib29sIEpTQ2VsbDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAg
ICBpbmxpbmUgYm9vbCBKU0NlbGw6OnRvQm9vbGVhbigpIGNvbnN0CiAgICAgewogICAgICAgICBp
ZiAoaXNTdHJpbmcoKSkgCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNT
dHJpbmcqPih0aGlzKS0+dG9Cb29sZWFuKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhpcyktPnRvQm9vbGVhbigpOwogICAgICAgICByZXR1
cm4gIXN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAg
ICB9CiAKICAgICAvLyAtLS0gSlNWYWx1ZSBpbmxpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICAgICAKLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjp0b0Jvb2xlYW4oRXhlY1N0YXRl
KiBleGVjKSBjb25zdAorICAgIGlubGluZSBib29sIEpTVmFsdWU6OnRvQm9vbGVhbigpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoaXNJbnQzMigpKQogICAgICAgICAgICAgcmV0dXJuIGFzSW50
MzIoKTsKICAgICAgICAgaWYgKGlzRG91YmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gYXNEb3Vi
bGUoKSA+IDAuMCB8fCBhc0RvdWJsZSgpIDwgMC4wOyAvLyBmYWxzZSBmb3IgTmFOCiAgICAgICAg
IGlmIChpc0NlbGwoKSkKLSAgICAgICAgICAgIHJldHVybiBhc0NlbGwoKS0+dG9Cb29sZWFuKGV4
ZWMpOworICAgICAgICAgICAgcmV0dXJuIGFzQ2VsbCgpLT50b0Jvb2xlYW4oKTsKICAgICAgICAg
cmV0dXJuIGlzVHJ1ZSgpOyAvLyBmYWxzZSwgbnVsbCwgYW5kIHVuZGVmaW5lZCBhbGwgY29udmVy
dCB0byBmYWxzZS4KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1ZhbHVlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwogICAgICAgICBib29sIGdldFBy
aW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpOwogCi0g
ICAgICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBib29sIHRv
Qm9vbGVhbigpIGNvbnN0OwogCiAgICAgICAgIC8vIHRvTnVtYmVyIGNvbnZlcnNpb24gaXMgZXhw
ZWN0ZWQgdG8gYmUgc2lkZSBlZmZlY3QgZnJlZSBpZiBhbiBleGNlcHRpb24gaGFzCiAgICAgICAg
IC8vIGJlZW4gc2V0IGluIHRoZSBFeGVjU3RhdGUgYWxyZWFkeS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDE0ICsyMTQsMTQgQEAgc3RhdGljIGJv
b2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YQogCiAgICAgUHJvcGVydHlTbG90IGVudW1l
cmFibGVTbG90KGRlc2NyaXB0aW9uKTsKICAgICBpZiAoZGVzY3JpcHRpb24tPmdldFByb3BlcnR5
U2xvdChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSwgZW51bWVyYWJsZVNs
b3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0RW51bWVyYWJsZShlbnVtZXJhYmxlU2xvdC5nZXRWYWx1
ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSkudG9Cb29sZWFuKGV4ZWMp
KTsKKyAgICAgICAgZGVzYy5zZXRFbnVtZXJhYmxlKGVudW1lcmFibGVTbG90LmdldFZhbHVlKGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5lbnVtZXJhYmxlKS50b0Jvb2xlYW4oKSk7CiAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKICAgICBQcm9wZXJ0eVNsb3QgY29uZmlndXJhYmxlU2xvdChkZXNjcmlwdGlvbik7
CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNvbmZpZ3VyYWJsZSwgY29uZmlndXJhYmxlU2xvdCkpIHsKLSAgICAgICAgZGVz
Yy5zZXRDb25maWd1cmFibGUoY29uZmlndXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29uZmlndXJhYmxlKS50b0Jvb2xlYW4oZXhlYykpOworICAgICAgICBk
ZXNjLnNldENvbmZpZ3VyYWJsZShjb25maWd1cmFibGVTbG90LmdldFZhbHVlKGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jb25maWd1cmFibGUpLnRvQm9vbGVhbigpKTsKICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
QEAgLTIzNiw3ICsyMzYsNyBAQCBzdGF0aWMgYm9vbCB0b1Byb3BlcnR5RGVzY3JpcHRvcihFeGVj
U3RhCiAKICAgICBQcm9wZXJ0eVNsb3Qgd3JpdGFibGVTbG90KGRlc2NyaXB0aW9uKTsKICAgICBp
ZiAoZGVzY3JpcHRpb24tPmdldFByb3BlcnR5U2xvdChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkud3JpdGFibGUsIHdyaXRhYmxlU2xvdCkpIHsKLSAgICAgICAgZGVzYy5zZXRXcml0YWJsZSh3
cml0YWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxl
KS50b0Jvb2xlYW4oZXhlYykpOworICAgICAgICBkZXNjLnNldFdyaXRhYmxlKHdyaXRhYmxlU2xv
dC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkud3JpdGFibGUpLnRvQm9vbGVh
bigpKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ5LDkgKzI0OSw5IEBAIHZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JJbnB1dChF
eGVjU3RhdGUKICAgICBhc1JlZ0V4cENvbnN0cnVjdG9yKGJhc2VPYmplY3QpLT5zZXRJbnB1dChl
eGVjLCB2YWx1ZS50b1N0cmluZyhleGVjKSk7CiB9CiAKLXZvaWQgc2V0UmVnRXhwQ29uc3RydWN0
b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKK3ZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwg
SlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgYXNSZWdFeHBDb25z
dHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0TXVsdGlsaW5lKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7
CisgICAgYXNSZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0TXVsdGlsaW5lKHZhbHVl
LnRvQm9vbGVhbigpKTsKIH0KIAogLy8gRUNNQSAxNS4xMC40CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEx
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NywxMSArMTQ3LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KIAogICAgIGNoYXIgcG9zdGZpeFs1XSA9IHsgJy8nLCAw
LCAwLCAwLCAwIH07CiAgICAgaW50IGluZGV4ID0gMTsKLSAgICBpZiAodGhpc09iamVjdC0+Z2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nbG9iYWwpLnRvQm9vbGVhbihleGVjKSkKKyAg
ICBpZiAodGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nbG9iYWwp
LnRvQm9vbGVhbigpKQogICAgICAgICBwb3N0Zml4W2luZGV4KytdID0gJ2cnOwotICAgIGlmICh0
aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlnbm9yZUNhc2UpLnRv
Qm9vbGVhbihleGVjKSkKKyAgICBpZiAodGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5pZ25vcmVDYXNlKS50b0Jvb2xlYW4oKSkKICAgICAgICAgcG9zdGZpeFtpbmRl
eCsrXSA9ICdpJzsKLSAgICBpZiAodGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5tdWx0aWxpbmUpLnRvQm9vbGVhbihleGVjKSkKKyAgICBpZiAodGhpc09iamVjdC0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tdWx0aWxpbmUpLnRvQm9vbGVhbigpKQog
ICAgICAgICBwb3N0Zml4W2luZGV4XSA9ICdtJzsKICAgICBVU3RyaW5nIHNvdXJjZSA9IHRoaXNP
YmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc291cmNlKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgLy8gSWYgc291cmNlIGlzIGVtcHR5LCB1c2UgIi8oPzop
LyIgdG8gYXZvaWQgY29sbGlkaW5nIHdpdGggY29tbWVudCBzeW50YXgK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138720</attachid>
            <date>2012-04-24 19:27:23 -0700</date>
            <delta_ts>2012-04-24 20:32:52 -0700</delta_ts>
            <desc>starting to run SunSpider</desc>
            <filename>cfgsimplify_patch_7.diff</filename>
            <type>text/plain</type>
            <size>114430</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0ODYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNCBA
QAorMjAxMi0wNC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTUzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGlu
IHByb2dyZXNzLgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNW
YWx1ZVRvQm9vbGVhbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAg
ICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6
cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAg
ICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2Uu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChDRkdTaW1wbGlmaWNhdGlv
blBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpDRkdT
aW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpbmRPcGVyYW5kU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjprZWVwT3BlcmFuZEFsaXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlm
aWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpD
RkdTaW1wbGlmaWNhdGlvblBoYXNlOjptZXJnZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6
cGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NT
RVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cnVuKToKKyAgICAgICAg
KENTRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2xvYmJlcnNXb3JsZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuaDoKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5oOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3VjY2Vz
c29yRm9yQ29uZGl0aW9uKToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om51bVN1Y2Nlc3NvcnMpOgorICAgICAgICAo
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3JGb3JDb25kaXRpb24pOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR1BoYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6cnVuUGhh
c2UpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbik6CisgICAgICAgICog
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAg
ICAgICAqIGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpydW4pOgorICAgICAgICAo
SlNDOjpERkc6OnBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbik6CisgICAgICAgICogZGZn
L0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OnBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3Bw
OgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
RXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAqIHJ1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9v
bGVhbik6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAg
KEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjp0b0Jvb2xlYW4pOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjp0
b1Byb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4
cFByb3RvRnVuY1RvU3RyaW5nKToKKwogMjAxMi0wNC0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaGF2ZSBjb25zdGFudCBwcm9wYWdhdGlv
bgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9vbCBKU1ZhbHVlVG9Cb29sZWFuKEpT
Q29udGV4dFJlZiBjdHgsIAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKLSAgICByZXR1cm4ganNWYWx1
ZS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIGpzVmFsdWUudG9Cb29sZWFuKCk7CiB9CiAK
IGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1
ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCwxMCBAQAogCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0
NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGM0IzQTFBMTUz
RTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0ExNzE1M0U2OEVGMDAzRUQw
RkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwICovOyB9OwogCQkwRjNCM0ExQjE1M0U2
OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAv
KiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0IzQTI1MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTI5MTU0NzRGRjQw
MDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGM0IzQTJDMTU0NzUwMDIwMDNF
RDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgx
NDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JB
QjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRh
Rm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NjgsNiArNzcyLDEwIEBACiAJCTBG
MkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAv
KiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGM0IzQTI0MTU0NEM5
OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDRkdTaW1w
bGlmaWNhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYg
LyogREZHVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHVmFsaWRhdGUuY3BwOyBwYXRoID0gZGZnL0RGR1ZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7IHBhdGgg
PSBkZmcvREZHVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZB
NDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1h
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDQ1LDYgKzIwNTMsOCBAQAogCQkJCTBGN0IyOTQ4
MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLywKIAkJCQkwRkZGQzk0QjE0
RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTRDMTRFRjkw
OTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oICovLAorCQkJCTBGM0IzQTI0MTU0NEM5OTEwMDNF
RDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjNCM0EyNTE1
NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovLAogCQkJCTBG
RkZDOTREMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5
NEUxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEZEODJFMUUxNDE3
MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8sCkBAIC0yMTAxLDYgKzIxMTEs
OCBAQAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAq
LywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJ
MEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCAqLywKKwkJCQkwRjNC
M0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLywKIAkJCQkwRjYyMDE3MjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8sCiAJCQkJMEZGRkM5
NTMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5j
cHAgKi8sCiAJCQkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oICovLApAQCAtMjU4Myw2ICsyNTk1LDggQEAKIAkJCQkwRjNCM0Ex
QjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGM0IzQTI4MTU0NEM5
OTcwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMzE0Nyw2ICszMTYxLDggQEAKIAkJCQk4NjQyQzUxMjE1MUMwODNEMDA0NkQ0RUYg
LyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUy
MTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQjNBMkIxNTQ3
NTAwMDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDExNDU1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQsNiArMTI0LDE2IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9jYWwob3BlcmFu
ZCwgdmFsdWUpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50
IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0Fy
Z3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzZXRBcmd1bWVudEZpcnN0VGltZShvcGVy
YW5kVG9Bcmd1bWVudChvcGVyYW5kKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzZXRMb2NhbEZpcnN0VGltZShvcGVyYW5kLCB2YWx1
ZSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTE0
NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTksNiArOTksOCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxp
emUoR3JhcGgmIGdyCiAgICAgUFJPRklMRShGTEFHX0ZPUl9CTE9DS19JTklUSUFMSVpBVElPTik7
CiAgICAgQmFzaWNCbG9jayogcm9vdCA9IGdyYXBoLm1fYmxvY2tzWzBdLmdldCgpOwogICAgIHJv
b3QtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOworICAgIHJvb3QtPmNmYUhhc1Zpc2l0ZWQgPSBm
YWxzZTsKKyAgICByb290LT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
aSkgewogICAgICAgICBOb2RlJiBub2RlID0gZ3JhcGhbcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFy
Z3VtZW50KGkpXTsKICAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBTZXRBcmd1bWVudCk7CkBA
IC0xNDMsMTEgKzE0NSwzMyBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgm
IGdyCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRp
Y3RGbG9hdDY0QXJyYXkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOworICAgICAgICAKKyAgICAgICAgcm9vdC0+dmFs
dWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewotICAg
ICAgICBpZiAoIWdyYXBoLmxvY2FsSXNDYXB0dXJlZChpKSkKKyAgICAgICAgaWYgKGdyYXBoLmxv
Y2FsSXNDYXB0dXJlZChpKSkKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5sb2NhbChp
KS5tYWtlVG9wKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVh
ZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICByb290LT52YWx1ZXNBdFRhaWwubG9jYWwoaSku
Y2xlYXIoKTsKKyAgICB9CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAxIDsgYmxv
Y2tJbmRleCA8IGdyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Cisg
ICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcm9vdC0+
dmFsdWVzQXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNS
ZWFjaGFibGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYmxvY2stPmNmYVNob3Vs
ZFJldmlzaXQgPSBmYWxzZTsKKyAgICAgICAgYmxvY2stPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsK
KyAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuY2xl
YXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIo
KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7CisgICAgICAgICAgICBibG9jay0+dmFs
dWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRU
YWlsLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTUyNiw4ICs1
NTAsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwogICAgICAg
ICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtMTI4Niw3ICsxMzA4LDkgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVy
Z2VTdGF0ZUF0VAogICAgICAgICAvLyBUaGUgYmxvY2sgdHJhbnNmZXJzIHRoZSB2YWx1ZSBmcm9t
IGhlYWQgdG8gdGFpbC4KICAgICAgICAgc291cmNlID0gaW5WYXJpYWJsZTsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIiAgICAgICAg
ICBUcmFuc2ZlcmluZyBmcm9tIGhlYWQgdG8gdGFpbC5cbiIpOworICAgICAgICBkYXRhTG9nKCIg
ICAgICAgICAgVHJhbnNmZXJpbmcgIik7CisgICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZp
bGUoKSk7CisgICAgICAgIGRhdGFMb2coIiBmcm9tIGhlYWQgdG8gdGFpbC5cbiIpOwogI2VuZGlm
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMjk0LDcgKzEzMTgsOSBAQCBpbmxp
bmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgIC8vIFRoZSBibG9j
ayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3BlY3VsYXRpb25zLgogICAgICAg
ICBzb3VyY2UgPSBmb3JOb2RlKG5vZGVJbmRleCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgUmVmaW5pbmcuXG4i
KTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICAgIFJlZmluaW5nIHRvICIpOworICAgICAgICBz
b3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nKCJcbiIpOwogI2Vu
ZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMzA2LDcgKzEzMzIsOSBAQCBp
bmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIgICAgICAgICAg
U2V0dGluZy5cbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgU2V0dGluZyB0byAiKTsK
KyAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZygi
XG4iKTsKICNlbmRpZgogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0xMzgyLDEyICsxNDEw
LDE5IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICBBU1NF
UlQodGVybWluYWwuaXNUZXJtaW5hbCgpKTsKICAgICAKICAgICBzd2l0Y2ggKHRlcm1pbmFsLm9w
KCkpIHsKLSAgICBjYXNlIEp1bXA6CisgICAgY2FzZSBKdW1wOiB7CisgICAgICAgIGRhdGFMb2co
IiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5k
ZXgoKSk7CiAgICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0
ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgIH0KICAgICAgICAgCi0gICAg
Y2FzZSBCcmFuY2g6Ci0gICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Js
b2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpCi0gICAgICAgICAgICB8IG1l
cmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRl
eCgpXS5nZXQoKSk7CisgICAgY2FzZSBCcmFuY2g6IHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0g
ZmFsc2U7CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4i
LCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2Uo
YmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdl
dCgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIs
IHRlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC5ub3RUYWtlbkJsb2NrSW5kZXgo
KV0uZ2V0KCkpOworICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgUmV0dXJuOgogICAgIGNhc2UgVGhyb3c6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyMyw3ICszMjMsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIGJvb2wg
aXNDbGVhcigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV90eXBlID09IFByZWRpY3RO
b25lICYmIG1fc3RydWN0dXJlLmlzQ2xlYXIoKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBtX3R5
cGUgPT0gUHJlZGljdE5vbmUgJiYgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpOworICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgQVNTRVJUKCFtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAgICAgCiAgICAgdm9pZCBtYWtlVG9wKCkKQEAgLTQxNywxNSArNDIwLDMw
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgICAgICYmIG1fc3RydWN0dXJlID09
IG90aGVyLm1fc3RydWN0dXJlCiAgICAgICAgICAgICAmJiBtX3ZhbHVlID09IG90aGVyLm1fdmFs
dWU7CiAgICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBYnN0cmFjdFZhbHVlJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9
CiAgICAgCiAgICAgYm9vbCBtZXJnZShjb25zdCBBYnN0cmFjdFZhbHVlJiBvdGhlcikKICAgICB7
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBBYnN0cmFjdFZhbHVlIG9sZE1lID0gKnRo
aXM7CisjZW5kaWYKICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgcmVzdWx0
IHw9IG1lcmdlUHJlZGljdGlvbihtX3R5cGUsIG90aGVyLm1fdHlwZSk7Ci0gICAgICAgIHJlc3Vs
dCB8PSBtX3N0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9zdHJ1Y3R1cmUpOwotICAgICAgICBpZiAo
bV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKQotICAgICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUo
KTsKKyAgICAgICAgaWYgKGlzQ2xlYXIoKSkgeworICAgICAgICAgICAgKnRoaXMgPSBvdGhlcjsK
KyAgICAgICAgICAgIHJlc3VsdCA9ICFvdGhlci5pc0NsZWFyKCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1fdHlwZSwgb3RoZXIubV90
eXBlKTsKKyAgICAgICAgICAgIHJlc3VsdCB8PSBtX3N0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9z
dHJ1Y3R1cmUpOworICAgICAgICAgICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkgewor
ICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAhIW1fdmFsdWU7CisgICAgICAgICAgICAgICAgbV92
YWx1ZSA9IEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gKCp0aGlzICE9IG9sZE1l
KSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtNDUyLDcgKzQ3MCw3
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgLy8gaW50byB0aGUgaW5mb3JtYXRp
b24gZ2xlYW5lZCBmcm9tIHRoZSBTdHJ1Y3R1cmVTZXQuCiAgICAgICAgIG1fc3RydWN0dXJlLmZp
bHRlcihtX3R5cGUpOwogICAgICAgICAKLSAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiAhdmFsaWRh
dGUobV92YWx1ZSkpCisgICAgICAgIGlmICghIW1fdmFsdWUgJiYgIXZhbGlkYXRlSWdub3JpbmdW
YWx1ZShtX3ZhbHVlKSkKICAgICAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBj
aGVja0NvbnNpc3RlbmN5KCk7CkBAIC00NzAsMTIgKzQ4OCwzNiBAQCBzdHJ1Y3QgQWJzdHJhY3RW
YWx1ZSB7CiAgICAgICAgIC8vIHRoZSBuZXcgdHlwZSAoTm9uZSkgcmF0aGVyIHRoYW4gdGhlIG9u
ZSBwYXNzZWQgKEFycmF5KS4KICAgICAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CiAK
LSAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiAhdmFsaWRhdGUobV92YWx1ZSkpCisgICAgICAgIGlm
ICghIW1fdmFsdWUgJiYgIXZhbGlkYXRlSWdub3JpbmdWYWx1ZShtX3ZhbHVlKSkKICAgICAgICAg
ICAgIGNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAg
fQogICAgIAorICAgIGJvb2wgdmFsaWRhdGVJZ25vcmluZ1ZhbHVlKEpTVmFsdWUgdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAKKyAgICAgICAgaWYgKG1lcmdlUHJlZGljdGlvbnMobV90eXBlLCBwcmVkaWN0
aW9uRnJvbVZhbHVlKHZhbHVlKSkgIT0gbV90eXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
QVNTRVJUKG1fdHlwZSAmIFByZWRpY3RFbXB0eSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlLmlzVG9wKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghIXZhbHVlICYm
IHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICBBU1NFUlQobV90eXBlICYgUHJlZGljdENl
bGwpOworICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmNvbnRhaW5zKHZhbHVlLmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKICAgICBib29sIHZhbGlkYXRlKEpTVmFsdWUgdmFsdWUpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoaXNUb3AoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIEZpeGVkLAogICAgICAgICBWYXJpYWJsZQog
ICAgIH07Ci0KKyAgICAKKyAgICAjZGVmaW5lIEFkamFjZW5jeUxpc3RTaXplIDMKKyAgICAKICAg
ICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAg
IDogbV9raW5kKGtpbmQpCkBAIC03NCwyMSArNzYsMjEgQEAgcHVibGljOgogICAgIAogICAgIGNv
bnN0IEVkZ2UmIGNoaWxkKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQo
aSA8IDMpOworICAgICAgICBBU1NFUlQoaSA8IEFkamFjZW5jeUxpc3RTaXplKTsKICAgICAgICAg
QVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzW2ldOwogICAg
IH0gICAgCiAgICAgCiAgICAgRWRnZSYgY2hpbGQodW5zaWduZWQgaSkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChpIDwgMyk7CisgICAgICAgIEFTU0VSVChpIDwgQWRqYWNlbmN5TGlzdFNpemUpOwog
ICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNb
aV07CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0Q2hpbGQodW5zaWduZWQgaSwgRWRnZSBub2Rl
VXNlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCAzMCk7CisgICAgICAgIEFTU0VSVChpIDwg
QWRqYWNlbmN5TGlzdFNpemUpOwogICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAg
ICAgICAgbV93b3Jkc1tpXSA9IG5vZGVVc2U7CiAgICAgfQpAQCAtMTUwLDcgKzE1Miw3IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIEVkZ2UgbV93b3Jkc1szXTsKKyAgICBF
ZGdlIG1fd29yZHNbQWRqYWNlbmN5TGlzdFNpemVdOwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
ICBLaW5kIG1fa2luZDsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywyMyBAQCBz
dHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgICAgIHZhbHVlc0F0
SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKICAgICAgICAgdmFsdWVzQXRUYWlsLmVu
c3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwogICAgIH0KKyAgICAKKyAgICBzaXplX3QgbnVtTm9k
ZXMoKSBjb25zdCB7IHJldHVybiBwaGlzLnNpemUoKSArIHNpemUoKTsgfQorICAgIE5vZGVJbmRl
eCBub2RlSW5kZXgoc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaSA8IHBoaXMu
c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHBoaXNbaV07CisgICAgICAgIHJldHVybiBhdChp
IC0gcGhpcy5zaXplKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSW5QaGlzKE5vZGVJbmRl
eCBub2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChwaGlzW2ldID09IG5vZGVJbmRl
eCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkg
Zm9yIGJsb2NrIGxpbmtpbmcgYW5kIE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5IG1lYW5pbmdsZXNz
CiAgICAgLy8gZm9yIG90aGVyIHB1cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAvLyBQYXJzZSBhIHNpbmdsZSBiYXNpYyBibG9j
ayBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMuCiAgICAgYm9vbCBwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KTsKLSAgICAvLyBGaW5kIHJlYWNoYWJsZSBjb2RlIGFuZCBzZXR1cCBwcmVkZWNlc3Nv
ciBsaW5rcyBpbiB0aGUgZ3JhcGgncyBCYXNpY0Jsb2Nrcy4KLSAgICB2b2lkIGRldGVybWluZVJl
YWNoYWJpbGl0eSgpOwotICAgIC8vIEVucXVldWUgYSBibG9jayBvbnRvIHRoZSB3b3JrbGlzdCwg
aWYgbmVjZXNzYXJ5LgotICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4
LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3Nvcik7CiAgICAg
Ly8gTGluayBibG9jayBzdWNjZXNzb3JzLgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sq
LCBWZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxv
Y2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCbG9ja0lu
ZGV4PiYgcG9zc2libGVUYXJnZXRzKTsKQEAgLTI1ODUsNDEgKzI1ODEsNiBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpsaW5rQmxvY2tzKFZlY3RvcjxVCiAgICAgfQogfQogCi12b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3Qs
IEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKLXsKLSAg
ICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2dyYXBoLm1fYmxvY2tzW3N1Y2Nlc3NvckluZGV4
XS5nZXQoKTsKLSAgICBpZiAoIXN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUpIHsKLSAgICAgICAgc3Vj
Y2Vzc29yLT5pc1JlYWNoYWJsZSA9IHRydWU7Ci0gICAgICAgIHdvcmtsaXN0LmFwcGVuZChzdWNj
ZXNzb3JJbmRleCk7Ci0gICAgfQotICAgIAotICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMu
YXBwZW5kKGJsb2NrSW5kZXgpOwotfQotCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVS
ZWFjaGFiaWxpdHkoKQotewotICAgIFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7Ci0g
ICAgd29ya2xpc3QuYXBwZW5kKDApOwotICAgIG1fZ3JhcGgubV9ibG9ja3NbMF0tPmlzUmVhY2hh
YmxlID0gdHJ1ZTsKLSAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBC
bG9ja0luZGV4IGluZGV4ID0gd29ya2xpc3QubGFzdCgpOwotICAgICAgICB3b3JrbGlzdC5yZW1v
dmVMYXN0KCk7Ci0gICAgICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbaW5kZXhdLmdldCgpOwotICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGlua2VkKTsK
LSAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldOwot
ICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KG5vZGUuaXNKdW1wKCkpCi0gICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGlu
ZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5pc0Jy
YW5jaCgpKSB7Ci0gICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBu
b2RlLnRha2VuQmxvY2tJbmRleCgpKTsKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3Jr
bGlzdCwgaW5kZXgsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICB9Ci0gICAg
fQotfQotCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpidWlsZE9wZXJhbmRNYXBzSWZOZWNlc3Nhcnko
KQogewogICAgIGlmIChtX2hhdmVCdWlsdE9wZXJhbmRNYXBzKQpAQCAtMjgzMSw3ICsyNzkyLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAK
ICAgICBsaW5rQmxvY2tzKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2NrcywgaW5saW5l
U3RhY2tFbnRyeS5tX2Jsb2NrTGlua2luZ1RhcmdldHMpOwotICAgIGRldGVybWluZVJlYWNoYWJp
bGl0eSgpOworICAgIG1fZ3JhcGguZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgIGRhdGFMb2coIlByb2Nlc3Npbmcg
bG9jYWwgdmFyaWFibGUgcGhpcy5cbiIpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcg
KzQyLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAg
IGJvb2wgcnVuKCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQogICAgICAgICBtX2NvdW50ID0gMDsKQEAgLTY1LDEyICs2NSwxNiBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHBlcmZvcm1Gb3J3YXJk
Q0ZBKCk7CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgcGVyZm9ybUJsb2Nr
Q0ZBKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxk
UmV2aXNpdCkKICAgICAgICAgICAgIHJldHVybjsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCkBAIC0xMjYsOSArMTMwLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsK
IAotdm9pZCBwZXJmb3JtQ0ZBKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUNGQShHcmFwaCYg
Z3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Q0ZBUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVu
UGhhc2U8Q0ZBUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuaAkocmV2aXNpb24gMTE0
NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIEdyYXBoOwogLy8gdGhlIGNvZGUgYmxvY2su
IEl0J3MgYWxzbyByZXNwb25zaWJsZSBmb3IgaWRlbnRpZnlpbmcgZGVhZCBjb2RlLCBhbmQgaW4g
dGhlCiAvLyBmdXR1cmUgc2hvdWxkIGJlIHVzZWQgYXMgYSBob29rIGZvciBjb25zdGFudCBwcm9w
YWdhdGlvbi4KIAotdm9pZCBwZXJmb3JtQ0ZBKEdyYXBoJik7Citib29sIHBlcmZvcm1DRkEoR3Jh
cGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHQmFz
aWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBDRkdTaW1wbGlmaWNhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsK
K3B1YmxpYzoKKyAgICBDRkdTaW1wbGlmaWNhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAg
ICAgOiBQaGFzZShncmFwaCwgIkNGRyBzaW1wbGlmaWNhdGlvbiIpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArKyBibG9ja0luZGV4KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpIHsKKyAgICAgICAgICAgICAgICBr
aWxsVW5yZWFjaGFibGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobV9ncmFwaFti
bG9jay0+bGFzdCgpXS5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEp1bXA6IHsKKyAgICAgICAg
ICAgICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCisgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ss
IDApXS0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9w
cmVkZWNlc3NvcnNbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgID09IGJsb2NrSW5kZXgp
OworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiQ0ZHU2ltcGxpZnk6IEp1bXAgbWVyZ2Ugb24gQmxvY2sgIyV1IHRv
IEJsb2NrICMldS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwg
bV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAg
ICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCksIE5v
QmxvY2spOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEJsb2Nr
IG9ubHkgaGFzIGEganVtcCAtPiByZW1vdmUuIFRoaXMgaXMgdHJpY2t5IHRob3VnaCBiZWNhdXNl
IG9mCisgICAgICAgICAgICAgICAgLy8gbGl2ZW5lc3MuIFdoYXQgd2UgcmVhbGx5IHdhbnQgaXMg
dG8gc2xhbSBpbiBhIHBoYW50b20gYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgICAgICAv
LyBibG9jaywgYWZ0ZXIgdGhlIHRlcm1pbmFsLiBCdXQgd2UgY2FuJ3QgcmlnaHQgbm93LiA6LSgK
KyAgICAgICAgICAgICAgICAvLyBJZGVhOiB3aGF0IGlmIEkgc2xhbSB0aGUgZ2hvc3RpZXMgaW50
byBteSBzdWNjZXNzb3I/IE5vcGUsIHRoYXQncworICAgICAgICAgICAgICAgIC8vIHN1Ym9wdGlt
YWwsIGJlY2F1c2UgaWYgbXkgc3VjY2Vzc29yIGhhcyBtdWx0aXBsZSBwcmVkZWNlc3NvcnMgdGhl
biB3ZSdsbAorICAgICAgICAgICAgICAgIC8vIGJlIGtlZXBpbmcgYWxpdmUgdGhpbmdzIG9uIG90
aGVyIHByZWRlY2Vzc29yIGVkZ2VzIHVubmVjZXNzYXJpbHkuCisgICAgICAgICAgICAgICAgLy8g
V2hhdCB3ZSByZWFsbHkgbmVlZCBpcyB0aGUgbm90aW9uIG9mIGVuZC1vZi1ibG9jayBnaG9zdGll
cyEKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAgICAgICAgICAgLy8gQnJhbmNo
IG9uIGNvbnN0YW50IC0+IGpldHRpc29uIHRoZSBub3QtdGFrZW4gYmxvY2sgYW5kIG1lcmdlLgor
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW21fZ3JhcGhbYmxvY2stPmxhc3QoKV0uY2hpbGQx
KCldLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBjb25kaXRpb24g
PQorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX2dy
YXBoW2Jsb2NrLT5sYXN0KCldLmNoaWxkMSgpLmluZGV4KCkpLnRvQm9vbGVhbigpOworICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Jsb2Nrc1sKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKV0t
Pm1fcHJlZGVjZXNzb3JzLnNpemUoKQorICAgICAgICAgICAgICAgICAgICAgICAgPT0gMSkgewor
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkNGR1NpbXBsaWZ5OiBLbm93biBjb25kaXRpb24gYnJhbmNoIG1l
cmdlIG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUsIGpldHRpc29uaW5nIEJsb2NrICMldS5cbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIG1fZ3JhcGguc3Vj
Y2Vzc29yKGJsb2NrLCBjb25kaXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgIWNvbmRpdGlvbikpOworI2VuZGlmCisgICAgICAg
ICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBibG9ja0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vz
c29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ0ZHU2lt
cGxpZnk6IEJyYW5jaC0+anVtcCBjb252ZXJzaW9uIG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUs
IGpldHRpc29uaW5nIEJsb2NrICMldS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCBjb25kaXRpb24pLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgIWNv
bmRpdGlvbikpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRh
a2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25k
aXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCBub3RUYWtlbkJsb2Nr
SW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgIWNvbmRpdGlvbik7
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IG1fZ3JhcGhbYmxvY2stPmxh
c3QoKV0uY29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbYmxvY2st
Pmxhc3QoKV0uc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobV9ncmFwaFtibG9jay0+bGFzdCgpXS5yZWZDb3VudCgpID09IDEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNv
bkJsb2NrKGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3JpZ2lu
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZUluZGV4IGp1bXBOb2RlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUoSnVtcCwgYm91bmRhcnlDb2RlT3JpZ2luLCBPcElu
Zm8odGFrZW5CbG9ja0luZGV4KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmFw
cGVuZChqdW1wTm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEJyYW5j
aCB0byBzYW1lIGRlc3RpbmF0aW9uIC0+IGp1bXAuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IHRoaXMgd2lsbCBjdXJyZW50bHkgbm90IGJlIGhpdCBiZWNhdXNlIG9mIHRoZSBsYWNrIG9mIGp1
bXAtb25seQorICAgICAgICAgICAgICAgIC8vIGJsb2NrIHNpbXBsaWZpY2F0aW9uLgorICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCkgPT0gbV9ncmFwaC5zdWNj
ZXNzb3IoYmxvY2ssIDEpKSB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDRkdTaW1wbGlmeTogQnJhbmNoIG1l
cmdlIG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUuXG4iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSk7CisjZW5kaWYK
KyAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNj
ZXNzb3IoYmxvY2ssIDApLCBOb0Jsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICAgICAg
ICAvLyBJZiB3ZSBjaGFuZ2VkIHRoZSBncmFwaCwgdGhlbiBzb21lIGJsb2NrcyBtYXkgaGF2ZSBi
ZWNvbWUgdW5yZWFjaGFibGUuIE5lZWQgdG8KKyAgICAgICAgICAgIC8vIHBlcmZvcm0gYSBibG9j
ayBHQyBvZiBzb3J0cy4KKyAgICAgICAgICAgIG1fZ3JhcGgucmVzZXRSZWFjaGFiaWxpdHkoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gS2lsbCBhbnkgbmV3IHVucmVhY2hhYmxlIGJs
b2NrcyB0aGF0IHdlIGludHJvZHVjZWQuCisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKysgYmxv
Y2tJbmRleCkgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2st
PmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBraWxsVW5yZWFjaGFibGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIGtpbGxVbnJlYWNoYWJsZShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgewor
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoYmxvY2spOworICAgICAgICBBU1NFUlQo
IWJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgIAorICAgICAgICAvLyAxKSBSZW1vdmUgaXRz
IHJlZmVyZW5jZXMgdG8gb3RoZXIgYmxvY2tzLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytibG9jaykgeworICAgICAgICAgICAgTm9kZSYgcGhp
Tm9kZSA9IG1fZ3JhcGhbYmxvY2stPnBoaXNbaV1dOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IEFkamFjZW5jeUxpc3RTaXplOyArK2opIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUuY2hpbGRyZW4uY2hpbGQoaikpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYocGhpTm9kZS5jaGlsZHJlbi5jaGlsZChq
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDIpIEtp
bGwgdGhlIGJsb2NrCisgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIo
KTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGZpbmRPcGVyYW5kU291cmNlKGNvbnN0IE9w
ZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiYgdmFyaWFibGVzLCBpbnQgb3BlcmFu
ZCkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSB2YXJpYWJsZXMub3BlcmFu
ZChvcGVyYW5kKTsKKyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0g
U2V0TG9jYWwpCisgICAgICAgICAgICByZXR1cm4gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgp
LmluZGV4KCk7CisgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgfQorICAgIAorICAgIHZv
aWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Jsb2NrKiBibG9jaywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIGlmIChtX2dyYXBoLmlzQ2FwdHVyZWQo
b3BlcmFuZCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBmaW5kT3BlcmFuZFNvdXJjZShibG9jay0+dmFyaWFibGVzQXRUYWlsLCBvcGVyYW5kKTsK
KyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGVJbmRleF0ub3AoKSAhPSBT
ZXRMb2NhbCk7CisgICAgICAgIE5vZGVJbmRleCBwaGFudG9tTm9kZUluZGV4ID0gbV9ncmFwaC5z
aXplKCk7CisgICAgICAgIE5vZGUgcGhhbnRvbShQaGFudG9tLCBjb2RlT3JpZ2luLCBub2RlSW5k
ZXgpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChwaGFudG9tKTsKKyAgICAgICAgbV9ncmFwaC5y
ZWYocGhhbnRvbU5vZGVJbmRleCk7CisgICAgICAgIGJsb2NrLT5hcHBlbmQocGhhbnRvbU5vZGVJ
bmRleCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZml4UG9zc2libGVHZXRMb2NhbChCYXNpY0Js
b2NrKiBibG9jaywgRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIE5vZGUmIGNoaWxkID0gbV9n
cmFwaFtlZGdlXTsKKyAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChtX2dyYXBoLmlzQ2FwdHVyZWQoY2hpbGQubG9jYWwo
KSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIE5vZGVJbmRleCBvcmlnaW5hbE5vZGVJ
bmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChjaGlsZC5sb2NhbCgpKTsKKyAg
ICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZUluZGV4ICE9IE5vTm9kZSk7CisgICAgICAgIE5vZGUq
IG9yaWdpbmFsTm9kZSA9ICZtX2dyYXBoW29yaWdpbmFsTm9kZUluZGV4XTsKKyAgICAgICAgQVNT
RVJUKG9yaWdpbmFsTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgIC8vIFBvc3NpYmls
aXRpZXM6CisgICAgICAgIC8vIFNldExvY2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5n
IHRoZSB2YWx1ZSBvZiBzb21ldGhpbmcgdGhhdCBpcyBpbW1lZGlhdGVseQorICAgICAgICAvLyAg
ICAgYXZhaWxhYmxlIGluIHRoZSBmaXJzdCBibG9jayB3aXRoIGEga25vd24gTm9kZUluZGV4Lgor
ICAgICAgICAvLyBHZXRMb2NhbCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgZ2V0dGluZyB0aGUgdmFs
dWUgb2Ygc29tZXRoaW5nIHRoYXQgdGhlIGZpcnN0CisgICAgICAgIC8vICAgICBibG9jayBhbHNv
IGdldHMuCisgICAgICAgIC8vIFBoaSAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBr
ZWVwLWFsaXZlIG9uIGFuIG9wZXJhbmQgdGhhdCB0aGUgZmlyc3QgYmxvY2sKKyAgICAgICAgLy8g
ICAgIHdhcyBhbHNvIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbi4KKyAgICAgICAgLy8gU2V0QXJn
dW1lbnQgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBv
cGVyYW5kIHRoYXQgdGhlCisgICAgICAgIC8vICAgICBmaXJzdCBibG9jayB3YXMga2VlcGluZyBh
bGl2ZSBieSB2aXJ0dWUgb2YgdGhlIGZpcnN0QmxvY2sgYmVpbmcgdGhlIHJvb3QgYW5kCisgICAg
ICAgIC8vICAgICB0aGUgb3BlcmFuZCBiZWluZyBhbiBhcmd1bWVudC4KKyAgICAgICAgLy8gRmx1
c2ggLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVy
YW5kIHRoYXQgdGhlIGZpcnN0CisgICAgICAgIC8vICAgICBibG9jayB3YXMgZm9yY2luZyB0byBi
ZSBhbGl2ZSwgc28gdGhlIHNlY29uZCBibG9jayBzaG91bGQgcmVmZXIgY2hpbGQgb2YKKyAgICAg
ICAgLy8gICAgIHRoZSBmbHVzaC4KKyAgICAgICAgaWYgKG9yaWdpbmFsTm9kZS0+b3AoKSA9PSBG
bHVzaCkgeworICAgICAgICAgICAgb3JpZ2luYWxOb2RlSW5kZXggPSBvcmlnaW5hbE5vZGUtPmNo
aWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBvcmlnaW5hbE5vZGUgPSAmbV9ncmFwaFtvcmln
aW5hbE5vZGVJbmRleF07CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcmlnaW5hbE5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgRWRnZSBuZXdF
ZGdlID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKTsKKyAgICAgICAgICAgIEVkZ2Ugb2xkRWRnZSA9
IGVkZ2U7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKKyAgICAgICAgICAgIG1f
Z3JhcGguZGVyZWYob2xkRWRnZSk7CisgICAgICAgICAgICBlZGdlID0gbmV3RWRnZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAg
ICAgICAgIEVkZ2UgbmV3RWRnZSA9IGVkZ2U7CisgICAgICAgICAgICBFZGdlIG9sZEVkZ2UgPSBl
ZGdlOworICAgICAgICAgICAgbmV3RWRnZS5zZXRJbmRleChvcmlnaW5hbE5vZGVJbmRleCk7Cisg
ICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZGVy
ZWYob2xkRWRnZSk7CisgICAgICAgICAgICBlZGdlID0gbmV3RWRnZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIFNldEFyZ3Vt
ZW50OiB7CisgICAgICAgICAgICAvLyBLZWVwIHRoZSBHZXRMb2NhbCEKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHZvaWQgamV0dGlzb25CbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXgg
amV0dGlzb25lZEJsb2NrSW5kZXgsIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luKQorICAg
IHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShi
bG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShibG9j
aywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsKKyAgICAgICAgCisgICAgICAgIGZpeEpldHRpc29u
ZWRQcmVkZWNlc3NvcnMoYmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoQmxvY2tJbmRleCBibG9j
a0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4KQorICAgIHsKKyNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIkZpeGlu
ZyBwcmVkZWNlc3NvcnMgYW5kIHBoaXMgZHVlIHRvIGpldHRpc29uIG9mIEJsb2NrICMldSBmcm9t
IEJsb2NrICMldS5cbiIsCisgICAgICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrSW5kZXgsIGJs
b2NrSW5kZXgpOworI2VuZGlmCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25l
ZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0KCk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVj
ZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoamV0dGlzb25lZEJsb2NrLT5t
X3ByZWRlY2Vzc29yc1tpXSAhPSBibG9ja0luZGV4KQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5tX3ByZWRlY2Vzc29yc1tpXSA9IGpldHRp
c29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMubGFzdCgpOworICAgICAgICAgICAgamV0dGlzb25l
ZEJsb2NrLT5tX3ByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9j
ay0+cGhpcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZUluZGV4IHBoaU5vZGVJbmRl
eCA9IGpldHRpc29uZWRCbG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgIE5vZGUmIHBoaU5vZGUg
PSBtX2dyYXBoW3BoaU5vZGVJbmRleF07CisgICAgICAgICAgICBOb2RlSW5kZXggbXlOb2RlSW5k
ZXggPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocGhpTm9kZS5sb2NhbCgpKTsKKyNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICBkYXRh
TG9nKCJDb25zaWRlcmluZyByZW1vdmluZyByZWZlcmVuY2UgZnJvbSBwaGkgQCV1IHRvIEAldSBv
biBsb2NhbCByJWQ6IiwKKyAgICAgICAgICAgICAgICAgICAgcGhpTm9kZUluZGV4LCBteU5vZGVJ
bmRleCwgcGhpTm9kZS5sb2NhbCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgQVNTRVJUKG15Tm9k
ZUluZGV4ICE9IE5vTm9kZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
QWRqYWNlbmN5TGlzdFNpemU7ICsraikKKyAgICAgICAgICAgICAgICByZW1vdmVQb3RlbnRpYWxs
eURlYWRQaGlSZWZlcmVuY2UobXlOb2RlSW5kZXgsIHBoaU5vZGUsIGopOworI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7
CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZVBvdGVudGlh
bGx5RGVhZFBoaVJlZmVyZW5jZShOb2RlSW5kZXggbXlOb2RlSW5kZXgsIE5vZGUmIHBoaU5vZGUs
IHVuc2lnbmVkIGVkZ2VJbmRleCkKKyAgICB7CisgICAgICAgIGlmIChwaGlOb2RlLmNoaWxkcmVu
LmNoaWxkKGVkZ2VJbmRleCkuaW5kZXhVbmNoZWNrZWQoKSAhPSBteU5vZGVJbmRleCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgIGRhdGFMb2coIiBSZW1vdmluZyByZWZlcmVuY2UgYXQgY2hpbGQgJXUuIiwgZWRn
ZUluZGV4KTsKKyNlbmRpZgorICAgICAgICBtX2dyYXBoLmRlcmVmKG15Tm9kZUluZGV4KTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZWRnZUluZGV4OyBpIDwgQWRqYWNlbmN5TGlzdFNpemUg
LSAxOyArK2kpCisgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLnNldENoaWxkKGksIHBoaU5v
ZGUuY2hpbGRyZW4uY2hpbGQoaSArIDEpKTsKKyAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5zZXRD
aGlsZChBZGphY2VuY3lMaXN0U2l6ZSAtIDEsIEVkZ2UoKSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZml4VGFpbE9wZXJhbmQoQmFzaWNCbG9jayogZmlyc3RCbG9jaywgQmFzaWNCbG9jayogc2Vj
b25kQmxvY2ssIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IGF0U2Vjb25k
VGFpbCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmlzQ2FwdHVyZWQob3BlcmFuZCkpIHsKKyAgICAg
ICAgICAgIC8vIFRoZSBzZWNvbmQgYmxvY2sgZGlkIHNvbWV0aGluZyB0byBhIHZhcmlhYmxlIHRo
YXQgaXMgY2FwdHVyZWQsIHNvIHJlZmxlY3QgdGhpcy4KKyAgICAgICAgICAgIGZpcnN0QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYXRTZWNvbmRU
YWlsID09IE5vTm9kZSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIGRlYWQg
YXQgdGhlIGVuZCBvZiB0aGUgc2Vjb25kIGJsb2NrLCB0aGVuIGRvIG5vdGhpbmc7IGVzc2VudGlh
bGx5CisgICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgd2Ugd2FudCB0aGUgdGFpbCBzdGF0
ZSB0byByZWZsZWN0IHdoYXRldmVyIHRoZSBmaXJzdCBibG9jayBkaWQuCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGUmIHNlY29uZE5vZGUgPSBt
X2dyYXBoW2F0U2Vjb25kVGFpbF07CisgICAgICAgIHN3aXRjaCAoc2Vjb25kTm9kZS5vcCgpKSB7
CisgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgRmx1c2g6IHsKKyAgICAgICAg
ICAgIC8vIFRoZSBzZWNvbmQgYmxvY2sgZGlkIGludGVyZXN0aW5nIHRoaW5ncyB0byB0aGUgdmFy
aWFibGVzLCBzbyB1cGRhdGUgdGhlIHRhaWwKKyAgICAgICAgICAgIC8vIGFjY29yZGluZ2x5Lgor
ICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkg
PSBhdFNlY29uZFRhaWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAg
ICAgICAvLyBLZWVwIHdoYXQgd2FzIGluIHRoZSBmaXJzdCBibG9jay4KKyAgICAgICAgICAgIEFT
U0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05v
ZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZUJsb2NrcygKKyAgICAgICAgQmxvY2tJbmRleCBm
aXJzdEJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc2Vjb25kQmxvY2tJbmRleCwgQmxvY2tJbmRleCBq
ZXR0aXNvbmVkQmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBhZGQgYWxs
IG9mIHRoZSBub2RlcyBpbiBzZWNvbmRCbG9jayB0byBmaXJzdEJsb2NrLCBidXQgaW4gc28gZG9p
bmcKKyAgICAgICAgLy8gaXQgd2lsbCBhbHNvIGVuc3VyZSB0aGF0IGFueSBHZXRMb2NhbHMgZnJv
bSB0aGUgc2Vjb25kIGJsb2NrIHRoYXQgcmVmZXIgdG8KKyAgICAgICAgLy8gU2V0TG9jYWxzIGlu
IHRoZSBmaXJzdCBibG9jayBhcmUgcmVsaW5rZWQuIElmIGpldHRpc29uZWRCbG9jayBpcyBub3Qg
Tm9CbG9jaywKKyAgICAgICAgLy8gdGhlbiBQaGFudG9tcyBhcmUgaW5zZXJ0ZWQgZm9yIGFueXRo
aW5nIHRoYXQgdGhlIGpldHRpc29uZWRCbG9jayB3b3VsZCBoYXZlCisgICAgICAgIC8vIGtlcHQg
YWxpdmUuCisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBmaXJzdEJsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrc1tmaXJzdEJsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBCYXNpY0Jsb2NrKiBz
ZWNvbmRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nbc2Vjb25kQmxvY2tJbmRleF0uZ2V0KCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBSZW1vdmUgdGhlIHRlcm1pbmFsIG9mIGZpcnN0QmxvY2sgc2lu
Y2Ugd2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlLiBXZWxsLCB3ZSBkb24ndAorICAgICAgICAvLyBy
ZWFsbHkgcmVtb3ZlIGl0OyB3ZSBhY3R1YWxseSB0dXJuIGl0IGludG8gYSBQaGFudG9tLgorICAg
ICAgICBBU1NFUlQobV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLmlzVGVybWluYWwoKSk7Cisg
ICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0gbV9ncmFwaFtmaXJzdEJsb2Nr
LT5sYXN0KCldLmNvZGVPcmlnaW47CisgICAgICAgIG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgp
XS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGhb
Zmlyc3RCbG9jay0+bGFzdCgpXS5yZWZDb3VudCgpID09IDEpOworICAgICAgICAKKyAgICAgICAg
aWYgKGpldHRpc29uZWRCbG9ja0luZGV4ICE9IE5vQmxvY2spIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2Nr
SW5kZXhdLmdldCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaW1lIHRvIGluc2Vy
dCBnaG9zdGllcyBmb3IgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBrZXB0IGFsaXZlIGluIGNhc2Ug
d2UgT1NSCisgICAgICAgICAgICAvLyBleGl0IHByaW9yIHRvIGhpdHRpbmcgdGhlIGZpcnN0Qmxv
Y2sncyB0ZXJtaW5hbCwgYW5kIGVuZCB1cCBnb2luZyBkb3duIGEKKyAgICAgICAgICAgIC8vIGRp
ZmZlcmVudCBwYXRoIHRoYW4gc2Vjb25kQmxvY2suCisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxp
dmUoZmlyc3RCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFy
aWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkKKyAgICAgICAgICAgICAgICBrZWVw
T3BlcmFuZEFsaXZlKGZpcnN0QmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgaSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2st
PnBoaXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmaXJzdEJsb2NrLT5waGlzLmFwcGVuZChz
ZWNvbmRCbG9jay0+cGhpc1tpXSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNlY29uZEJsb2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IHNlY29uZEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUg
PSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAobm9kZS5zaG91bGRHZW5lcmF0
ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQaGFudG9tICYmIG5vZGUu
Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgcG9zc2libGVMb2NhbE9wID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxl
TG9jYWxPcC5oYXNMb2NhbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
c2V0TG9jYWxJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocG9zc2libGVMb2NhbE9wLmxvY2FsKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSYgc2V0TG9jYWwgPSBtX2dyYXBoW3NldExvY2FsSW5kZXhd
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsLm9wKCkgPT0gU2V0TG9jYWwp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlIG5ld0VkZ2UgPSBzZXRMb2NhbC5j
aGlsZDEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlIG9sZEVkZ2UgPSBub2Rl
LmNoaWxkMSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5ld0Vk
Z2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5zZXRDaGlsZDEobmV3
RWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIGNoaWxkIGlzIGEgR2V0TG9jYWwsIHRoZW4gd2UgbWlnaHQgbGlrZSB0byBmaXggaXQu
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hp
bGQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICsrY2hp
bGRJZHgpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0
QmxvY2ssIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZDEoKSkgeworICAgICAgICAgICAgICAgICAgICBmaXhQ
b3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxk
MigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMygpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9k
ZS5jaGlsZHJlbi5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXJzdEJsb2NrLT5hcHBlbmQobm9k
ZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRml4IHRoZSBwcmVkZWNl
c3NvcnMgb2YgbXkgbmV3IHN1Y2Nlc3NvcnMuIFRoaXMgaXMgdHJpY2t5LCBzaW5jZSB3ZSBhcmUg
Z29pbmcgdG8gcmVzZXQKKyAgICAgICAgLy8gYWxsIHByZWRlY2Vzc29ycyBhbnl3YXkgZHVlIHRv
IHJlYWNoYWJpbGl0eSBhbmFseXNpcy4gQnV0IHdlIG5lZWQgdG8gZml4IHRoZQorICAgICAgICAv
LyBwcmVkZWNlc3NvcnMgZWFnZXJseSB0byBlbnN1cmUgdGhhdCB3ZSBrbm93IHdoYXQgdGhleSBh
cmUgaW4gY2FzZSB0aGUgbmV4dCBibG9jayB3ZQorICAgICAgICAvLyBjb25zaWRlciBpbiB0aGlz
IHBoYXNlIHdpc2hlcyB0byBxdWVyeSB0aGUgcHJlZGVjZXNzb3JzIG9mIG9uZSBvZiB0aGUgYmxv
Y2tzIHdlCisgICAgICAgIC8vIGFmZmVjdGVkLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2dyYXBoLm51bVN1Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGktLTspIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3Io
Zmlyc3RCbG9jaywgaSldLmdldCgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAg
ICAgICBpZiAoc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29yc1tqXSA9PSBzZWNvbmRCbG9ja0luZGV4
KQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzW2pdID0gZmly
c3RCbG9ja0luZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBGaXggdGhlIHByZWRlY2Vzc29ycyBvZiBteSBmb3JtZXIgc3VjY2Vzc29ycy4gQWdhaW4s
IHdlJ2QgcmF0aGVyIG5vdCBkbyB0aGlzLCBidXQgaXQncworICAgICAgICAvLyBhbiB1bmZvcnR1
bmF0ZSBuZWNlc3NpdHkuIFNlZSBhYm92ZSBjb21tZW50LgorICAgICAgICBpZiAoamV0dGlzb25l
ZEJsb2NrSW5kZXggIT0gTm9CbG9jaykKKyAgICAgICAgICAgIGZpeEpldHRpc29uZWRQcmVkZWNl
c3NvcnMoZmlyc3RCbG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7CisgICAgICAgIAor
ICAgICAgICAvLyBGaXggdXAgdGhlIHZhcmlhYmxlcyBhdCB0YWlsLgorICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1
bWVudHMoKTsgKytpKQorICAgICAgICAgICAgZml4VGFpbE9wZXJhbmQoZmlyc3RCbG9jaywgc2Vj
b25kQmxvY2ssIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkKKyAgICAgICAgICAgIGZpeFRhaWxPcGVyYW5kKGZpcnN0QmxvY2ssIHNlY29uZEJsb2NrLCBp
KTsKKyAgICAgICAgZmlyc3RCbG9jay0+dmFsdWVzQXRUYWlsID0gc2Vjb25kQmxvY2stPnZhbHVl
c0F0VGFpbDsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbc2Vjb25kQmxvY2tJ
bmRleF0uY2xlYXIoKTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlv
bihHcmFwaCYgZ3JhcGgpCit7CisgICAgcmV0dXJuIHJ1blBoYXNlPENGR1NpbXBsaWZpY2F0aW9u
UGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2VfaAorI2Rl
ZmluZSBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENGRyBzaW1wbGlmaWNhdGlvbjoKKy8vCisvLyBq
dW1wIHRvIHNpbmdsZSBwcmVkZWNlc3NvciAtPiBtZXJnZSBibG9ja3MKKy8vIGJyYW5jaCBvbiBj
b25zdGFudCAtPiBqdW1wCisvLyBicmFuY2ggdG8gc2FtZSBibG9ja3MgLT4ganVtcAorLy8ganVt
cC1vbmx5IGJsb2NrIC0+IHJlbW92ZQorLy8ga2lsbCBkZWFkIGNvZGUKKworYm9vbCBwZXJmb3Jt
Q0ZHU2ltcGxpZmljYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMCArNDUsMTEgQEAgcHVibGljOgog
ICAgICAgICAgICAgbV9yZXBsYWNlbWVudHNbaV0gPSBOb05vZGU7CiAgICAgfQogICAgIAotICAg
IHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9jaykKLSAg
ICAgICAgICAgIHBlcmZvcm1CbG9ja0NTRSgqbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja10pOworICAg
ICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tdLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7IC8vIE1heWJlIHdlJ2xsIG5lZWQgdG8gbWFrZSB0aGlzIHJl
YXNvbiBhYm91dCB3aGV0aGVyIGl0IGNoYW5nZWQgdGhlIGdyYXBoIGluIGFuIGFjdGlvbmFibGUg
d2F5PwogICAgIH0KICAgICAKIHByaXZhdGU6CkBAIC0xMzksNTIgKzE0MCw2IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNQcmVkaWN0
ZWROdW1lcmljYWwoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgbGVm
dCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICBQcmVkaWN0
ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7Ci0gICAg
ICAgIHJldHVybiBpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9u
KHJpZ2h0KTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBsb2dpY2FsTm90SXNQdXJlKE5vZGUmIG5v
ZGUpCi0gICAgewotICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuIGlzQm9vbGVhblByZWRp
Y3Rpb24ocHJlZGljdGlvbikgfHwgIXByZWRpY3Rpb247Ci0gICAgfQotICAgIAotICAgIGJvb2wg
YnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgJiYgKChu
b2RlLm9wKCkgPT0gUHV0QnlWYWwgfHwgbm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpCi0gICAg
ICAgICAgICAgICAgPyBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgIDogaXNBY3Rpb25h
YmxlQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSk7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlSW5kZXggbm9kZUluZGV4
KQotICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAg
ICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVDbG9iYmVyc1dvcmxkKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGlmICghKG5vZGUuZmxhZ3MoKSAmIE5vZGVNaWdodENsb2JiZXIp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkg
ewotICAgICAgICBjYXNlIFZhbHVlQWRkOgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgotICAg
ICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6Ci0g
ICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0g
ICAgICAgICAgICByZXR1cm4gIWlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpOwotICAgICAgICBj
YXNlIExvZ2ljYWxOb3Q6Ci0gICAgICAgICAgICByZXR1cm4gIWxvZ2ljYWxOb3RJc1B1cmUobm9k
ZSk7Ci0gICAgICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICByZXR1cm4gIWJ5VmFsSXNQ
dXJlKG5vZGUpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSWYgYnkgc29tZSBvZGRpdHkgd2Ug
aGl0IHRoaXMgY2FzZSBpbiByZWxlYXNlIGJ1aWxkIGl0J3Mgc2FmZXIgdG8gaGF2ZSBDU0UgYXNz
dW1lIHRoZSB3b3JzdC4KLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBOb2RlSW5kZXggaW1w
dXJlQ1NFKE5vZGUmIG5vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fu
b25pY2FsaXplKG5vZGUuY2hpbGQxKCkpOwpAQCAtMjE1LDcgKzE3MCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICBpZiAobV9n
cmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMjM4LDcgKzE5Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAg
aWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTI1NCwxNCArMjA5LDE0IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoK
LSAgICAgICAgICAgICAgICBpZiAoIWJ5VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAgICAg
IGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEg
JiYgY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFs
aWFzOgotICAgICAgICAgICAgICAgIGlmICghYnlWYWxJc1B1cmUobm9kZSkpCisgICAgICAgICAg
ICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNo
aWxkMSAmJiBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNoaWxk
MikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7CkBA
IC0yODAsNyArMjM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBBIHB1c2ggY2Fu
bm90IGFmZmVjdCBwcmV2aW91c2x5IGV4aXN0aW5nIGVsZW1lbnRzIGluIHRoZSBhcnJheS4KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2Rl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzMxLDcgKzI4Niw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFs
OgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChi
eVZhbElzUHVyZShub2RlKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQ
dXJlKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0
ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAgICAgICAg
ICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVz
ZSBhIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCkBAIC0zNDAsNyAr
Mjk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjbG9i
YmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzc3LDcgKzMzMiw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShu
b2RlKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdz
IGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAgICAgICAgICAgIC8vIGludGVn
ZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVy
ZQogICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCkBAIC0zODYsNyArMzQxLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChp
bmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CkBAIC00MTYsNyArMzcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5n
IGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwg
dGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCiAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZS4KQEAgLTQyNSw3ICszODAsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KQEAgLTQ2MSwxMiArNDE2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAg
ICAgICAgICAgICAgIGlmIChpc0ZpeGVkSW5kZXhlZFN0b3JhZ2VPYmplY3RQcmVkaWN0aW9uKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSAmJiBieVZhbElzUHVyZShub2RlKSkK
KyAgICAgICAgICAgICAgICBpZiAoaXNGaXhlZEluZGV4ZWRTdG9yYWdlT2JqZWN0UHJlZGljdGlv
bihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkgJiYgbV9ncmFwaC5ieVZhbElz
UHVyZShub2RlKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIE5vTm9kZTsKIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBp
ZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC02MTAsNiArNTY1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBJc1N0cmluZzoKICAgICAgICAgY2FzZSBJc09iamVjdDoK
ICAgICAgICAgY2FzZSBJc0Z1bmN0aW9uOgorICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCkBAIC02MzUsMTggKzU5MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICAg
ICAgY2FzZSBDb21wYXJlRXE6IHsKLSAgICAgICAgICAgIGlmIChpc1ByZWRpY3RlZE51bWVyaWNh
bChub2RlKSkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0g
cHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBO
b05vZGUgJiYgaXNQcmVkaWN0ZWROdW1lcmljYWwobV9ncmFwaFtyZXBsYWNlbWVudEluZGV4XSkp
Ci0gICAgICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHJlcGxhY2VtZW50SW5kZXgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKLSAgICAgICAgICAgIGlmIChsb2dpY2FsTm90
SXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5pc1ByZWRpY3RlZE51bWVy
aWNhbChub2RlKSkgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4
ID0gcHVyZUNTRShub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAh
PSBOb05vZGUgJiYgbG9naWNhbE5vdElzUHVyZShtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdKSkK
KyAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgbV9ncmFw
aC5pc1ByZWRpY3RlZE51bWVyaWNhbChtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKICAgICAg
ICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJbmRleCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTY1OSwxMiArNjA2LDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFs
OgotICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAgaWYgKG1f
Z3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxk
MigpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkgJiYgZ2V0
QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigp
LmluZGV4KCkpICE9IE5vTm9kZSkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJl
KG5vZGUpICYmIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwg
bm9kZS5jaGlsZDIoKS5pbmRleCgpKSAhPSBOb05vZGUpCiAgICAgICAgICAgICAgICAgbm9kZS5z
ZXRPcChQdXRCeVZhbEFsaWFzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBA
IC03MDQsMTQgKzY1MSwxOSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgfQogICAgIAotICAgIHZv
aWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2smIGJsb2NrKQorICAgIHZvaWQgcGVyZm9ybUJs
b2NrQ1NFKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgbV9jdXJyZW50QmxvY2sg
PSAmYmxvY2s7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IExhc3ROb2RlVHlwZTsgKytpKQogICAgICAgICAgICAgbV9sYXN0U2Vlbltp
XSA9IFVJTlRfTUFYOwogCi0gICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4
SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAg
bV9jb21waWxlSW5kZXggPSBibG9ja1ttX2luZGV4SW5CbG9ja107CisgICAgICAgIGZvciAobV9p
bmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRl
eEluQmxvY2spIHsKKyAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2stPmF0KG1faW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgIHBlcmZvcm1Ob2RlQ1NFKG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KQEAgLTcyMyw5ICs2NzUsOSBAQCBwcml2YXRlOgog
ICAgIEZpeGVkQXJyYXk8dW5zaWduZWQsIExhc3ROb2RlVHlwZT4gbV9sYXN0U2VlbjsKIH07CiAK
LXZvaWQgcGVyZm9ybUNTRShHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1DU0UoR3JhcGgmIGdy
YXBoKQogewotICAgIHJ1blBoYXNlPENTRVBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBo
YXNlPENTRVBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmgJKHJldmlzaW9uIDExNDU1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGEgd2lkZSByYW5nZSBvZiBz
dWJleHByZXNzaW9uIHNpbWlsYXJpdGllcy4gSXQncyBrbm93biB0byBwcm9kdWNlIGJpZyB3aW5z
CiAvLyBvbiBhIGZldyBiZW5jaG1hcmtzLCBhbmQgaXMgcmVsYXRpdmVseSBjaGVhcCB0byBydW4u
CiAKLXZvaWQgcGVyZm9ybUNTRShHcmFwaCYpOworYm9vbCBwZXJmb3JtQ1NFKEdyYXBoJik7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw5IEBACiAjZGVmaW5l
IERGR19FTkFCTEUoREZHX0ZFQVRVUkUpIChkZWZpbmVkIERGR19FTkFCTEVfIyNERkdfRkVBVFVS
RSAmJiBERkdfRU5BQkxFXyMjREZHX0ZFQVRVUkUpCiAKIC8vIEVtaXQgdmFyaW91cyBsb2dnaW5n
IGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxv
dyBncmFwaHMuCi0jZGVmaW5lIERGR19FTkFCTEVfREVCVUdfVkVSQk9TRSAwCisjZGVmaW5lIERG
R19FTkFCTEVfREVCVUdfVkVSQk9TRSAxCiAvLyBFbWl0IGR1bXBzIGR1cmluZyBwcm9wYWdhdGlv
biwgaW4gYWRkaXRpb24gdG8ganVzdCBhZnRlci4KLSNkZWZpbmUgREZHX0VOQUJMRV9ERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFIDAKKyNkZWZpbmUgREZHX0VOQUJMRV9ERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFIDEKIC8vIEVtaXQgbG9nZ2luZyBmb3IgT1NSIGV4aXQgdmFsdWUgcmVjb3Zlcmll
cyBhdCBldmVyeSBub2RlLCBub3QganVzdCBub2RlcyB0aGF0CiAvLyBhY3R1YWxseSBoYXMgc3Bl
Y3VsYXRpb24gY2hlY2tzLgogI2RlZmluZSBERkdfRU5BQkxFX1ZFUkJPU0VfVkFMVUVfUkVDT1ZF
UklFUyAwCkBAIC00OSw2ICs0OSwxMiBAQAogI2Vsc2UKICNkZWZpbmUgREZHX0VOQUJMRV9KSVRf
QVNTRVJUIDAKICNlbmRpZgorLy8gRW5hYmxlIHZhbGlkYXRpb24gb2YgdGhlIGdyYXBoLgorI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyNkZWZpbmUgREZHX0VOQUJMRV9WQUxJREFUSU9OIDEKKyNlbHNl
CisjZGVmaW5lIERGR19FTkFCTEVfVkFMSURBVElPTiAwCisjZW5kaWYKIC8vIENvbnNpc3RlbmN5
IGNoZWNrIGNvbnRlbnRzIGNvbXBpbGVyIGRhdGEgc3RydWN0dXJlcy4KICNkZWZpbmUgREZHX0VO
QUJMRV9DT05TSVNURU5DWV9DSEVDSyAwCiAvLyBFbWl0IGEgYnJlYWtwb2ludCBpbnRvIHRoZSBo
ZWFkIG9mIGV2ZXJ5IGdlbmVyYXRlZCBmdW5jdGlvbiwgdG8gYWlkIGRlYnVnZ2luZyBpbiBHREIu
CkBAIC02Miw3ICs2OCw3IEBACiAvLyBFbWl0IGEgYnJlYWtwb2ludCBpbnRvIHRoZSBzcGVjdWxh
dGlvbiBmYWlsdXJlIGNvZGUuCiAjZGVmaW5lIERGR19FTkFCTEVfSklUX0JSRUFLX09OX1NQRUNV
TEFUSU9OX0ZBSUxVUkUgMAogLy8gTG9nIGV2ZXJ5IHNwZWN1bGF0aW9uIGZhaWx1cmUuCi0jZGVm
aW5lIERGR19FTkFCTEVfVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlMVVJFIDAKKyNkZWZpbmUgREZH
X0VOQUJMRV9WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUgMQogLy8gRGlzYWJsZSB0aGUgREZH
IEpJVCB3aXRob3V0IGhhdmluZyB0byB0b3VjaCBQbGF0Zm9ybS5oCiAjZGVmaW5lIERGR19ERUJV
R19MT0NBTF9ESVNCQUxFIDAKIC8vIEVuYWJsZSBPU1IgZW50cnkgZnJvbSBiYXNlbGluZSBKSVQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDEzICs0MywxNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIHJ1bigp
CisgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgIAogICAgICAgICBBYnN0cmFjdFN0YXRlIHN0YXRlKG1fZ3JhcGgpOwogICAgICAgICBJ
bnNlcnRpb25TZXQ8Tm9kZUluZGV4PiBpbnNlcnRpb25TZXQ7CiAgICAgICAgIAogICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFibG9j
ay0+Y2ZhRm91bmRDb25zdGFudHMpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwpAQCAtNjAsMjkgKzY0LDUzIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUlu
ZGV4XTsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKQotICAgICAg
ICAgICAgICAgICAgICB8fCAobm9kZS5mbGFncygpICYgKE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9k
ZU1pZ2h0Q2xvYmJlcikpCisgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGguY2xvYmJlcnNX
b3JsZChub2RlKQogICAgICAgICAgICAgICAgICAgICB8fCBub2RlLmhhc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBzdGF0ZS5mb3JOb2RlKG5vZGVJbmRleCkudmFsdWUoKTsKICAgICAgICAgICAgICAgICBp
ZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBOb2RlIHBoYW50b20oUGhhbnRvbSwgbm9kZS5jb2RlT3JpZ2lu
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdl
dExvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGUuY2hpbGQx
KCldLm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS5s
b2NhbCgpKSA9PSBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2st
PmlzSW5QaGlzKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOworICAgICAgICAgICAgICAgICAgICBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IG5vZGUuY2hpbGQx
KCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCB0YWlsTm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5v
ZGUubG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0YWlsTm9kZUluZGV4ID09IG5v
ZGVJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChub2RlLmxvY2FsKCkpID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBo
W3RhaWxOb2RlSW5kZXhdLm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBtX2dyYXBoW3RhaWxOb2RlSW5kZXhdLm9wKCkgPT0gU2V0TG9jYWwpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIHBoYW50b20uY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuOwogICAgICAgICAg
ICAgICAgIHBoYW50b20ucmVmKCk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
bV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlSW5kZXgsIHZhbHVlKTsKICAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggcGhhbnRvbU5vZGVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwogICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHBoYW50b20pOwogICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2NrLCBwaGFudG9tTm9kZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHN0YXRlLnJlc2V0KCk7CiAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZSgqYmxvY2spOworICAgICAgICAgICAgc3RhdGUucmVzZXQoKTsKICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogfTsKIAotdm9pZCBwZXJmb3Jt
Q29uc3RhbnRGb2xkaW5nKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUNvbnN0YW50Rm9sZGlu
ZyhHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Q29uc3RhbnRGb2xkaW5nUGhhc2U+KGdy
YXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q29uc3RhbnRGb2xkaW5nUGhhc2U+KGdyYXBoKTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaAkocmV2aXNpb24gMTE0
NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIEdyYXBoOwogLy8gaW5m
ZXJyZWQgY29uc3RhbnRzLCBhbmQgcmVwbGFjZXMgdGhvc2Ugbm9kZXMgd2l0aCBjb25zdGFudHMg
d2hpbHN0IGluamVjdGluZwogLy8gUGhhbnRvbSBub2RlcyB0byBrZWVwIHRoZSBjaGlsZHJlbiBh
bGl2ZSAod2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBPU1IgZXhpdCkuCiAKLXZvaWQgcGVyZm9ybUNv
bnN0YW50Rm9sZGluZyhHcmFwaCYpOworYm9vbCBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKEdyYXBo
Jik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBA
CiAKICNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgogI2luY2x1ZGUgIkRGR0NGQVBoYXNl
LmgiCisjaW5jbHVkZSAiREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRG
R0NTRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCIKICNpbmNs
dWRlICJERkdGaXh1cFBoYXNlLmgiCkBAIC02MCwxMiArNjEsMTcgQEAgaW5saW5lIGJvb2wgY29t
cGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxl
RnVuY3Rpb24pCiAgICAgICAgIGRmZy5wcmVkaWN0QXJndW1lbnRUeXBlcygpOwogCi0gICAgcGVy
Zm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVByZWRpY3Rpb25Q
cm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOwotICAgIHBlcmZvcm1DRkEo
ZGZnKTsKLSAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7Ci0gICAgcGVyZm9ybUNTRShk
ZmcpOworICAgIGZvciAoOzspIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgIHBlcmZvcm1DRkEoZGZnKTsKKyAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ29uc3RhbnRG
b2xkaW5nKGRmZyk7CisgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9u
KGRmZyk7CisgICAgICAgIHBlcmZvcm1DU0UoZGZnKTsKKyAgICAgICAgaWYgKCFjaGFuZ2VkKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxv
Y2F0aW9uKGRmZyk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcg
QEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4g
aW5kZXhVbmNoZWNrZWQoKSAhPSBOb05vZGU7IH0KKyAgICBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gaXNTZXQoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
IWlzU2V0KCk7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oRWRnZSBvdGhlcikgY29uc3QK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDExIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewogICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1f
YmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KQogICAgICAgICAgICAgZml4dXBCbG9jayhtX2dy
YXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCiBwcml2YXRlOgpAQCAtMzU5LDkgKzM2MCw5IEBAIHByaXZhdGU6CiAgICAgSW5zZXJ0
aW9uU2V0PE5vZGVJbmRleD4gbV9pbnNlcnRpb25TZXQ7CiB9OwogICAgIAotdm9pZCBwZXJmb3Jt
Rml4dXAoR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtRml4dXAoR3JhcGgmIGdyYXBoKQogewot
ICAgIHJ1blBoYXNlPEZpeHVwUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Rml4
dXBQaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBGaXggcG9ydGlvbnMgb2Yg
dGhlIGdyYXBoIHRoYXQgYXJlIGluZWZmaWNpZW50IGdpdmVuIHRoZSBwcmVkaWN0aW9ucyB0aGF0
CiAvLyB3ZSBoYXZlLiBUaGlzIHNob3VsZCBydW4gYWZ0ZXIgcHJlZGljdGlvbiBwcm9wYWdhdGlv
biBidXQgYmVmb3JlIENTRS4KIAotdm9pZCBwZXJmb3JtRml4dXAoR3JhcGgmKTsKK2Jvb2wgcGVy
Zm9ybUZpeHVwKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkc6OlBoYXNlCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjc1LDE1ICsyNzUsMjkgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9k
ZUluZGV4KQogCiB2b2lkIEdyYXBoOjpkdW1wKCkKIHsKKyAgICBib29sIGR1bXBBbGwgPSBmYWxz
ZTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgZHVtcEFs
bCA9IHRydWU7CisjZW5kaWYKKwogICAgIE5vZGVJbmRleCBsYXN0Tm9kZUluZGV4ID0gTm9Ob2Rl
OwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKKyAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBkYXRhTG9nKCJCbG9jayAj
JXUgKGJjIyV1KTogJXMlc1xuIiwgKGludCliLCBibG9jay0+Ynl0ZWNvZGVCZWdpbiwgYmxvY2st
PmlzUmVhY2hhYmxlID8gIiIgOiAiIChza2lwcGVkKSIsIGJsb2NrLT5pc09TUlRhcmdldCA/ICIg
KE9TUiB0YXJnZXQpIiA6ICIiKTsKKyAgICAgICAgZGF0YUxvZygiICBQcmVkZWNlc3NvcnM6Iik7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm1fcHJlZGVjZXNzb3JzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgZGF0YUxvZygiICMldSIsIGJsb2NrLT5tX3ByZWRlY2Vz
c29yc1tpXSk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgUGhp
IE5vZGVzOlxuIik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIC8vIER1bXBpbmcgdGhlIGRlYWQgUGhpIG5vZGVz
IGlzIGp1c3QgYW5ub3lpbmchCi0gICAgICAgICAgICBpZiAoYXQoYmxvY2stPnBoaXNbaV0pLnJl
ZkNvdW50KCkpCisgICAgICAgICAgICBpZiAoZHVtcEFsbCB8fCBhdChibG9jay0+cGhpc1tpXSku
cmVmQ291bnQoKSkgeworICAgICAgICAgICAgICAgIGR1bXBDb2RlT3JpZ2luKGxhc3ROb2RlSW5k
ZXgsIGJsb2NrLT5waGlzW2ldKTsKICAgICAgICAgICAgICAgICBkdW1wKGJsb2NrLT5waGlzW2ld
KTsKKyAgICAgICAgICAgICAgICBsYXN0Tm9kZUluZGV4ID0gYmxvY2stPnBoaXNbaV07CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiICB2YXJzIGJlZm9yZTogIik7
CiAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKQEAgLTMwNSw2ICszMTksOSBAQCB2
b2lkIEdyYXBoOjpkdW1wKCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGF0YUxvZygiPGVt
cHR5PiIpOwogICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICBkYXRhTG9nKCIgIHZhciBs
aW5rczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFyaWFibGVzQXRUYWlsLCBX
VEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAgIH0KIH0KIApAQCAt
MzYyLDYgKzM3OSw1NCBAQCB2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcygpCiAgICAg
fQogfQogCit2b2lkIEdyYXBoOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2
PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJ
bmRleCkKK3sKKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2Jsb2Nrc1tzdWNjZXNzb3JJ
bmRleF0uZ2V0KCk7CisgICAgaWYgKCFzdWNjZXNzb3ItPmlzUmVhY2hhYmxlKSB7CisgICAgICAg
IHN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQo
c3VjY2Vzc29ySW5kZXgpOworICAgIH0KKyAgICAKKyAgICBzdWNjZXNzb3ItPm1fcHJlZGVjZXNz
b3JzLmFwcGVuZChibG9ja0luZGV4KTsKK30KKwordm9pZCBHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hh
YmlsaXR5KCkKK3sKKyAgICBWZWN0b3I8QmxvY2tJbmRleCwgMTY+IHdvcmtsaXN0OworICAgIHdv
cmtsaXN0LmFwcGVuZCgwKTsKKyAgICBtX2Jsb2Nrc1swXS0+aXNSZWFjaGFibGUgPSB0cnVlOwor
ICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJsb2NrSW5kZXggaW5k
ZXggPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbaW5kZXhdLmdldCgp
OworICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGlua2VkKTsKKyAgICAgICAgCisgICAgICAgIE5v
ZGUmIG5vZGUgPSBhdChibG9jay0+bGFzdCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUuaXNUZXJt
aW5hbCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLmlzSnVtcCgpKQorICAgICAgICAg
ICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS50YWtlbkJsb2NrSW5kZXgo
KSk7CisgICAgICAgIGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkgeworICAgICAgICAgICAgaGFu
ZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7Cisg
ICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLm5vdFRha2Vu
QmxvY2tJbmRleCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBHcmFwaDo6cmVzZXRS
ZWFjaGFiaWxpdHkoKQoreworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ibG9j
a3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgYmxvY2stPmlzUmVhY2hhYmxlID0gZmFsc2U7CisgICAg
ICAgIGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5jbGVhcigpOworICAgIH0KKyAgICAKKyAgICBkZXRl
cm1pbmVSZWFjaGFiaWxpdHkoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEx
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtMzQ2LDYgKzM0Niw3OCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpc0NhcHR1
cmVkKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgfQogICAgIAorICAg
IHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAg
ICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkubnVtU3VjY2Vzc29ycygpOworICAgIH0KKyAgICBC
bG9ja0luZGV4IHN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29yKGluZGV4KTsK
KyAgICB9CisgICAgQmxvY2tJbmRleCBzdWNjZXNzb3JGb3JDb25kaXRpb24oQmFzaWNCbG9jayog
YmxvY2ssIGJvb2wgY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGJsb2NrLT5s
YXN0KCkpLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBQ
cmVkaWN0ZWRUeXBlIGxlZnQgPSBhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCk7CisgICAg
ICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBhdChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9uKCk7
CisgICAgICAgIHJldHVybiBpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQcmVk
aWN0aW9uKHJpZ2h0KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBu
b2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKQorICAgICAgICAgICAgJiYgKChub2RlLm9wKCkgPT0gUHV0QnlWYWwgfHwg
bm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpCisgICAgICAgICAgICAgICAgPyBpc0FjdGlvbmFi
bGVNdXRhYmxlQXJyYXlQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSkK
KyAgICAgICAgICAgICAgICA6IGlzQWN0aW9uYWJsZUFycmF5UHJlZGljdGlvbihhdChub2RlLmNo
aWxkMSgpKS5wcmVkaWN0aW9uKCkpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjbG9iYmVyc1dv
cmxkKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUNs
b2JiZXJzV29ybGQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCEobm9k
ZS5mbGFncygpICYgTm9kZU1pZ2h0Q2xvYmJlcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6Cisg
ICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAg
ICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVx
OgorICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAgICAgIHJldHVybiAhaXNQcmVkaWN0
ZWROdW1lcmljYWwobm9kZSk7CisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICBy
ZXR1cm4gIWJ5VmFsSXNQdXJlKG5vZGUpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSWYgYnkg
c29tZSBvZGRpdHkgd2UgaGl0IHRoaXMgY2FzZSBpbiByZWxlYXNlIGJ1aWxkIGl0J3Mgc2FmZXIg
dG8gaGF2ZSBDU0UgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBib29sIGNsb2JiZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAg
IHJldHVybiBjbG9iYmVyc1dvcmxkKGF0KG5vZGVJbmRleCkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOworICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHko
KTsKKyAgICAKKyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbihOb2RlJiBub2RlKQorICAgIHsKKyAg
ICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQorICAgICAgICAgICAgcmV0
dXJuIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgcmV0dXJuIEFkamFjZW5jeUxpc3RTaXpl
OworICAgIH0KKyAgICAKKyAgICBFZGdlIGNoaWxkKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGluZGV4
KQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKQorICAg
ICAgICAgICAgcmV0dXJuIG1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyBpbmRl
eF07CisgICAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuLmNoaWxkKGluZGV4KTsKKyAgICB9Cisg
ICAgCiAgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7CiAgICAgQ29kZUJsb2NrKiBtX2Nv
ZGVCbG9jazsKICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKQEAgLTM2NCw2ICs0MzYs
OCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKIHByaXZhdGU6CiAg
ICAgCisgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29y
a2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCk7
CisgICAgCiAgICAgYm9vbCBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUm
IGFkZCwgTm9kZSYgdmFyaWFibGUsIE5vZGUmIGltbWVkaWF0ZSkKICAgICB7CiAgICAgICAgIEFT
U0VSVChpbW1lZGlhdGUuaGFzQ29uc3RhbnQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgc3RydWN0IE9wSW5m
byB7CiAvLyBOb2RlIHJlcHJlc2VudHMgYSBzaW5nbGUgb3BlcmF0aW9uIGluIHRoZSBkYXRhIGZs
b3cgZ3JhcGguCiBzdHJ1Y3QgTm9kZSB7CiAgICAgZW51bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsK
LQorICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBu
byBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29k
ZU9yaWdpbikKQEAgLTIwMiw3ICsyMDIsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3Ag
PSBKU0NvbnN0YW50OwogICAgICAgICBpZiAobV9mbGFncyAmIE5vZGVNdXN0R2VuZXJhdGUpCiAg
ICAgICAgICAgICBtX3JlZkNvdW50LS07Ci0gICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVNdXN0R2Vu
ZXJhdGU7CisgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlQ2xvYmJlcnNXb3JsZCkpOwor
ICAgICAgICBtX2ZsYWdzICY9IH4oTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIp
OwogICAgICAgICBtX29wSW5mbyA9IGNvbnN0YW50TnVtYmVyOwogICAgICAgICBjaGlsZHJlbi5y
ZXNldCgpOwogICAgIH0KQEAgLTQ2OCw2ICs0NjksMzcgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICByZXR1cm4gbV9vcEluZm8yOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNz
b3JzKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEp1bXA6
CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgICAg
ICByZXR1cm4gMjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbmRleCkgeworICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICByZXR1cm4gdGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgIHJldHVybiBub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIE5v
QmxvY2s7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQmxvY2tJbmRleCBzdWNjZXNzb3JG
b3JDb25kaXRpb24oYm9vbCBjb25kaXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoaXNCcmFu
Y2goKSk7CisgICAgICAgIHJldHVybiBjb25kaXRpb24gPyB0YWtlbkJsb2NrSW5kZXgoKSA6IG5v
dFRha2VuQmxvY2tJbmRleCgpOworICAgIH0KKyAgICAKICAgICBib29sIGhhc0hlYXBQcmVkaWN0
aW9uKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyAr
MTc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKElzU3Ry
aW5nLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKElzT2JqZWN0LCBOb2RlUmVzdWx0
Qm9vbGVhbikgXAogICAgIG1hY3JvKElzRnVuY3Rpb24sIE5vZGVSZXN1bHRCb29sZWFuKSBcCi0g
ICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTWlnaHRDbG9iYmVy
KSBcCisgICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNy
byhUb1ByaW1pdGl2ZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9i
YmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oU3RyQ2F0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEyMSw3ICsxMTIxLDcgQEAgc2l6ZV90IERGR19PUEVSQVRJ
T04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9i
YWxEYXRhLCBleGVjKTsKICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cCkudG9Cb29sZWFuKGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
KS50b0Jvb2xlYW4oKTsKIH0KIAogI2lmIERGR19FTkFCTEUoVkVSQk9TRV9TUEVDVUxBVElPTl9G
QUlMVVJFKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAJKHJldmlz
aW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAor
I2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTM2LDEw
ICszOCwxMiBAQCB2b2lkIFBoYXNlOjpiZWdpblBoYXNlKCkKICAgICBkYXRhTG9nKCJCZWdpbm5p
bmcgREZHIHBoYXNlICVzLlxuIiwgbV9uYW1lKTsKICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUg
JXM6XG4iLCBtX25hbWUpOwogICAgIG1fZ3JhcGguZHVtcCgpOworICAgIHZhbGlkYXRlKG1fZ3Jh
cGgsIERvbnREdW1wR3JhcGgpOwogfQogCiB2b2lkIFBoYXNlOjplbmRQaGFzZSgpCiB7CisgICAg
dmFsaWRhdGUobV9ncmFwaCwgRHVtcEdyYXBoKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3Mywx
MCBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgUGhhc2VUeXBlPgotdm9pZCBy
dW5QaGFzZShHcmFwaCYgZ3JhcGgpCitib29sIHJ1blBoYXNlKEdyYXBoJiBncmFwaCkKIHsKICAg
ICBQaGFzZVR5cGUgcGhhc2UoZ3JhcGgpOwotICAgIHBoYXNlLnJ1bigpOworICAgIHJldHVybiBw
aGFzZS5ydW4oKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgcnVu
KCkKKyAgICBib29sIHJ1bigpCiAgICAgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKICAgICAgICAgbV9jb3VudCA9IDA7CkBAIC03Nyw2ICs3Nyw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGRvUm91bmRPZkRvdWJsZVZvdGluZygpOwogICAgICAgICAgICAgcHJv
cGFnYXRlQmFja3dhcmQoKTsKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKIHByaXZhdGU6CkBAIC04MzEsOSAr
ODMzLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKICAgICAKLXZvaWQgcGVyZm9ybVByZWRpY3Rp
b25Qcm9wYWdhdGlvbihHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFn
YXRpb24oR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNlPFByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPFByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGFyaXRobWV0aWMgbm9kZXMpIGRvIG5vdCBx
dWFsaWZ5IGZvciBhbnkgb2YgdGhlc2UgY2F0ZWdvcmllcy4gQnV0IGFmdGVyIHJ1bm5pbmcKIC8v
IHRoaXMgcGhhc2UsIHdlJ2xsIGhhdmUgZnVsbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGV4cGVjdGVk
IHR5cGUgb2YgZWFjaCBub2RlLgogCi12b2lkIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24o
R3JhcGgmKTsKK2Jvb2wgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYpOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHOjpQaGFzZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQor
ICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAg
ICAgICBkbyB7CkBAIC02Myw3ICs2Myw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCisgICAgICAgIAorICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNjYsOSArMTY3LDkgQEAgcHJpdmF0ZToKIAog
fTsKIAotdm9pZCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24oR3JhcGgmIGdyYXBoKQor
Ym9vbCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24oR3JhcGgmIGdyYXBoKQogewotICAg
IHJ1blBoYXNlPFJlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1
cm4gcnVuUGhhc2U8UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZT4oZ3JhcGgpOwogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaAkocmV2
aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQ
aGlFbGltaW5hdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xh
c3MgR3JhcGg7CiAvLyBXZSBpbnNlcnRlZCBtYW55IGNhbi1iZS1yZWR1bmRhbnQgUGhpIG5vZGVz
IHdoZW4gYnVpbGRpbmcgdGhlIGdyYXBoLgogLy8gVGhpcyBwaGFzZSB3aWxsIGp1c3QgcmVtb3Zl
IHRoZW0uCiAKLXZvaWQgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0aW9uKEdyYXBoJik7Citi
b29sIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbihHcmFwaCYpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nv
cmVCb2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nv
cmVCb2FyZC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Njb3JlQm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDEyICsxMjAsMjUgQEAgcHVi
bGljOgogICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHVzZSBjb3VudCAmIGFkZCB0byB0aGUgZnJl
ZSBsaXN0LgogICAgICAgICAgICAgbV91c2VkW2luZGV4XSA9IDA7CiAgICAgICAgICAgICBtX2Zy
ZWUuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICBkYXRhTG9nKCIgVmlydHVhbCByZWdp
c3RlciAldSBpcyBhdCAldS8ldSB1c2VzLiIsIGluZGV4LCBtX3VzZWRbaW5kZXhdLCBub2RlLnJl
ZkNvdW50KCkpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAgICAgdm9pZCB1c2UoRWRnZSBj
aGlsZCkKICAgICB7CiAgICAgICAgIHVzZShjaGlsZC5pbmRleFVuY2hlY2tlZCgpKTsKICAgICB9
CisgICAgCisgICAgdm9pZCB1c2VJZkhhc1Jlc3VsdChFZGdlIGNoaWxkKQorICAgIHsKKyAgICAg
ICAgaWYgKCFjaGlsZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFtX2dyYXBo
W2NoaWxkXS5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdXNlKGNo
aWxkKTsKKyAgICB9CiAKICAgICB1bnNpZ25lZCBoaWdoV2F0ZXJtYXJrKCkKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODAsOCArMTI4MCwxMSBAQCBib29sIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKCkKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
MCksIEdQUkluZm86OnJlZ1QwKTsKIAogICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwotICAg
IGZvciAobV9ibG9jayA9IDA7IG1fYmxvY2sgPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUo
KTsgKyttX2Jsb2NrKQotICAgICAgICBjb21waWxlKCptX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21f
YmxvY2tdKTsKKyAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5t
X2Jsb2Nrcy5zaXplKCk7ICsrbV9ibG9jaykgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10uZ2V0KCk7CisgICAgICAgIGlmIChibG9j
aykKKyAgICAgICAgICAgIGNvbXBpbGUoKmJsb2NrKTsKKyAgICB9CiAgICAgbGlua0JyYW5jaGVz
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMjg5LDggKzEyOTIsMTAgQEAgYm9vbCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjcmVhdGVPU1JFbnRy
aWVzKCkKIHsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAg
IEJhc2ljQmxvY2smIGJsb2NrID0gKm1faml0LmdyYXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF07
Ci0gICAgICAgIGlmICghYmxvY2suaXNPU1JUYXJnZXQpCisgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWJsb2NrLT5p
c09TUlRhcmdldCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIEN1cnJlbnRs
eSB3ZSBvbmx5IG5lZWQgdG8gY3JlYXRlIE9TUiBlbnRyeSB0cmFtcG9saW5lcyB3aGVuIHVzaW5n
IGVkZ2UgY29kZQpAQCAtMTMxMiw5ICsxMzE3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Omxp
bmtPU1JFbnRyaWVzKExpbmsKIHsKICAgICB1bnNpZ25lZCBvc3JFbnRyeUluZGV4ID0gMDsKICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFw
aCgpLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sm
IGJsb2NrID0gKm1faml0LmdyYXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF07Ci0gICAgICAgIGlm
IChibG9jay5pc09TUlRhcmdldCkKLSAgICAgICAgICAgIG1faml0Lm5vdGljZU9TUkVudHJ5KGJs
b2NrLCBtX29zckVudHJ5SGVhZHNbb3NyRW50cnlJbmRleCsrXSwgbGlua0J1ZmZlcik7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1tibG9ja0luZGV4
XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBtX2ppdC5ub3RpY2VPU1JFbnRyeSgqYmxvY2ssIG1fb3NyRW50cnlIZWFkc1tvc3JFbnRy
eUluZGV4KytdLCBsaW5rQnVmZmVyKTsKICAgICB9CiAgICAgQVNTRVJUKG9zckVudHJ5SW5kZXgg
PT0gbV9vc3JFbnRyeUhlYWRzLnNpemUoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwNiw3ICszMDYsMTAgQEAgcHVibGljOgogICAgIC8vIENhbGxlZCBvbiBhbiBvcGVyYW5k
IG9uY2UgaXQgaGFzIGJlZW4gY29uc3VtZWQgYnkgYSBwYXJlbnQgbm9kZS4KICAgICB2b2lkIHVz
ZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IGF0KG5vZGVJbmRleCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAg
IE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgICAgICAv
LyB1c2UoKSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWUgYmVjb21lcyBkZWFkLCBhbmQgYW55
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHVmFsaWRh
dGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisjaWYgREZHX0VOQUJMRShW
QUxJREFUSU9OKQorCitjbGFzcyBWYWxpZGF0ZSB7CitwdWJsaWM6CisgICAgVmFsaWRhdGUoR3Jh
cGgmIGdyYXBoLCBHcmFwaER1bXBNb2RlIGdyYXBoRHVtcE1vZGUpCisgICAgICAgIDogbV9ncmFw
aChncmFwaCkKKyAgICAgICAgLCBtX2dyYXBoRHVtcE1vZGUoZ3JhcGhEdW1wTW9kZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgICNkZWZpbmUgVkFMSURBVEUoY29udGV4dCwgYXNzZXJ0aW9uKSBk
byB7IFwKKyAgICAgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCisgICAgICAgICAgICBkYXRhTG9n
KCJcblxuXG5BdCAiKTsgXAorICAgICAgICAgICAgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQgY29u
dGV4dDsgXAorICAgICAgICAgICAgZGF0YUxvZygiOiB2YWxpZGF0aW9uICVzICglczolZCkgZmFp
bGVkLlxuIiwgI2Fzc2VydGlvbiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorICAgICAgICAgICAg
ZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSgpOyBcCisgICAgICAgICAgICBXVEZSZXBvcnRBc3NlcnRp
b25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2Fzc2Vy
dGlvbik7IFwKKyAgICAgICAgICAgIENSQVNIKCk7IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGls
ZSAoMCkKKyAgICAKKyAgICAjZGVmaW5lIFZfRVFVQUwoY29udGV4dCwgbGVmdCwgcmlnaHQpIGRv
IHsgXAorICAgICAgICBpZiAobGVmdCAhPSByaWdodCkgeyBcCisgICAgICAgICAgICBkYXRhTG9n
KCJcblxuXG5BdCAiKTsgXAorICAgICAgICAgICAgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQgY29u
dGV4dDsgXAorICAgICAgICAgICAgZGF0YUxvZygiOiB2YWxpZGF0aW9uICglcyA9ICIsICNsZWZ0
KTsgXAorICAgICAgICAgICAgZHVtcERhdGEobGVmdCk7IFwKKyAgICAgICAgICAgIGRhdGFMb2co
IikgPT0gKCVzID0gIiwgI3JpZ2h0KTsgXAorICAgICAgICAgICAgZHVtcERhdGEocmlnaHQpOyBc
CisgICAgICAgICAgICBkYXRhTG9nKCIpICglczolZCkgZmFpbGVkLlxuIiwgX19GSUxFX18sIF9f
TElORV9fKTsgXAorICAgICAgICAgICAgZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSgpOyBcCisgICAg
ICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RG
X1BSRVRUWV9GVU5DVElPTiwgI2xlZnQgIiA9PSAiICNyaWdodCk7IFwKKyAgICAgICAgICAgIENS
QVNIKCk7IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoMCkKKworICAgIHZvaWQgdmFsaWRh
dGUoKQorICAgIHsKKyAgICAgICAgLy8gTkIuIFRoaXMgY29kZSBpcyBub3Qgd3JpdHRlbiBmb3Ig
cGVyZm9ybWFuY2UsIHNpbmNlIGl0IGlzIG5vdCBpbnRlbmRlZCB0byBydW4KKyAgICAgICAgLy8g
aW4gcmVsZWFzZSBidWlsZHMuCisgICAgICAgIAorICAgICAgICAvLyBWYWxpZGF0ZSByZWYgY291
bnRzIGFuZCB1c2VzLgorICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG15UmVmQ291bnRzOworICAg
ICAgICBteVJlZkNvdW50cy5maWxsKDAsIG1fZ3JhcGguc2l6ZSgpKTsKKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9j
aykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghYmxvY2stPmlz
UmVhY2hhYmxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7CisgICAgICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hp
bGRyZW4obm9kZSk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dy
YXBoLmNoaWxkKG5vZGUsIGopOworICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIG15UmVmQ291bnRzW2VkZ2UuaW5kZXgoKV0rKzsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBJJ20gYSBGbHVzaCwgUGhh
bnRvbSwgR2V0TG9jYWwsIG9yIFBoaSwgbXkgY2hpbGRyZW4gc2hvdWxkIGhhc1Jlc3VsdCgpLgor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAg
ICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
UGhpOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBl
ZGdlKSwgbV9ncmFwaFtlZGdlXS5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghYmxvY2st
PmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7CisgICAgICAg
ICAgICAgICAgVl9FUVVBTCgobm9kZUluZGV4KSwgbXlSZWZDb3VudHNbbm9kZUluZGV4XSwgbV9n
cmFwaFtub2RlSW5kZXhdLmFkanVzdGVkUmVmQ291bnQoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIEdy
YXBoRHVtcE1vZGUgbV9ncmFwaER1bXBNb2RlOworICAgIAorICAgIHZvaWQgcmVwb3J0VmFsaWRh
dGlvbkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGRhdGFMb2co
IkAldSIsIG5vZGVJbmRleCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlv
bkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
ZGF0YUxvZygiQCV1IC0+ICVzQCV1Iiwgbm9kZUluZGV4LCB1c2VLaW5kVG9TdHJpbmcoZWRnZS51
c2VLaW5kKCkpLCBlZGdlLmluZGV4KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBEYXRh
KHVuc2lnbmVkIHZhbHVlKQorICAgIHsKKyAgICAgICAgZGF0YUxvZygiJXUiLCB2YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSgpCisgICAgeworICAg
ICAgICBpZiAobV9ncmFwaER1bXBNb2RlID09IERvbnREdW1wR3JhcGgpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRhdGFMb2coIkdyYXBoIGF0IHRpbWUgb2YgZmFpbHVyZTpcbiIpOwor
ICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICB9Cit9OworCit2b2lkIHZhbGlkYXRlKEdyYXBo
JiBncmFwaCwgR3JhcGhEdW1wTW9kZSBncmFwaER1bXBNb2RlKQoreworICAgIFZhbGlkYXRlIHZh
bGlkYXRpb25PYmplY3QoZ3JhcGgsIGdyYXBoRHVtcE1vZGUpOworICAgIHZhbGlkYXRpb25PYmpl
Y3QudmFsaWRhdGUoKTsKK30KKworI2VuZGlmIC8vIERGR19FTkFCTEUoVkFMSURBVElPTikKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBERkdWYWxpZGF0ZV9oCisjZGVmaW5lIERGR1ZhbGlkYXRlX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gR3JhcGhEdW1wTW9kZSB7IERvbnREdW1wR3JhcGgs
IER1bXBHcmFwaCB9OworCisjaWYgREZHX0VOQUJMRShWQUxJREFUSU9OKQordm9pZCB2YWxpZGF0
ZShHcmFwaCYsIEdyYXBoRHVtcE1vZGUpOworI2Vsc2UKK2lubGluZSB2b2lkIHZhbGlkYXRlKEdy
YXBoJiwgR3JhcGhEdW1wTW9kZSkgeyB9CisjZW5kaWYKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQaGFzZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIlByZXNlcnZlZCB2
YXJzOiAiKTsKQEAgLTU0LDYgKzU0LDEwIEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICBmb3Ig
KHNpemVfdCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIWJsb2NrLT5pc1Jl
YWNoYWJsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5k
ZXhJbkJsb2NrKSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKQEAgLTY2LDIyICs3MCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpIHx8IG5vZGUub3AoKSA9PSBQaGkgfHwgbm9k
ZS5vcCgpID09IEZsdXNoKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIEdldExvY2FsIG5vZGVzIGFyZSBlZmZlY3RpdmVseSBw
aGkgbm9kZXMgaW4gdGhlIGdyYXBoLCByZWZlcmVuY2luZwotICAgICAgICAgICAgICAgIC8vIHJl
c3VsdHMgZnJvbSBwcmlvciBibG9ja3MuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUub3AoKSAh
PSBHZXRMb2NhbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ugb24g
YWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhlbgotICAgICAgICAgICAgICAg
ICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBkbyBz
byBpbiB0aGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIG9yZGVyIHNvIHRoYXQgaWYgYSBjaGls
ZCBpcyBvbiBpdHMgbGFzdCB1c2UsIGFuZCBhCi0gICAgICAgICAgICAgICAgICAgIC8vIFZpcnR1
YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2VkIGZvciBub2RlLgotICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0
Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4o
KTsgY2hpbGRJZHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVz
ZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5j
aGlsZDIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNo
aWxkMygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNSZXN1bHQoKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGNhbGwgdXNlIG9uIGFsbCBvZiB0aGUg
Y3VycmVudCBub2RlJ3MgY2hpbGRyZW4sIHRoZW4KKyAgICAgICAgICAgICAgICAvLyBhbGxvY2F0
ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBkbyBzbyBpbiB0aGlzCisgICAg
ICAgICAgICAgICAgLy8gb3JkZXIgc28gdGhhdCBpZiBhIGNoaWxkIGlzIG9uIGl0cyBsYXN0IHVz
ZSwgYW5kIGEKKyAgICAgICAgICAgICAgICAvLyBWaXJ0dWFsUmVnaXN0ZXIgaXMgZnJlZWQsIHRo
ZW4gaXQgbWF5IGJlIHJldXNlZCBmb3Igbm9kZS4KKyAgICAgICAgICAgICAgICBpZiAobm9kZS5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RD
aGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBzY29yZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG5vZGUuY2hpbGQxKCkpOworICAgICAgICAg
ICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG5vZGUuY2hpbGQyKCkpOworICAg
ICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG5vZGUuY2hpbGQzKCkp
OwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1
bHQoKSkKQEAgLTExNCwxMiArMTE3LDE0IEBAIHB1YmxpYzoKICNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIk51bSBjYWxsZWUgcmVnaXN0ZXJzOiAldVxuIiwg
Y2FsbGVlUmVnaXN0ZXJzKTsKICNlbmRpZgorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogfTsKIAotdm9pZCBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFw
aCYgZ3JhcGgpCitib29sIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKEdyYXBoJiBn
cmFwaCkKIHsKLSAgICBydW5QaGFzZTxWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2U+KGdy
YXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNl
PihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGZvciBsb29rLXVwIHRhYmxlcyBm
b3IgdGhlIGxpbmVhciBzY2FuIHJlZ2lzdGVyIGFsbG9jYXRvciB0aGF0IHRoZSBiYWNrZW5kCiAv
LyB1c2VzLgogCi12b2lkIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKEdyYXBoJik7
Citib29sIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKEdyYXBoJik7CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTg1LDcgKzI1ODUsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZShFeGVjCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5k
OwogICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc0Jvb2xlYW4oIWNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKS50b0Jvb2xlYW4o
Y2FsbEZyYW1lKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFjYWxsRnJh
bWUtPnIoc3JjKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpOwogICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7CiAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0Owog
CkBAIC0zOTA1LDcgKzM5MDUsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgKi8K
ICAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBpbnQgdGFyZ2V0
ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihjb25kKS5qc1Zh
bHVlKCkudG9Cb29sZWFuKGNhbGxGcmFtZSkpIHsKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihj
b25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7
CiAgICAgICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwogICAgICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwpAQCAtMzkyNSw3ICszOTI1LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAg
ICAgICAgICovCiAgICAgICAgIGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAg
aW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmICghY2FsbEZyYW1lLT5y
KGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAoIWNh
bGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQ
QyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwogICAgICAgICAg
ICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMzk0Miw3ICszOTQyLDcgQEAgc2tpcF9pZF9jdXN0
b21fc2VsZjoKICAgICAgICAgKi8KICAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5k
OwogICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKGNh
bGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNhbGxGcmFtZSkpIHsKKyAgICAg
ICAgaWYgKGNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAg
ICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAg
ICAgICAgIH0KQEAgLTM5NTgsNyArMzk1OCw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAg
ICAgICovCiAgICAgICAgIGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaW50
IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmICghY2FsbEZyYW1lLT5yKGNv
bmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAoIWNhbGxG
cmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyAr
PSB0YXJnZXQ7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjg1NSw5ICsyODU1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFs
dWUsIG9wXwogCiAgICAgSlNWYWx1ZSBzcmMgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgp
OwogCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLQot
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFzcmMudG9Cb29sZWFuKGNhbGxGcmFtZSkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFzcmMudG9Cb29sZWFuKCkpOwogICAg
IENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQpAQCAtMjg2OCw5ICsyODY2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04o
aW50LCBvcF9qdHJ1ZSkKIAogICAgIEpTVmFsdWUgc3JjMSA9IHN0YWNrRnJhbWUuYXJnc1swXS5q
c1ZhbHVlKCk7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZy
YW1lOwotCi0gICAgYm9vbCByZXN1bHQgPSBzcmMxLnRvQm9vbGVhbihjYWxsRnJhbWUpOworICAg
IGJvb2wgcmVzdWx0ID0gc3JjMS50b0Jvb2xlYW4oKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
X0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwNyw3ICs1MDcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
bmV3X3JlZ2V4CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbm90KQogewogICAgIExM
SU5UX0JFR0lOKCk7Ci0gICAgTExJTlRfUkVUVVJOKGpzQm9vbGVhbighTExJTlRfT1BfQygyKS5q
c1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKSk7CisgICAgTExJTlRfUkVUVVJOKGpzQm9vbGVhbigh
TExJTlRfT1BfQygyKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpKTsKIH0KIAogTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2VxKQpAQCAtMTExMCwxMyArMTExMCwxMyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfam1wX3Njb3BlCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfanRydWUpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBMTElOVF9CUkFOQ0gob3Bf
anRydWUsIExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7CisgICAgTExJ
TlRfQlJBTkNIKG9wX2p0cnVlLCBMTElOVF9PUF9DKDEpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSk7
CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qZmFsc2UpCiB7CiAgICAgTExJ
TlRfQkVHSU4oKTsKLSAgICBMTElOVF9CUkFOQ0gob3BfamZhbHNlLCAhTExJTlRfT1BfQygxKS5q
c1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBMTElOVF9CUkFOQ0gob3BfamZhbHNlLCAh
TExJTlRfT1BfQygxKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpOwogfQogCiBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfamxlc3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc5Nyw3ICs3OTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2Fs
bCgpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC50b0Jvb2xlYW4oZXhlYykpCisgICAgICAgICAg
ICBpZiAocmVzdWx0LnRvQm9vbGVhbigpKQogICAgICAgICAgICAgICAgIHJlc3VsdEFycmF5LT5w
dXREaXJlY3RJbmRleChleGVjLCBmaWx0ZXJJbmRleCsrLCB2KTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoayA9PSBsZW5ndGgpCkBAIC04MTgsNyArODE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlz
T2JqKTsKIAogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKTsKLSAgICAgICAgaWYg
KHJlc3VsdC50b0Jvb2xlYW4oZXhlYykpCisgICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFuKCkp
CiAgICAgICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgZmlsdGVySW5k
ZXgrKywgdik7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0QXJyYXkp
OwpAQCAtOTE3LDcgKzkxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykp
OwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgICAgICBp
ZiAoIXJlc3VsdC50b0Jvb2xlYW4oY2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpKQorICAg
ICAgICAgICAgaWYgKCFyZXN1bHQudG9Cb29sZWFuKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTkzNCw3ICs5MzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICAgICAgYm9vbCBwcmVkaWNhdGVS
ZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhp
cywgZWFjaEFyZ3VtZW50cykudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBib29sIHByZWRpY2F0
ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlU
aGlzLCBlYWNoQXJndW1lbnRzKS50b0Jvb2xlYW4oKTsKICAgICAgICAgaWYgKCFwcmVkaWNhdGVS
ZXN1bHQpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihmYWxzZSk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTEwMjUsNyArMTAyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwg
anNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlz
T2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0g
ICAgICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbihjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShl
eGVjKSkpCisgICAgICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbigpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTEwNDIsNyArMTA0Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgICAgICBib29s
IHByZWRpY2F0ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJv
b2wgcHJlZGljYXRlUmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbigpOwogICAgICAgICBpZiAo
cHJlZGljYXRlUmVzdWx0KSB7CiAgICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4odHJ1ZSk7
CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCB2b2lkIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24oCiBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVh
bk9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4
ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7
Ci0gICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFu
KGFyZ3MuYXQoMCkudG9Cb29sZWFuKGV4ZWMpKSk7CisgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVl
KGV4ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFuKGFyZ3MuYXQoMCkudG9Cb29sZWFuKCkpKTsK
ICAgICByZXR1cm4gb2JqOwogfQogCkBAIC02OCw3ICs2OCw3IEBAIENvbnN0cnVjdFR5cGUgQm9v
bGVhbkNvbnN0cnVjdG9yOjpnZXRDb24KIC8vIEVDTUEgMTUuNi4xCiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihleGVjLT5hcmd1bWVu
dCgwKS50b0Jvb2xlYW4oZXhlYykpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oKSkpOwogfQogCiBDYWxsVHlwZSBCb29s
ZWFuQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtOTYsNyArOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQmFzaWMg
Y29udmVyc2lvbnMuCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdG9QcmltaXRp
dmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAgICAgICAgIGJv
b2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVl
JikgY29uc3Q7Ci0gICAgICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OworICAg
ICAgICBib29sIHRvQm9vbGVhbigpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBk
b3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMiwxMSArNDIyLDYgQEAgdm9pZCBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMo
ZXhlYywgb2JqZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJv
b2wgSlNPYmplY3Q6OnRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdAotewotICAgIHJldHVybiB0
cnVlOwotfQotCiBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKIHsKICAgICBKU1ZhbHVlIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51
bWJlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
IAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQcmlt
aXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25zdDsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNv
bnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZyogdG9TdHJpbmcoRXhlY1N0
YXRlKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNyBAQCBib29sIEpT
U3RyaW5nOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIEpTU3RyaW5nOjp0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QKK2Jvb2wgSlNTdHJp
bmc6OnRvQm9vbGVhbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGVuZ3RoOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1p
dGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CiAgICAgICAgIGJv
b2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVl
JikgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCopIGNvbnN0OwogICAgICAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29u
c3Q7CkBAIC00MzUsMjMgKzQzNSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBi
b29sIGlzSlNTdHJpbmcoSlNWYWx1ZSB2KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIHYuYXNDZWxs
KCktPmNsYXNzSW5mbygpID09ICZKU1N0cmluZzo6c19pbmZvOyB9CiAKLSAgICBpbmxpbmUgYm9v
bCBKU0NlbGw6OnRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgaW5saW5lIGJv
b2wgSlNDZWxsOjp0b0Jvb2xlYW4oKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzU3RyaW5n
KCkpIAotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhp
cyktPnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBKU1N0cmluZyo+KHRoaXMpLT50b0Jvb2xlYW4oKTsKICAgICAgICAgcmV0dXJuICFzdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAg
Ly8gLS0tIEpTVmFsdWUgaW5saW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAg
Ci0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjp0b0Jvb2xlYW4oKSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKGlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybiBhc0ludDMyKCk7CiAgICAg
ICAgIGlmIChpc0RvdWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGFzRG91YmxlKCkgPiAwLjAg
fHwgYXNEb3VibGUoKSA8IDAuMDsgLy8gZmFsc2UgZm9yIE5hTgogICAgICAgICBpZiAoaXNDZWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gYXNDZWxsKCktPnRvQm9vbGVhbihleGVjKTsKKyAgICAg
ICAgICAgIHJldHVybiBhc0NlbGwoKS0+dG9Cb29sZWFuKCk7CiAgICAgICAgIHJldHVybiBpc1Ry
dWUoKTsgLy8gZmFsc2UsIG51bGwsIGFuZCB1bmRlZmluZWQgYWxsIGNvbnZlcnQgdG8gZmFsc2Uu
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1i
ZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKTsKIAotICAgICAgICBib29s
IHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgYm9vbCB0b0Jvb2xlYW4oKSBj
b25zdDsKIAogICAgICAgICAvLyB0b051bWJlciBjb252ZXJzaW9uIGlzIGV4cGVjdGVkIHRvIGJl
IHNpZGUgZWZmZWN0IGZyZWUgaWYgYW4gZXhjZXB0aW9uIGhhcwogICAgICAgICAvLyBiZWVuIHNl
dCBpbiB0aGUgRXhlY1N0YXRlIGFscmVhZHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNCwxNCArMjE0LDE0IEBAIHN0YXRpYyBib29sIHRvUHJvcGVy
dHlEZXNjcmlwdG9yKEV4ZWNTdGEKIAogICAgIFByb3BlcnR5U2xvdCBlbnVtZXJhYmxlU2xvdChk
ZXNjcmlwdGlvbik7CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUsIGVudW1lcmFibGVTbG90KSkgewotICAg
ICAgICBkZXNjLnNldEVudW1lcmFibGUoZW51bWVyYWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAg
IGRlc2Muc2V0RW51bWVyYWJsZShlbnVtZXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSkudG9Cb29sZWFuKCkpOwogICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgUHJvcGVydHlTbG90IGNvbmZpZ3VyYWJsZVNsb3QoZGVzY3JpcHRpb24pOwogICAgIGlmIChk
ZXNjcmlwdGlvbi0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
b25maWd1cmFibGUsIGNvbmZpZ3VyYWJsZVNsb3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0Q29uZmln
dXJhYmxlKGNvbmZpZ3VyYWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmNvbmZpZ3VyYWJsZSkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgZGVzYy5zZXRDb25m
aWd1cmFibGUoY29uZmlndXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuY29uZmlndXJhYmxlKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yMzYsNyAr
MjM2LDcgQEAgc3RhdGljIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YQogCiAgICAg
UHJvcGVydHlTbG90IHdyaXRhYmxlU2xvdChkZXNjcmlwdGlvbik7CiAgICAgaWYgKGRlc2NyaXB0
aW9uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxl
LCB3cml0YWJsZVNsb3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0V3JpdGFibGUod3JpdGFibGVTbG90
LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSkudG9Cb29sZWFu
KGV4ZWMpKTsKKyAgICAgICAgZGVzYy5zZXRXcml0YWJsZSh3cml0YWJsZVNsb3QuZ2V0VmFsdWUo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKS50b0Jvb2xlYW4oKSk7CiAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
OSw5ICsyNDksOSBAQCB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlCiAg
ICAgYXNSZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0SW5wdXQoZXhlYywgdmFsdWUu
dG9TdHJpbmcoZXhlYykpOwogfQogCi12b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5l
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit2
b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFz
ZU9iamVjdCktPnNldE11bHRpbGluZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworICAgIGFzUmVn
RXhwQ29uc3RydWN0b3IoYmFzZU9iamVjdCktPnNldE11bHRpbGluZSh2YWx1ZS50b0Jvb2xlYW4o
KSk7CiB9CiAKIC8vIEVDTUEgMTUuMTAuNApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDcsMTEgKzE0NywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZ0V4cFByb3RvCiAKICAgICBjaGFyIHBvc3RmaXhbNV0gPSB7ICcvJywgMCwgMCwgMCwgMCB9
OwogICAgIGludCBpbmRleCA9IDE7Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHRoaXNP
YmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS50b0Jvb2xlYW4o
KSkKICAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICdnJzsKLSAgICBpZiAodGhpc09iamVjdC0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pZ25vcmVDYXNlKS50b0Jvb2xlYW4oZXhl
YykpCisgICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
aWdub3JlQ2FzZSkudG9Cb29sZWFuKCkpCiAgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnaSc7
Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVs
dGlsaW5lKS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKS50b0Jvb2xlYW4oKSkKICAgICAgICAgcG9z
dGZpeFtpbmRleF0gPSAnbSc7CiAgICAgVVN0cmluZyBzb3VyY2UgPSB0aGlzT2JqZWN0LT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIC8vIElmIHNvdXJjZSBpcyBlbXB0eSwgdXNlICIvKD86KS8iIHRvIGF2b2lk
IGNvbGxpZGluZyB3aXRoIGNvbW1lbnQgc3ludGF4Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138729</attachid>
            <date>2012-04-24 20:32:52 -0700</date>
            <delta_ts>2012-04-25 22:17:28 -0700</delta_ts>
            <desc>it appears to work</desc>
            <filename>cfgsimplify_patch_8.diff</filename>
            <type>text/plain</type>
            <size>116925</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0ODYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNCBA
QAorMjAxMi0wNC0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTUzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGlu
IHByb2dyZXNzLgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNW
YWx1ZVRvQm9vbGVhbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAg
ICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6
cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAg
ICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2Uu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChDRkdTaW1wbGlmaWNhdGlv
blBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpDRkdT
aW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpbmRPcGVyYW5kU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjprZWVwT3BlcmFuZEFsaXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlm
aWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpD
RkdTaW1wbGlmaWNhdGlvblBoYXNlOjptZXJnZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6
cGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NT
RVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cnVuKToKKyAgICAgICAg
KENTRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2xvYmJlcnNXb3JsZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuaDoKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5oOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3VjY2Vz
c29yRm9yQ29uZGl0aW9uKToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om51bVN1Y2Nlc3NvcnMpOgorICAgICAgICAo
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3JGb3JDb25kaXRpb24pOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogZGZnL0RGR1BoYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6cnVuUGhh
c2UpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbik6CisgICAgICAgICog
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAg
ICAgICAqIGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlOjpydW4pOgorICAgICAgICAo
SlNDOjpERkc6OnBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbik6CisgICAgICAgICogZGZn
L0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OnBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmg6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3Bw
OgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
RXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAqIHJ1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9v
bGVhbik6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAg
KEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjp0b0Jvb2xlYW4pOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjp0
b1Byb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4
cFByb3RvRnVuY1RvU3RyaW5nKToKKwogMjAxMi0wNC0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaGF2ZSBjb25zdGFudCBwcm9wYWdhdGlv
bgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9vbCBKU1ZhbHVlVG9Cb29sZWFuKEpT
Q29udGV4dFJlZiBjdHgsIAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7CiAKICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKLSAgICByZXR1cm4ganNWYWx1
ZS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIGpzVmFsdWUudG9Cb29sZWFuKCk7CiB9CiAK
IGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1
ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCwxMCBAQAogCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0
NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGM0IzQTFBMTUz
RTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0ExNzE1M0U2OEVGMDAzRUQw
RkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwICovOyB9OwogCQkwRjNCM0ExQjE1M0U2
OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAv
KiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0IzQTI1MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTI5MTU0NzRGRjQw
MDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGM0IzQTJDMTU0NzUwMDIwMDNF
RDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgx
NDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JB
QjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRh
Rm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NjgsNiArNzcyLDEwIEBACiAJCTBG
MkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAv
KiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGM0IzQTI0MTU0NEM5
OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDRkdTaW1w
bGlmaWNhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYg
LyogREZHVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHVmFsaWRhdGUuY3BwOyBwYXRoID0gZGZnL0RGR1ZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7IHBhdGgg
PSBkZmcvREZHVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZB
NDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1h
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDQ1LDYgKzIwNTMsOCBAQAogCQkJCTBGN0IyOTQ4
MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLywKIAkJCQkwRkZGQzk0QjE0
RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTRDMTRFRjkw
OTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oICovLAorCQkJCTBGM0IzQTI0MTU0NEM5OTEwMDNF
RDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjNCM0EyNTE1
NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovLAogCQkJCTBG
RkZDOTREMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5
NEUxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEZEODJFMUUxNDE3
MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8sCkBAIC0yMTAxLDYgKzIxMTEs
OCBAQAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAq
LywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJ
MEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCAqLywKKwkJCQkwRjNC
M0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLywKIAkJCQkwRjYyMDE3MjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8sCiAJCQkJMEZGRkM5
NTMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5j
cHAgKi8sCiAJCQkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oICovLApAQCAtMjU4Myw2ICsyNTk1LDggQEAKIAkJCQkwRjNCM0Ex
QjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGM0IzQTI4MTU0NEM5
OTcwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMzE0Nyw2ICszMTYxLDggQEAKIAkJCQk4NjQyQzUxMjE1MUMwODNEMDA0NkQ0RUYg
LyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUy
MTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQjNBMkIxNTQ3
NTAwMDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTE0NTU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTksNyArMjU5LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBERkc6
Ok9TUkVudHJ5RGF0YSogZGZnT1NSRW50cnlEYXRhKHVuc2lnbmVkIGkpIHsgcmV0dXJuICZtX2Rm
Z0RhdGEtPm9zckVudHJ5W2ldOyB9CiAgICAgICAgIERGRzo6T1NSRW50cnlEYXRhKiBkZmdPU1JF
bnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBiaW5hcnlTZWFyY2g8REZHOjpPU1JFbnRyeURhdGEsIHVu
c2lnbmVkLCBERkc6OmdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXg+KG1fZGZnRGF0YS0+b3Ny
RW50cnkuYmVnaW4oKSwgbV9kZmdEYXRhLT5vc3JFbnRyeS5zaXplKCksIGJ5dGVjb2RlSW5kZXgp
OworICAgICAgICAgICAgaWYgKCFtX2RmZ0RhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBpZiAobV9kZmdEYXRhLT5vc3JFbnRyeS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSogcmVzdWx0
ID0gYmluYXJ5U2VhcmNoPAorICAgICAgICAgICAgICAgIERGRzo6T1NSRW50cnlEYXRhLCB1bnNp
Z25lZCwgREZHOjpnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4PigKKyAgICAgICAgICAgICAg
ICAgICAgbV9kZmdEYXRhLT5vc3JFbnRyeS5iZWdpbigpLCBtX2RmZ0RhdGEtPm9zckVudHJ5LnNp
emUoKSwKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCwgV1RGOjpLZXlNdXN0Tm90
QmVQcmVzZW50SW5BcnJheSk7CisgICAgICAgICAgICBpZiAocmVzdWx0LT5tX2J5dGVjb2RlSW5k
ZXggIT0gYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgYXBw
ZW5kT1NSRXhpdChjb25zdCBERkc6Ok9TUkV4aXQmIG9zckV4aXQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyNCw2ICsxMjQsMTYgQEAgcHVibGljOgogICAgICAgICBzZXRMb2NhbChvcGVyYW5kLCB2YWx1
ZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0T3BlcmFuZEZpcnN0VGltZShpbnQgb3BlcmFu
ZCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQo
b3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNldEFyZ3VtZW50Rmlyc3RUaW1lKG9wZXJhbmRUb0Fy
Z3VtZW50KG9wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHNldExvY2FsRmlyc3RUaW1lKG9wZXJhbmQsIHZhbHVlKTsKKyAg
ICB9CisgICAgCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC05OSw2ICs5OSw4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFw
aCYgZ3IKICAgICBQUk9GSUxFKEZMQUdfRk9SX0JMT0NLX0lOSVRJQUxJWkFUSU9OKTsKICAgICBC
YXNpY0Jsb2NrKiByb290ID0gZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCk7CiAgICAgcm9vdC0+Y2Zh
U2hvdWxkUmV2aXNpdCA9IHRydWU7CisgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwor
ICAgIHJvb3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAg
ICAgICAgIE5vZGUmIG5vZGUgPSBncmFwaFtyb290LT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQo
aSldOwogICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFNldEFyZ3VtZW50KTsKQEAgLTE0Mywx
MSArMTQ1LDMzIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAg
ICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXQoUHJlZGljdEZsb2F0
NjRBcnJheSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5h
cmd1bWVudChpKS5tYWtlVG9wKCk7CisgICAgICAgIAorICAgICAgICByb290LT52YWx1ZXNBdFRh
aWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICghZ3JhcGgubG9jYWxJc0NhcHR1cmVkKGkpKQorICAgICAgICBpZiAoZ3JhcGgubG9jYWxJc0Nh
cHR1cmVkKGkpKQorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLm1ha2VU
b3AoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2Fs
KGkpLmNsZWFyKCk7CisgICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigp
OworICAgIH0KKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9ja0luZGV4
IDwgZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
aWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQubG9jYWwoaSkubWFrZVRvcCgpOworICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJs
ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBibG9jay0+Y2ZhU2hvdWxkUmV2aXNp
dCA9IGZhbHNlOworICAgICAgICBibG9jay0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOworICAgICAg
ICBibG9jay0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkg
eworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5jbGVhcigpOwor
ICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOworICAg
ICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhl
YWQubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWwubG9j
YWwoaSkuY2xlYXIoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtNTI2LDggKzU1MCw2IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CiAgICAgICAgIGVsc2Ug
aWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoUHJlZGljdEJvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0xMjg2LDcgKzEzMDgsOSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRl
QXRUCiAgICAgICAgIC8vIFRoZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0
byB0YWlsLgogICAgICAgICBzb3VyY2UgPSBpblZhcmlhYmxlOwogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiICAgICAgICAgIFRyYW5z
ZmVyaW5nIGZyb20gaGVhZCB0byB0YWlsLlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICAgICAg
ICBUcmFuc2ZlcmluZyAiKTsKKyAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsK
KyAgICAgICAgZGF0YUxvZygiIGZyb20gaGVhZCB0byB0YWlsLlxuIik7CiAjZW5kaWYKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEyOTQsNyArMTMxOCw5IEBAIGlubGluZSBib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgLy8gVGhlIGJsb2NrIHJlZmlu
ZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRpb25hbCBzcGVjdWxhdGlvbnMuCiAgICAgICAgIHNvdXJj
ZSA9IGZvck5vZGUobm9kZUluZGV4KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIiAgICAgICAgICBSZWZpbmluZy5cbiIpOworICAg
ICAgICBkYXRhTG9nKCIgICAgICAgICAgUmVmaW5pbmcgdG8gIik7CisgICAgICAgIHNvdXJjZS5k
dW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEzMDYsNyArMTMzMiw5IEBAIGlubGluZSBi
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIiAgICAgICAgICBTZXR0aW5n
LlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgICBTZXR0aW5nIHRvICIpOworICAgICAg
ICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nKCJcbiIpOwog
I2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTEzODIsMTIgKzE0MTAsMjUgQEAg
aW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2NlcwogICAgIEFTU0VSVCh0ZXJt
aW5hbC5pc1Rlcm1pbmFsKCkpOwogICAgIAogICAgIHN3aXRjaCAodGVybWluYWwub3AoKSkgewot
ICAgIGNhc2UgSnVtcDoKKyAgICBjYXNlIEp1bXA6IHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0byBi
bG9jayAjJXUuXG4iLCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKSk7CisjZW5kaWYKICAgICAg
ICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRha2Vu
QmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIEJyYW5jaDoK
LSAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFs
LnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSkKLSAgICAgICAgICAgIHwgbWVyZ2UoYmFzaWNCbG9j
aywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsK
KyAgICBjYXNlIEJyYW5jaDogeworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIiAg
ICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgo
KSk7CisjZW5kaWYKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5t
X2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBN
ZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpKTsK
KyNlbmRpZgorICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxv
Y2tzW3Rlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgIHJldHVy
biBjaGFuZ2VkOworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBSZXR1cm46CiAgICAgY2FzZSBU
aHJvdzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1
ZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDcgKzMyMywxMCBAQCBzdHJ1Y3Qg
QWJzdHJhY3RWYWx1ZSB7CiAgICAgCiAgICAgYm9vbCBpc0NsZWFyKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3R5cGUgPT0gUHJlZGljdE5vbmUgJiYgbV9zdHJ1Y3R1cmUuaXNDbGVh
cigpOworICAgICAgICBib29sIHJlc3VsdCA9IG1fdHlwZSA9PSBQcmVkaWN0Tm9uZSAmJiBtX3N0
cnVjdHVyZS5pc0NsZWFyKCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBBU1NF
UlQoIW1fdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICB2
b2lkIG1ha2VUb3AoKQpAQCAtNDE3LDE1ICs0MjAsMzAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUg
ewogICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUKICAgICAg
ICAgICAgICYmIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKICAgICB9CisgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KICAgICAKICAgICBib29sIG1lcmdlKGNv
bnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKQogICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgICAgIEFic3RyYWN0VmFsdWUgb2xkTWUgPSAqdGhpczsKKyNlbmRpZgogICAgICAgICBib29s
IHJlc3VsdCA9IGZhbHNlOwotICAgICAgICByZXN1bHQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1fdHlw
ZSwgb3RoZXIubV90eXBlKTsKLSAgICAgICAgcmVzdWx0IHw9IG1fc3RydWN0dXJlLmFkZEFsbChv
dGhlci5tX3N0cnVjdHVyZSk7Ci0gICAgICAgIGlmIChtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWUp
Ci0gICAgICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOworICAgICAgICBpZiAoaXNDbGVhcigp
KSB7CisgICAgICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICAgICAgcmVzdWx0ID0gIW90
aGVyLmlzQ2xlYXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCB8PSBt
ZXJnZVByZWRpY3Rpb24obV90eXBlLCBvdGhlci5tX3R5cGUpOworICAgICAgICAgICAgcmVzdWx0
IHw9IG1fc3RydWN0dXJlLmFkZEFsbChvdGhlci5tX3N0cnVjdHVyZSk7CisgICAgICAgICAgICBp
ZiAobV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0IHw9
ICEhbV92YWx1ZTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSAoKnRoaXMgIT0gb2xkTWUpKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgCkBAIC00NTIsNyArNDcwLDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUg
ewogICAgICAgICAvLyBpbnRvIHRoZSBpbmZvcm1hdGlvbiBnbGVhbmVkIGZyb20gdGhlIFN0cnVj
dHVyZVNldC4KICAgICAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CiAgICAgICAgIAot
ICAgICAgICBpZiAoISFtX3ZhbHVlICYmICF2YWxpZGF0ZShtX3ZhbHVlKSkKKyAgICAgICAgaWYg
KCEhbV92YWx1ZSAmJiAhdmFsaWRhdGVJZ25vcmluZ1ZhbHVlKG1fdmFsdWUpKQogICAgICAgICAg
ICAgY2xlYXIoKTsKICAgICAgICAgCiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTQ3
MCwxMiArNDg4LDM2IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgLy8gdGhlIG5l
dyB0eXBlIChOb25lKSByYXRoZXIgdGhhbiB0aGUgb25lIHBhc3NlZCAoQXJyYXkpLgogICAgICAg
ICBtX3N0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKIAotICAgICAgICBpZiAoISFtX3ZhbHVlICYm
ICF2YWxpZGF0ZShtX3ZhbHVlKSkKKyAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiAhdmFsaWRhdGVJ
Z25vcmluZ1ZhbHVlKG1fdmFsdWUpKQogICAgICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgCiAg
ICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAgICAgCisgICAgYm9vbCB2YWxpZGF0
ZUlnbm9yaW5nVmFsdWUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChp
c1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAo
bWVyZ2VQcmVkaWN0aW9ucyhtX3R5cGUsIHByZWRpY3Rpb25Gcm9tVmFsdWUodmFsdWUpKSAhPSBt
X3R5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAo
dmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQobV90eXBlICYgUHJlZGljdEVt
cHR5KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAobV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChtX3R5cGUgJiBQcmVkaWN0Q2VsbCk7CisgICAgICAgICAgICByZXR1cm4g
bV9zdHJ1Y3R1cmUuY29udGFpbnModmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAogICAgIGJv
b2wgdmFsaWRhdGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc1Rv
cCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0
LmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRq
YWNlbmN5TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw5IEBAIHB1YmxpYzoKICAg
ICAgICAgRml4ZWQsCiAgICAgICAgIFZhcmlhYmxlCiAgICAgfTsKLQorICAgIAorICAgICNkZWZp
bmUgQWRqYWNlbmN5TGlzdFNpemUgMworICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5k
KQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBtX2tpbmQoa2luZCkKQEAgLTc0LDIx
ICs3NiwyMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgRWRnZSYgY2hpbGQodW5zaWduZWQg
aSkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpIDwgMyk7CisgICAgICAgIEFTU0VSVChp
IDwgQWRqYWNlbmN5TGlzdFNpemUpOwogICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsK
ICAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CiAgICAgfSAgICAKICAgICAKICAgICBFZGdlJiBj
aGlsZCh1bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCAzKTsKKyAgICAgICAg
QVNTRVJUKGkgPCBBZGphY2VuY3lMaXN0U2l6ZSk7CiAgICAgICAgIEFTU0VSVChtX2tpbmQgPT0g
Rml4ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBzZXRDaGlsZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2UpCiAgICAgewotICAgICAgICBBU1NF
UlQoaSA8IDMwKTsKKyAgICAgICAgQVNTRVJUKGkgPCBBZGphY2VuY3lMaXN0U2l6ZSk7CiAgICAg
ICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAgICBtX3dvcmRzW2ldID0gbm9kZVVz
ZTsKICAgICB9CkBAIC0xNTAsNyArMTUyLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZh
dGU6Ci0gICAgRWRnZSBtX3dvcmRzWzNdOworICAgIEVkZ2UgbV93b3Jkc1tBZGphY2VuY3lMaXN0
U2l6ZV07CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIEtpbmQgbV9raW5kOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24g
MTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDEwIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9y
PE5vZGVJbmRleCwgOD4KICAgICB7CiAgICAgfQogICAgIAorICAgIH5CYXNpY0Jsb2NrKCkKKyAg
ICB7CisgICAgfQorICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxv
Y2FscykKICAgICB7CiAgICAgICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVt
TG9jYWxzKTsKQEAgLTYzLDYgKzY3LDIzIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5v
ZGVJbmRleCwgOD4KICAgICAgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2Nh
bHMpOwogICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CiAg
ICAgfQorICAgIAorICAgIHNpemVfdCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6
ZSgpICsgc2l6ZSgpOyB9CisgICAgTm9kZUluZGV4IG5vZGVJbmRleChzaXplX3QgaSkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChpIDwgcGhpcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4g
cGhpc1tpXTsKKyAgICAgICAgcmV0dXJuIGF0KGkgLSBwaGlzLnNpemUoKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNJblBoaXMoTm9kZUluZGV4IG5vZGVJbmRleCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgaWYgKHBoaXNbaV0gPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAvLyBU
aGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYmxvY2sgbGlua2luZyBhbmQgT1NSIGVu
dHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xlc3MKICAgICAvLyBmb3Igb3RoZXIgcHVycG9zZXMg
ZHVlIHRvIGlubGluaW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwx
MCArOTUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAg
IC8vIFBhcnNlIGEgc2luZ2xlIGJhc2ljIGJsb2NrIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucy4K
ICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpOwotICAgIC8vIEZpbmQgcmVhY2hh
YmxlIGNvZGUgYW5kIHNldHVwIHByZWRlY2Vzc29yIGxpbmtzIGluIHRoZSBncmFwaCdzIEJhc2lj
QmxvY2tzLgotICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7Ci0gICAgLy8gRW5xdWV1
ZSBhIGJsb2NrIG9udG8gdGhlIHdvcmtsaXN0LCBpZiBuZWNlc3NhcnkuCi0gICAgdm9pZCBoYW5k
bGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXgs
IEJsb2NrSW5kZXggc3VjY2Vzc29yKTsKICAgICAvLyBMaW5rIGJsb2NrIHN1Y2Nlc3NvcnMuCiAg
ICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9zc2li
bGVUYXJnZXRzKTsKICAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1
bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdldHMpOwpAQCAt
MjU4NSw0MSArMjU4MSw2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MoVmVjdG9y
PFUKICAgICB9CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0
b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9j
a0luZGV4IHN1Y2Nlc3NvckluZGV4KQotewotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1f
Z3JhcGgubV9ibG9ja3Nbc3VjY2Vzc29ySW5kZXhdLmdldCgpOwotICAgIGlmICghc3VjY2Vzc29y
LT5pc1JlYWNoYWJsZSkgewotICAgICAgICBzdWNjZXNzb3ItPmlzUmVhY2hhYmxlID0gdHJ1ZTsK
LSAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3NvckluZGV4KTsKLSAgICB9Ci0gICAgCi0g
ICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2tJbmRleCk7Ci19Ci0KLXZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmRldGVybWluZVJlYWNoYWJpbGl0eSgpCi17Ci0gICAgVmVjdG9y
PEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlzdDsKLSAgICB3b3JrbGlzdC5hcHBlbmQoMCk7Ci0gICAg
bV9ncmFwaC5tX2Jsb2Nrc1swXS0+aXNSZWFjaGFibGUgPSB0cnVlOwotICAgIHdoaWxlICghd29y
a2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEJsb2NrSW5kZXggaW5kZXggPSB3b3JrbGlzdC5s
YXN0KCk7Ci0gICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgCi0gICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQpOwotICAgICAgICAKLSAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbYmxvY2stPmxhc3QoKV07Ci0gICAgICAgIEFTU0VSVChub2RlLmlzVGVybWlu
YWwoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkKLSAgICAgICAgICAg
IGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkp
OwotICAgICAgICBlbHNlIGlmIChub2RlLmlzQnJhbmNoKCkpIHsKLSAgICAgICAgICAgIGhhbmRs
ZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwotICAg
ICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS5ub3RUYWtlbkJs
b2NrSW5kZXgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmJ1aWxkT3BlcmFuZE1hcHNJZk5lY2Vzc2FyeSgpCiB7CiAgICAgaWYgKG1faGF2ZUJ1aWx0T3Bl
cmFuZE1hcHMpCkBAIC0yODMxLDcgKzI3OTIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZSgpCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKIAogICAgIGxpbmtCbG9ja3MoaW5saW5lU3RhY2tF
bnRyeS5tX3VubGlua2VkQmxvY2tzLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFy
Z2V0cyk7Ci0gICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CisgICAgbV9ncmFwaC5kZXRlcm1p
bmVSZWFjaGFiaWxpdHkoKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCiAgICAgZGF0YUxvZygiUHJvY2Vzc2luZyBsb2NhbCB2YXJpYWJsZSBwaGlzLlxuIik7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIG1fY291bnQgPSAwOwpA
QCAtNjUsMTIgKzY1LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNl
OwogICAgICAgICAgICAgcGVyZm9ybUZvcndhcmRDRkEoKTsKICAgICAgICAgfSB3aGlsZSAobV9j
aGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKIHBy
aXZhdGU6CiAgICAgdm9pZCBwZXJmb3JtQmxvY2tDRkEoQmxvY2tJbmRleCBibG9ja0luZGV4KQog
ICAgIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBpZiAoIWJsb2NrLT5jZmFTaG91bGRSZXZpc2l0KQogICAgICAgICAgICAgcmV0dXJu
OwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTEyNiw5ICsx
MzAsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi12b2lkIHBlcmZvcm1DRkEoR3JhcGgmIGdy
YXBoKQorYm9vbCBwZXJmb3JtQ0ZBKEdyYXBoJiBncmFwaCkKIHsKLSAgICBydW5QaGFzZTxDRkFQ
aGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFzZTxDRkFQaGFzZT4oZ3JhcGgpOwogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGQVBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkFQaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xh
c3MgR3JhcGg7CiAvLyB0aGUgY29kZSBibG9jay4gSXQncyBhbHNvIHJlc3BvbnNpYmxlIGZvciBp
ZGVudGlmeWluZyBkZWFkIGNvZGUsIGFuZCBpbiB0aGUKIC8vIGZ1dHVyZSBzaG91bGQgYmUgdXNl
ZCBhcyBhIGhvb2sgZm9yIGNvbnN0YW50IHByb3BhZ2F0aW9uLgogCi12b2lkIHBlcmZvcm1DRkEo
R3JhcGgmKTsKK2Jvb2wgcGVyZm9ybUNGQShHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3Ry
YWN0U3RhdGUuaCIKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIENGR1NpbXBsaWZp
Y2F0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIENGR1NpbXBsaWZpY2F0
aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiQ0ZHIHNpbXBs
aWZpY2F0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7Cisg
ICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrIGJsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIWJsb2NrLT5pc1Jl
YWNoYWJsZSkgeworICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9ja0luZGV4KTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc3dpdGNoIChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLm9wKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgSnVtcDogeworICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NvciB3aXRoIG9u
ZSBwcmVkZWNlc3NvciAtPiBtZXJnZS4KKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Js
b2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCldLT5tX3ByZWRlY2Vzc29ycy5zaXplKCkg
PT0gMSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrc1ttX2dy
YXBoLnN1Y2Nlc3NvcihibG9jaywgMCldLT5tX3ByZWRlY2Vzc29yc1swXQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPT0gYmxvY2tJbmRleCk7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDRkdTaW1wbGlm
eTogSnVtcCBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCkp
OworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrSW5kZXgsIG1f
Z3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSwgTm9CbG9jayk7CisgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogQmxvY2sgb25seSBoYXMgYSBqdW1wIC0+IHJlbW92ZS4g
VGhpcyBpcyB0cmlja3kgdGhvdWdoIGJlY2F1c2Ugb2YKKyAgICAgICAgICAgICAgICAvLyBsaXZl
bmVzcy4gV2hhdCB3ZSByZWFsbHkgd2FudCBpcyB0byBzbGFtIGluIGEgcGhhbnRvbSBhdCB0aGUg
ZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgIC8vIGJsb2NrLCBhZnRlciB0aGUgdGVybWluYWwu
IEJ1dCB3ZSBjYW4ndCByaWdodCBub3cuIDotKAorICAgICAgICAgICAgICAgIC8vIElkZWE6IHdo
YXQgaWYgSSBzbGFtIHRoZSBnaG9zdGllcyBpbnRvIG15IHN1Y2Nlc3Nvcj8gTm9wZSwgdGhhdCdz
CisgICAgICAgICAgICAgICAgLy8gc3Vib3B0aW1hbCwgYmVjYXVzZSBpZiBteSBzdWNjZXNzb3Ig
aGFzIG11bHRpcGxlIHByZWRlY2Vzc29ycyB0aGVuIHdlJ2xsCisgICAgICAgICAgICAgICAgLy8g
YmUga2VlcGluZyBhbGl2ZSB0aGluZ3Mgb24gb3RoZXIgcHJlZGVjZXNzb3IgZWRnZXMgdW5uZWNl
c3NhcmlseS4KKyAgICAgICAgICAgICAgICAvLyBXaGF0IHdlIHJlYWxseSBuZWVkIGlzIHRoZSBu
b3Rpb24gb2YgZW5kLW9mLWJsb2NrIGdob3N0aWVzIQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBCcmFuY2g6
IHsKKyAgICAgICAgICAgICAgICAvLyBCcmFuY2ggb24gY29uc3RhbnQgLT4gamV0dGlzb24gdGhl
IG5vdC10YWtlbiBibG9jayBhbmQgbWVyZ2UuCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhb
bV9ncmFwaFtibG9jay0+bGFzdCgpXS5jaGlsZDEoKV0uaGFzQ29uc3RhbnQoKSkgeworICAgICAg
ICAgICAgICAgICAgICBib29sIGNvbmRpdGlvbiA9CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fZ3JhcGhbYmxvY2stPmxhc3QoKV0uY2hpbGQxKCku
aW5kZXgoKSkudG9Cb29sZWFuKCk7CisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRh
cmdldEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1sKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pXS5nZXQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldEJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCkg
PT0gMSkgeworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNGR1NpbXBsaWZ5OiBLbm93biBjb25kaXRpb24g
KCVzKSBicmFuY2ggbWVyZ2Ugb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldSwgamV0dGlzb25pbmcg
QmxvY2sgIyV1LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
ID8gInRydWUiIDogImZhbHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29u
ZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1lcmdlQmxvY2tzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRp
b24oYmxvY2ssIGNvbmRpdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssICFjb25kaXRpb24pKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDRkdTaW1wbGlmeTogS25vd24g
Y29uZGl0aW9uICglcykgYnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gb24gQmxvY2sgIyV1IHRvIEJs
b2NrICMldSwgamV0dGlzb25pbmcgQmxvY2sgIyV1LlxuIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZGl0aW9uID8gInRydWUiIDogImZhbHNlIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRp
b24oYmxvY2ssIGNvbmRpdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisjZW5kaWYK
KyAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW5CbG9ja0luZGV4ID0gbV9n
cmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3Vj
Y2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbYmxvY2stPmxh
c3QoKV0uaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4g
Ym91bmRhcnlDb2RlT3JpZ2luID0gbV9ncmFwaFtibG9jay0+bGFzdCgpXS5jb2RlT3JpZ2luOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtibG9jay0+bGFzdCgpXS5zZXRPcEFuZERl
ZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dy
YXBoW2Jsb2NrLT5sYXN0KCldLnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2tJbmRleCwg
bm90VGFrZW5CbG9ja0luZGV4LCBib3VuZGFyeUNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXgganVtcE5vZGVJbmRl
eCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSBqdW1wKEp1
bXAsIGJvdW5kYXJ5Q29kZU9yaWdpbiwgT3BJbmZvKHRha2VuQmxvY2tJbmRleCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAganVtcC5yZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguYXBwZW5kKGp1bXApOworICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVu
ZChqdW1wTm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEJyYW5jaCB0
byBzYW1lIGRlc3RpbmF0aW9uIC0+IGp1bXAuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHRo
aXMgd2lsbCBjdXJyZW50bHkgbm90IGJlIGhpdCBiZWNhdXNlIG9mIHRoZSBsYWNrIG9mIGp1bXAt
b25seQorICAgICAgICAgICAgICAgIC8vIGJsb2NrIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCkgPT0gbV9ncmFwaC5zdWNjZXNz
b3IoYmxvY2ssIDEpKSB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDRkdTaW1wbGlmeTogQnJhbmNoIG1lcmdl
IG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSk7CisjZW5kaWYKKyAg
ICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNz
b3IoYmxvY2ssIDApLCBOb0Jsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICAgICAgICAv
LyBJZiB3ZSBjaGFuZ2VkIHRoZSBncmFwaCwgdGhlbiBzb21lIGJsb2NrcyBtYXkgaGF2ZSBiZWNv
bWUgdW5yZWFjaGFibGUuIE5lZWQgdG8KKyAgICAgICAgICAgIC8vIHBlcmZvcm0gYSBibG9jayBH
QyBvZiBzb3J0cy4KKyAgICAgICAgICAgIG1fZ3JhcGgucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gS2lsbCBhbnkgbmV3IHVucmVhY2hhYmxlIGJsb2Nr
cyB0aGF0IHdlIGludHJvZHVjZWQuCisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKysgYmxvY2tJ
bmRleCkgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmlz
UmVhY2hhYmxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBraWxsVW5yZWFjaGFibGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIGtpbGxVbnJlYWNoYWJsZShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoYmxvY2spOworICAgICAgICBBU1NFUlQoIWJs
b2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgIAorICAgICAgICAvLyAxKSBSZW1vdmUgaXRzIHJl
ZmVyZW5jZXMgdG8gb3RoZXIgYmxvY2tzLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlJiBwaGlOb2RlID0g
bV9ncmFwaFtibG9jay0+cGhpc1tpXV07CisgICAgICAgICAgICBpZiAoIXBoaU5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCBBZGphY2VuY3lMaXN0U2l6ZTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFwaGlOb2RlLmNoaWxkcmVuLmNoaWxkKGopKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKHBoaU5vZGUuY2hpbGRyZW4u
Y2hpbGQoaikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyAyKSBLaWxsIHRoZSBibG9jaworICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBmaW5kT3BlcmFuZFNvdXJjZShj
b25zdCBPcGVyYW5kczxOb2RlSW5kZXgsIE5vZGVJbmRleFRyYWl0cz4mIHZhcmlhYmxlcywgaW50
IG9wZXJhbmQpCisgICAgeworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gdmFyaWFibGVz
Lm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAg
ICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS5v
cCgpID09IFNldExvY2FsKQorICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbm9kZUluZGV4XS5j
aGlsZDEoKS5pbmRleCgpOworICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgIH0KKyAgICAK
KyAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5pc0Nh
cHR1cmVkKG9wZXJhbmQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gZmluZE9wZXJhbmRTb3VyY2UoYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgb3Bl
cmFuZCk7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5kZXhdLm9w
KCkgIT0gU2V0TG9jYWwpOworICAgICAgICBOb2RlSW5kZXggcGhhbnRvbU5vZGVJbmRleCA9IG1f
Z3JhcGguc2l6ZSgpOworICAgICAgICBOb2RlIHBoYW50b20oUGhhbnRvbSwgY29kZU9yaWdpbiwg
bm9kZUluZGV4KTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQocGhhbnRvbSk7CisgICAgICAgIG1f
Z3JhcGgucmVmKHBoYW50b21Ob2RlSW5kZXgpOworICAgICAgICBibG9jay0+YXBwZW5kKHBoYW50
b21Ob2RlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeFBvc3NpYmxlR2V0TG9jYWwo
QmFzaWNCbG9jayogYmxvY2ssIEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBOb2RlJiBjaGls
ZCA9IG1fZ3JhcGhbZWRnZV07CisgICAgICAgIGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobV9ncmFwaC5pc0NhcHR1cmVkKGNoaWxk
LmxvY2FsKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOb2RlSW5kZXggb3JpZ2lu
YWxOb2RlSW5kZXggPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQoY2hpbGQubG9jYWwo
KSk7CisgICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGVJbmRleCAhPSBOb05vZGUpOworICAgICAg
ICBOb2RlKiBvcmlnaW5hbE5vZGUgPSAmbV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRleF07CisgICAg
ICAgIEFTU0VSVChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAvLyBQ
b3NzaWJpbGl0aWVzOgorICAgICAgICAvLyBTZXRMb2NhbCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMg
Z2V0dGluZyB0aGUgdmFsdWUgb2Ygc29tZXRoaW5nIHRoYXQgaXMgaW1tZWRpYXRlbHkKKyAgICAg
ICAgLy8gICAgIGF2YWlsYWJsZSBpbiB0aGUgZmlyc3QgYmxvY2sgd2l0aCBhIGtub3duIE5vZGVJ
bmRleC4KKyAgICAgICAgLy8gR2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcg
dGhlIHZhbHVlIG9mIHNvbWV0aGluZyB0aGF0IHRoZSBmaXJzdAorICAgICAgICAvLyAgICAgYmxv
Y2sgYWxzbyBnZXRzLgorICAgICAgICAvLyBQaGkgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2lu
ZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlIGZpcnN0IGJsb2NrCisgICAg
ICAgIC8vICAgICB3YXMgYWxzbyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24uCisgICAgICAgIC8v
IFNldEFyZ3VtZW50IC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUg
b24gYW4gb3BlcmFuZCB0aGF0IHRoZQorICAgICAgICAvLyAgICAgZmlyc3QgYmxvY2sgd2FzIGtl
ZXBpbmcgYWxpdmUgYnkgdmlydHVlIG9mIHRoZSBmaXJzdEJsb2NrIGJlaW5nIHRoZSByb290IGFu
ZAorICAgICAgICAvLyAgICAgdGhlIG9wZXJhbmQgYmVpbmcgYW4gYXJndW1lbnQuCisgICAgICAg
IC8vIEZsdXNoIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24g
YW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdAorICAgICAgICAvLyAgICAgYmxvY2sgd2FzIGZvcmNp
bmcgdG8gYmUgYWxpdmUsIHNvIHRoZSBzZWNvbmQgYmxvY2sgc2hvdWxkIHJlZmVyIGNoaWxkIG9m
CisgICAgICAgIC8vICAgICB0aGUgZmx1c2guCisgICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9w
KCkgPT0gRmx1c2gpIHsKKyAgICAgICAgICAgIG9yaWdpbmFsTm9kZUluZGV4ID0gb3JpZ2luYWxO
b2RlLT5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgb3JpZ2luYWxOb2RlID0gJm1fZ3Jh
cGhbb3JpZ2luYWxOb2RlSW5kZXhdOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3JpZ2lu
YWxOb2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIEVk
Z2UgbmV3RWRnZSA9IG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICBFZGdlIG9s
ZEVkZ2UgPSBlZGdlOworICAgICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CisgICAgICAg
ICAgICBtX2dyYXBoLmRlcmVmKG9sZEVkZ2UpOworICAgICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdldExvY2FsOiB7
CisgICAgICAgICAgICBFZGdlIG5ld0VkZ2UgPSBlZGdlOworICAgICAgICAgICAgRWRnZSBvbGRF
ZGdlID0gZWRnZTsKKyAgICAgICAgICAgIG5ld0VkZ2Uuc2V0SW5kZXgob3JpZ2luYWxOb2RlSW5k
ZXgpOworICAgICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CisgICAgICAgICAgICBtX2dy
YXBoLmRlcmVmKG9sZEVkZ2UpOworICAgICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBT
ZXRBcmd1bWVudDogeworICAgICAgICAgICAgLy8gS2VlcCB0aGUgR2V0TG9jYWwhCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIGpldHRpc29uQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9j
a0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4LCBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdp
bikKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgIGtlZXBPcGVyYW5k
QWxpdmUoYmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkKKyAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxp
dmUoYmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgaSk7CisgICAgICAgIAorICAgICAgICBmaXhK
ZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGJsb2NrSW5kZXgsIGpldHRpc29uZWRCbG9ja0luZGV4KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBqZXR0aXNvbmVkQmxvY2tJbmRleCkKKyAgICB7Cisj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9n
KCJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlzIGR1ZSB0byBqZXR0aXNvbiBvZiBCbG9jayAj
JXUgZnJvbSBCbG9jayAjJXUuXG4iLAorICAgICAgICAgICAgICAgIGpldHRpc29uZWRCbG9ja0lu
ZGV4LCBibG9ja0luZGV4KTsKKyNlbmRpZgorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGpl
dHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhdLmdl
dCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT5t
X3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGpldHRpc29uZWRC
bG9jay0+bV9wcmVkZWNlc3NvcnNbaV0gIT0gYmxvY2tJbmRleCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnNbaV0g
PSBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgICAgIGpl
dHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNv
bmVkQmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBwaGlO
b2RlSW5kZXggPSBqZXR0aXNvbmVkQmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBOb2RlJiBw
aGlOb2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOworICAgICAgICAgICAgTm9kZUluZGV4IG15
Tm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHBoaU5vZGUubG9jYWwo
KSk7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAg
ICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgcmVtb3ZpbmcgcmVmZXJlbmNlIGZyb20gcGhpIEAldSB0
byBAJXUgb24gbG9jYWwgciVkOiIsCisgICAgICAgICAgICAgICAgICAgIHBoaU5vZGVJbmRleCwg
bXlOb2RlSW5kZXgsIHBoaU5vZGUubG9jYWwoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIEFTU0VS
VChteU5vZGVJbmRleCAhPSBOb05vZGUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IEFkamFjZW5jeUxpc3RTaXplOyArK2opCisgICAgICAgICAgICAgICAgcmVtb3ZlUG90
ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKG15Tm9kZUluZGV4LCBwaGlOb2RlLCBqKTsKKyNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICBkYXRhTG9n
KCJcbiIpOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCByZW1vdmVQ
b3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UoTm9kZUluZGV4IG15Tm9kZUluZGV4LCBOb2RlJiBw
aGlOb2RlLCB1bnNpZ25lZCBlZGdlSW5kZXgpCisgICAgeworICAgICAgICBpZiAocGhpTm9kZS5j
aGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLmluZGV4VW5jaGVja2VkKCkgIT0gbXlOb2RlSW5kZXgp
CisgICAgICAgICAgICByZXR1cm47CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgUmVtb3ZpbmcgcmVmZXJlbmNlIGF0IGNoaWxkICV1
LiIsIGVkZ2VJbmRleCk7CisjZW5kaWYKKyAgICAgICAgbV9ncmFwaC5kZXJlZihteU5vZGVJbmRl
eCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVkZ2VJbmRleDsgaSA8IEFkamFjZW5jeUxp
c3RTaXplIC0gMTsgKytpKQorICAgICAgICAgICAgcGhpTm9kZS5jaGlsZHJlbi5zZXRDaGlsZChp
LCBwaGlOb2RlLmNoaWxkcmVuLmNoaWxkKGkgKyAxKSk7CisgICAgICAgIHBoaU5vZGUuY2hpbGRy
ZW4uc2V0Q2hpbGQoQWRqYWNlbmN5TGlzdFNpemUgLSAxLCBFZGdlKCkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGZpeFRhaWxPcGVyYW5kKEJhc2ljQmxvY2sqIGZpcnN0QmxvY2ssIEJhc2ljQmxv
Y2sqIHNlY29uZEJsb2NrLCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBh
dFNlY29uZFRhaWwgPSBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgIAorICAgICAgICBpZiAobV9ncmFwaC5pc0NhcHR1cmVkKG9wZXJhbmQpKSB7
CisgICAgICAgICAgICAvLyBUaGUgc2Vjb25kIGJsb2NrIGRpZCBzb21ldGhpbmcgdG8gYSB2YXJp
YWJsZSB0aGF0IGlzIGNhcHR1cmVkLCBzbyByZWZsZWN0IHRoaXMuCisgICAgICAgICAgICBmaXJz
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IGF0U2Vjb25kVGFpbDsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGF0
U2Vjb25kVGFpbCA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB2YXJpYWJsZSBp
cyBkZWFkIGF0IHRoZSBlbmQgb2YgdGhlIHNlY29uZCBibG9jaywgdGhlbiBkbyBub3RoaW5nOyBl
c3NlbnRpYWxseQorICAgICAgICAgICAgLy8gdGhpcyBtZWFucyB0aGF0IHdlIHdhbnQgdGhlIHRh
aWwgc3RhdGUgdG8gcmVmbGVjdCB3aGF0ZXZlciB0aGUgZmlyc3QgYmxvY2sgZGlkLgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2RlJiBzZWNvbmRO
b2RlID0gbV9ncmFwaFthdFNlY29uZFRhaWxdOworICAgICAgICBzd2l0Y2ggKHNlY29uZE5vZGUu
b3AoKSkgeworICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICBjYXNlIEZsdXNoOiB7Cisg
ICAgICAgICAgICAvLyBUaGUgc2Vjb25kIGJsb2NrIGRpZCBpbnRlcmVzdGluZyB0aGluZ3MgdG8g
dGhlIHZhcmlhYmxlcywgc28gdXBkYXRlIHRoZSB0YWlsCisgICAgICAgICAgICAvLyBhY2NvcmRp
bmdseS4KKyAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpID0gYXRTZWNvbmRUYWlsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICBjYXNlIFBoaTogewor
ICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdhcyBpbiB0aGUgZmlyc3QgYmxvY2suCisgICAgICAg
ICAgICBBU1NFUlQoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkg
IT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgbWVyZ2VCbG9ja3MoCisgICAgICAgIEJsb2Nr
SW5kZXggZmlyc3RCbG9ja0luZGV4LCBCbG9ja0luZGV4IHNlY29uZEJsb2NrSW5kZXgsIEJsb2Nr
SW5kZXggamV0dGlzb25lZEJsb2NrSW5kZXgpCisgICAgeworICAgICAgICAvLyBUaGlzIHdpbGwg
YWRkIGFsbCBvZiB0aGUgbm9kZXMgaW4gc2Vjb25kQmxvY2sgdG8gZmlyc3RCbG9jaywgYnV0IGlu
IHNvIGRvaW5nCisgICAgICAgIC8vIGl0IHdpbGwgYWxzbyBlbnN1cmUgdGhhdCBhbnkgR2V0TG9j
YWxzIGZyb20gdGhlIHNlY29uZCBibG9jayB0aGF0IHJlZmVyIHRvCisgICAgICAgIC8vIFNldExv
Y2FscyBpbiB0aGUgZmlyc3QgYmxvY2sgYXJlIHJlbGlua2VkLiBJZiBqZXR0aXNvbmVkQmxvY2sg
aXMgbm90IE5vQmxvY2ssCisgICAgICAgIC8vIHRoZW4gUGhhbnRvbXMgYXJlIGluc2VydGVkIGZv
ciBhbnl0aGluZyB0aGF0IHRoZSBqZXR0aXNvbmVkQmxvY2sgd291bGQgaGF2ZQorICAgICAgICAv
LyBrZXB0IGFsaXZlLgorICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbZmlyc3RCbG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgQmFzaWNC
bG9jayogc2Vjb25kQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3NlY29uZEJsb2NrSW5kZXhdLmdl
dCgpOworICAgICAgICAKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJs
b2NrIHNpbmNlIHdlIGRvbid0IG5lZWQgaXQgYW55bW9yZS4gV2VsbCwgd2UgZG9uJ3QKKyAgICAg
ICAgLy8gcmVhbGx5IHJlbW92ZSBpdDsgd2UgYWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRv
bS4KKyAgICAgICAgQVNTRVJUKG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5pc1Rlcm1pbmFs
KCkpOworICAgICAgICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IG1fZ3JhcGhbZmly
c3RCbG9jay0+bGFzdCgpXS5jb2RlT3JpZ2luOworICAgICAgICBtX2dyYXBoW2ZpcnN0QmxvY2st
Pmxhc3QoKV0uc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIEFTU0VSVCht
X2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0ucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2tJbmRleCAhPSBOb0Jsb2NrKSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29u
ZWRCbG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGltZSB0
byBpbnNlcnQgZ2hvc3RpZXMgZm9yIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUga2VwdCBhbGl2ZSBp
biBjYXNlIHdlIE9TUgorICAgICAgICAgICAgLy8gZXhpdCBwcmlvciB0byBoaXR0aW5nIHRoZSBm
aXJzdEJsb2NrJ3MgdGVybWluYWwsIGFuZCBlbmQgdXAgZ29pbmcgZG93biBhCisgICAgICAgICAg
ICAvLyBkaWZmZXJlbnQgcGF0aCB0aGFuIHNlY29uZEJsb2NrLgorICAgICAgICAgICAgCisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICBrZWVwT3Bl
cmFuZEFsaXZlKGZpcnN0QmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJh
bmQoaSkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAgICAgICAg
ICAga2VlcE9wZXJhbmRBbGl2ZShmaXJzdEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29u
ZEJsb2NrLT5waGlzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgZmlyc3RCbG9jay0+cGhpcy5h
cHBlbmQoc2Vjb25kQmxvY2stPnBoaXNbaV0pOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBzZWNvbmRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUGhhbnRvbSAm
JiBub2RlLmNoaWxkMSgpKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUmIHBvc3NpYmxlTG9j
YWxPcCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgICAgICAgICAgICAgIGlmIChw
b3NzaWJsZUxvY2FsT3AuaGFzTG9jYWwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZUluZGV4IHNldExvY2FsSW5kZXggPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHBvc3NpYmxlTG9jYWxPcC5sb2NhbCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUmIHNldExvY2FsID0gbV9ncmFwaFtzZXRMb2Nh
bEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbC5vcCgpID09IFNl
dExvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZSBuZXdFZGdlID0gc2V0
TG9jYWwuY2hpbGQxKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZSBvbGRFZGdl
ID0gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJl
ZihuZXdFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG9s
ZEVkZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uc2V0Q2hp
bGQxKG5ld0VkZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIEdldExvY2FsLCB0aGVuIHdlIG1pZ2h0IGxpa2UgdG8g
Zml4IGl0LgorICAgICAgICAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5m
aXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZp
cnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICArK2NoaWxkSWR4KQorICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2Nh
bChmaXJzdEJsb2NrLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQxKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJl
bi5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0Qmxv
Y2ssIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBw
ZW5kKG5vZGVJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpeCB0aGUg
cHJlZGVjZXNzb3JzIG9mIG15IG5ldyBzdWNjZXNzb3JzLiBUaGlzIGlzIHRyaWNreSwgc2luY2Ug
d2UgYXJlIGdvaW5nIHRvIHJlc2V0CisgICAgICAgIC8vIGFsbCBwcmVkZWNlc3NvcnMgYW55d2F5
IGR1ZSB0byByZWFjaGFiaWxpdHkgYW5hbHlzaXMuIEJ1dCB3ZSBuZWVkIHRvIGZpeCB0aGUKKyAg
ICAgICAgLy8gcHJlZGVjZXNzb3JzIGVhZ2VybHkgdG8gZW5zdXJlIHRoYXQgd2Uga25vdyB3aGF0
IHRoZXkgYXJlIGluIGNhc2UgdGhlIG5leHQgYmxvY2sgd2UKKyAgICAgICAgLy8gY29uc2lkZXIg
aW4gdGhpcyBwaGFzZSB3aXNoZXMgdG8gcXVlcnkgdGhlIHByZWRlY2Vzc29ycyBvZiBvbmUgb2Yg
dGhlIGJsb2NrcyB3ZQorICAgICAgICAvLyBhZmZlY3RlZC4KKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9ncmFwaC5udW1TdWNjZXNzb3JzKGZpcnN0QmxvY2spOyBpLS07KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3Vj
Y2Vzc29yKGZpcnN0QmxvY2ssIGkpXS5nZXQoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytqKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnNbal0gPT0gc2Vjb25kQmxv
Y2tJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29yc1tq
XSA9IGZpcnN0QmxvY2tJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gRml4IHRoZSBwcmVkZWNlc3NvcnMgb2YgbXkgZm9ybWVyIHN1Y2Nlc3NvcnMu
IEFnYWluLCB3ZSdkIHJhdGhlciBub3QgZG8gdGhpcywgYnV0IGl0J3MKKyAgICAgICAgLy8gYW4g
dW5mb3J0dW5hdGUgbmVjZXNzaXR5LiBTZWUgYWJvdmUgY29tbWVudC4KKyAgICAgICAgaWYgKGpl
dHRpc29uZWRCbG9ja0luZGV4ICE9IE5vQmxvY2spCisgICAgICAgICAgICBmaXhKZXR0aXNvbmVk
UHJlZGVjZXNzb3JzKGZpcnN0QmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOworICAg
ICAgICAKKyAgICAgICAgLy8gRml4IHVwIHRoZSB2YXJpYWJsZXMgYXQgdGFpbC4KKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgIGZpeFRhaWxPcGVyYW5kKGZpcnN0Qmxv
Y2ssIHNlY29uZEJsb2NrLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fs
cygpOyArK2kpCisgICAgICAgICAgICBmaXhUYWlsT3BlcmFuZChmaXJzdEJsb2NrLCBzZWNvbmRC
bG9jaywgaSk7CisgICAgICAgIGZpcnN0QmxvY2stPnZhbHVlc0F0VGFpbCA9IHNlY29uZEJsb2Nr
LT52YWx1ZXNBdFRhaWw7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW3NlY29u
ZEJsb2NrSW5kZXhdLmNsZWFyKCk7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtQ0ZHU2ltcGxp
ZmljYXRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIHJldHVybiBydW5QaGFzZTxDRkdTaW1wbGlm
aWNhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
X2gKKyNkZWZpbmUgREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDRkcgc2ltcGxpZmljYXRpb246Cisv
LworLy8ganVtcCB0byBzaW5nbGUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UgYmxvY2tzCisvLyBicmFu
Y2ggb24gY29uc3RhbnQgLT4ganVtcAorLy8gYnJhbmNoIHRvIHNhbWUgYmxvY2tzIC0+IGp1bXAK
Ky8vIGp1bXAtb25seSBibG9jayAtPiByZW1vdmUKKy8vIGtpbGwgZGVhZCBjb2RlCisKK2Jvb2wg
cGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fcmVwbGFjZW1lbnRzW2ldID0gTm9Ob2RlOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBibG9jayA9IDA7IGJsb2NrIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2spCi0gICAgICAgICAgICBwZXJmb3JtQmxvY2tDU0UoKm1fZ3JhcGgubV9ibG9ja3NbYmxvY2td
KTsKKyAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NTRShtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrXS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOyAvLyBNYXliZSB3ZSdsbCBuZWVkIHRvIG1ha2Ug
dGhpcyByZWFzb24gYWJvdXQgd2hldGhlciBpdCBjaGFuZ2VkIHRoZSBncmFwaCBpbiBhbiBhY3Rp
b25hYmxlIHdheT8KICAgICB9CiAgICAgCiBwcml2YXRlOgpAQCAtMTM5LDUyICsxNDAsNiBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKLSAgICBib29sIGlz
UHJlZGljdGVkTnVtZXJpY2FsKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBQcmVkaWN0ZWRU
eXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAg
UHJlZGljdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigp
OwotICAgICAgICByZXR1cm4gaXNOdW1iZXJQcmVkaWN0aW9uKGxlZnQpICYmIGlzTnVtYmVyUHJl
ZGljdGlvbihyaWdodCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgbG9naWNhbE5vdElzUHVyZShO
b2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIHJldHVybiBpc0Jvb2xl
YW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pIHx8ICFwcmVkaWN0aW9uOwotICAgIH0KLSAgICAKLSAg
ICBib29sIGJ5VmFsSXNQdXJlKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAg
ICYmICgobm9kZS5vcCgpID09IFB1dEJ5VmFsIHx8IG5vZGUub3AoKSA9PSBQdXRCeVZhbEFsaWFz
KQotICAgICAgICAgICAgICAgID8gaXNBY3Rpb25hYmxlTXV0YWJsZUFycmF5UHJlZGljdGlvbiht
X2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICA6IGlz
QWN0aW9uYWJsZUFycmF5UHJlZGljdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKSkpOwotICAgIH0KLSAgICAKLSAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZUluZGV4IG5v
ZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07
Ci0gICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIShub2RlLmZsYWdzKCkgJiBOb2RlTWlnaHRD
bG9iYmVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKCkpIHsKLSAgICAgICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVz
czoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVh
dGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFy
ZUVxOgotICAgICAgICAgICAgcmV0dXJuICFpc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKTsKLSAg
ICAgICAgY2FzZSBMb2dpY2FsTm90OgotICAgICAgICAgICAgcmV0dXJuICFsb2dpY2FsTm90SXNQ
dXJlKG5vZGUpOwotICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgcmV0dXJuICFi
eVZhbElzUHVyZShub2RlKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIElmIGJ5IHNvbWUgb2Rk
aXR5IHdlIGhpdCB0aGlzIGNhc2UgaW4gcmVsZWFzZSBidWlsZCBpdCdzIHNhZmVyIHRvIGhhdmUg
Q1NFIGFzc3VtZSB0aGUgd29yc3QuCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgTm9kZUlu
ZGV4IGltcHVyZUNTRShOb2RlJiBub2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IGNoaWxk
MSA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMSgpKTsKQEAgLTIxNSw3ICsxNzAsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAg
aWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTIzOCw3ICsxOTMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb05vZGU7CkBAIC0yNTQsMTQgKzIw
OSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhd
OwogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0
QnlWYWw6Ci0gICAgICAgICAgICAgICAgaWYgKCFieVZhbElzUHVyZShub2RlKSkKKyAgICAgICAg
ICAgICAgICBpZiAoIW1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0g
Y2hpbGQxICYmIGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hp
bGQyKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAoIWJ5VmFsSXNQdXJlKG5vZGUpKQorICAg
ICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEo
KSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9uaWNhbGl6
ZShjaGlsZDIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDMoKS5pbmRl
eCgpOwpAQCAtMjgwLDcgKzIzNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gQSBw
dXNoIGNhbm5vdCBhZmZlY3QgcHJldmlvdXNseSBleGlzdGluZyBlbGVtZW50cyBpbiB0aGUgYXJy
YXkuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTMzMSw3
ICsyODYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAg
ICBpZiAoYnlWYWxJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5i
eVZhbElzUHVyZShub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBz
cGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAg
ICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQg
dG8gY2F1c2UgYSBzdHJ1Y3R1cmUKICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgpAQCAt
MzQwLDcgKzI5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBp
ZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTM3Nyw3ICszMzIsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJ
c1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShu
b2RlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRo
YXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAgICAgICAgICAgICAv
LyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBz
dHJ1Y3R1cmUKICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgpAQCAtMzg2LDcgKzM0MSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJz
V29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
aW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNDE2LDcgKzM3MSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2Rl
KSkgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFj
Y2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIg
aW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQog
ICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCkBAIC00MjUsNyArMzgwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRl
eCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CkBAIC00NjEsMTIgKzQxNiwxMiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeVZh
bDoKLSAgICAgICAgICAgICAgICBpZiAoaXNGaXhlZEluZGV4ZWRTdG9yYWdlT2JqZWN0UHJlZGlj
dGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkgJiYgYnlWYWxJc1B1cmUo
bm9kZSkpCisgICAgICAgICAgICAgICAgaWYgKGlzRml4ZWRJbmRleGVkU3RvcmFnZU9iamVjdFBy
ZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpICYmIG1fZ3JhcGgu
YnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CiAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9O
b2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNjEwLDYgKzU2
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSXNTdHJpbmc6CiAgICAgICAgIGNhc2UgSXNP
YmplY3Q6CiAgICAgICAgIGNhc2UgSXNGdW5jdGlvbjoKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90
OgogICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocHVyZUNTRShub2RlKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIApAQCAtNjM1LDE4ICs1OTEsOSBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6
CiAgICAgICAgIGNhc2UgQ29tcGFyZUVxOiB7Ci0gICAgICAgICAgICBpZiAoaXNQcmVkaWN0ZWRO
dW1lcmljYWwobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnRJ
bmRleCA9IHB1cmVDU0Uobm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50SW5k
ZXggIT0gTm9Ob2RlICYmIGlzUHJlZGljdGVkTnVtZXJpY2FsKG1fZ3JhcGhbcmVwbGFjZW1lbnRJ
bmRleF0pKQotICAgICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChyZXBsYWNlbWVudElu
ZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgICAgICBpZiAobG9n
aWNhbE5vdElzUHVyZShub2RlKSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNQcmVkaWN0
ZWROdW1lcmljYWwobm9kZSkpIHsKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1l
bnRJbmRleCA9IHB1cmVDU0Uobm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50
SW5kZXggIT0gTm9Ob2RlICYmIGxvZ2ljYWxOb3RJc1B1cmUobV9ncmFwaFtyZXBsYWNlbWVudElu
ZGV4XSkpCisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50SW5kZXggIT0gTm9Ob2RlICYm
IG1fZ3JhcGguaXNQcmVkaWN0ZWROdW1lcmljYWwobV9ncmFwaFtyZXBsYWNlbWVudEluZGV4XSkp
CiAgICAgICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHJlcGxhY2VtZW50SW5kZXgpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC02NTksMTIgKzYwNiwxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKLSAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSkKKyAgICAgICAgICAg
IGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9k
ZS5jaGlsZDIoKS5pbmRleCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUp
ICYmIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5j
aGlsZDIoKS5pbmRleCgpKSAhPSBOb05vZGUpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZh
bElzUHVyZShub2RlKSAmJiBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmlu
ZGV4KCksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkgIT0gTm9Ob2RlKQogICAgICAgICAgICAgICAg
IG5vZGUuc2V0T3AoUHV0QnlWYWxBbGlhcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIApAQCAtNzA0LDE0ICs2NTEsMTkgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIH0KICAgICAK
LSAgICB2b2lkIHBlcmZvcm1CbG9ja0NTRShCYXNpY0Jsb2NrJiBibG9jaykKKyAgICB2b2lkIHBl
cmZvcm1CbG9ja0NTRShCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIG1fY3VycmVu
dEJsb2NrID0gJmJsb2NrOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBMYXN0Tm9kZVR5cGU7ICsraSkKICAgICAgICAgICAgIG1fbGFz
dFNlZW5baV0gPSBVSU5UX01BWDsKIAotICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsg
bV9pbmRleEluQmxvY2sgPCBibG9jay5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKLSAgICAg
ICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2tbbV9pbmRleEluQmxvY2tdOworICAgICAgICBm
b3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyAr
K21faW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrLT5h
dChtX2luZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBwZXJmb3JtTm9kZUNTRShtX2dyYXBoW21f
Y29tcGlsZUluZGV4XSk7CiAgICAgICAgIH0KICAgICB9CkBAIC03MjMsOSArNjc1LDkgQEAgcHJp
dmF0ZToKICAgICBGaXhlZEFycmF5PHVuc2lnbmVkLCBMYXN0Tm9kZVR5cGU+IG1fbGFzdFNlZW47
CiB9OwogCi12b2lkIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtQ1NFKEdy
YXBoJiBncmFwaCkKIHsKLSAgICBydW5QaGFzZTxDU0VQaGFzZT4oZ3JhcGgpOworICAgIHJldHVy
biBydW5QaGFzZTxDU0VQaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBhIHdpZGUgcmFu
Z2Ugb2Ygc3ViZXhwcmVzc2lvbiBzaW1pbGFyaXRpZXMuIEl0J3Mga25vd24gdG8gcHJvZHVjZSBi
aWcgd2lucwogLy8gb24gYSBmZXcgYmVuY2htYXJrcywgYW5kIGlzIHJlbGF0aXZlbHkgY2hlYXAg
dG8gcnVuLgogCi12b2lkIHBlcmZvcm1DU0UoR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybUNTRShHcmFw
aCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTIgQEAK
ICNlbHNlCiAjZGVmaW5lIERGR19FTkFCTEVfSklUX0FTU0VSVCAwCiAjZW5kaWYKKy8vIEVuYWJs
ZSB2YWxpZGF0aW9uIG9mIHRoZSBncmFwaC4KKyNpZiAhQVNTRVJUX0RJU0FCTEVECisjZGVmaW5l
IERGR19FTkFCTEVfVkFMSURBVElPTiAxCisjZWxzZQorI2RlZmluZSBERkdfRU5BQkxFX1ZBTElE
QVRJT04gMAorI2VuZGlmCiAvLyBDb25zaXN0ZW5jeSBjaGVjayBjb250ZW50cyBjb21waWxlciBk
YXRhIHN0cnVjdHVyZXMuCiAjZGVmaW5lIERGR19FTkFCTEVfQ09OU0lTVEVOQ1lfQ0hFQ0sgMAog
Ly8gRW1pdCBhIGJyZWFrcG9pbnQgaW50byB0aGUgaGVhZCBvZiBldmVyeSBnZW5lcmF0ZWQgZnVu
Y3Rpb24sIHRvIGFpZCBkZWJ1Z2dpbmcgaW4gR0RCLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9u
IDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMyArNDMsMTcgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7Cisg
ICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKICAgICAgICAgQWJzdHJhY3RT
dGF0ZSBzdGF0ZShtX2dyYXBoKTsKICAgICAgICAgSW5zZXJ0aW9uU2V0PE5vZGVJbmRleD4gaW5z
ZXJ0aW9uU2V0OwogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkg
ewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGlmICghYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3RhdGUuYmVnaW5CYXNpY0Jsb2Nr
KGJsb2NrKTsKQEAgLTYwLDI5ICs2NCw1MyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CiAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLnNob3VsZEdlbmVyYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgfHwgKG5vZGUuZmxh
Z3MoKSAmIChOb2RlQ2xvYmJlcnNXb3JsZCB8IE5vZGVNaWdodENsb2JiZXIpKQorICAgICAgICAg
ICAgICAgICAgICB8fCBtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkKICAgICAgICAgICAgICAg
ICAgICAgfHwgbm9kZS5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RhdGUuZm9yTm9kZShub2RlSW5k
ZXgpLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTm9kZSBw
aGFudG9tKFBoYW50b20sIG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5vcCgpID09IFBoaSk7CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNSZXN1bHQoKSk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPT0gbm9kZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0luUGhpcyhub2RlLmNoaWxkMSgpLmlu
ZGV4KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kKG5vZGUubG9jYWwoKSkgPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggdGFpbE5vZGVJbmRleCA9IGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpOworICAgICAgICAgICAg
ICAgICAgICBpZiAodGFpbE5vZGVJbmRleCA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAg
ICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt0YWlsTm9kZUluZGV4XS5vcCgpID09IEZs
dXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFt0YWlsTm9kZUlu
ZGV4XS5vcCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBwaGFudG9tLmNoaWxk
cmVuID0gbm9kZS5jaGlsZHJlbjsKICAgICAgICAgICAgICAgICBwaGFudG9tLnJlZigpOworICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQo
bm9kZUluZGV4LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHBoYW50b21Ob2Rl
SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZChw
aGFudG9tKTsKICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuYXBwZW5kKGluZGV4SW5CbG9j
aywgcGhhbnRvbU5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS5yZXNldCgp
OwogICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKmJsb2NrKTsKKyAgICAgICAgICAg
IHN0YXRlLnJlc2V0KCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBjaGFu
Z2VkOwogICAgIH0KIH07CiAKLXZvaWQgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhHcmFwaCYgZ3Jh
cGgpCitib29sIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoR3JhcGgmIGdyYXBoKQogewotICAgIHJ1
blBoYXNlPENvbnN0YW50Rm9sZGluZ1BoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNl
PENvbnN0YW50Rm9sZGluZ1BoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGluZmVycmVkIGNvbnN0YW50cywgYW5kIHJlcGxh
Y2VzIHRob3NlIG5vZGVzIHdpdGggY29uc3RhbnRzIHdoaWxzdCBpbmplY3RpbmcKIC8vIFBoYW50
b20gbm9kZXMgdG8ga2VlcCB0aGUgY2hpbGRyZW4gYWxpdmUgKHdoaWNoIGlzIG5lY2Vzc2FyeSBm
b3IgT1NSIGV4aXQpLgogCi12b2lkIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoR3JhcGgmKTsKK2Jv
b2wgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQnl0ZUNvZGVQ
YXJzZXIuaCIKICNpbmNsdWRlICJERkdDRkFQaGFzZS5oIgorI2luY2x1ZGUgIkRGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1ZGUgIkRG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgpAQCAt
NjAsMTIgKzYxLDE3IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0K
ICAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQogICAgICAgICBkZmcucHJl
ZGljdEFyZ3VtZW50VHlwZXMoKTsKIAotICAgIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlv
bihkZmcpOwogICAgIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJm
b3JtRml4dXAoZGZnKTsKLSAgICBwZXJmb3JtQ0ZBKGRmZyk7Ci0gICAgcGVyZm9ybUNvbnN0YW50
Rm9sZGluZyhkZmcpOwotICAgIHBlcmZvcm1DU0UoZGZnKTsKKyAgICBmb3IgKDs7KSB7CisgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAg
ICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOworICAgICAgICBjaGFu
Z2VkIHw9IHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihkZmcpOworICAgICAgICBwZXJmb3JtQ1NF
KGRmZyk7CisgICAgICAgIGlmICghY2hhbmdlZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
ICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwogCiAjaWYgREZHX0VO
QUJMRShERUJVR19WRVJCT1NFKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdF
ZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJ
KHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAg
ICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4VW5jaGVja2VkKCkgIT0gTm9Ob2Rl
OyB9CisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KICAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgCiAgICAgYm9v
bCBvcGVyYXRvcj09KEVkZ2Ugb3RoZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDEwICs0MSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIHJ1bigp
CisgICAgYm9vbCBydW4oKQogICAgIHsKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRl
eCkKICAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTM1OSw5
ICszNjAsOSBAQCBwcml2YXRlOgogICAgIEluc2VydGlvblNldDxOb2RlSW5kZXg+IG1faW5zZXJ0
aW9uU2V0OwogfTsKICAgICAKLXZvaWQgcGVyZm9ybUZpeHVwKEdyYXBoJiBncmFwaCkKK2Jvb2wg
cGVyZm9ybUZpeHVwKEdyYXBoJiBncmFwaCkKIHsKLSAgICBydW5QaGFzZTxGaXh1cFBoYXNlPihn
cmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPEZpeHVwUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNs
YXNzIEdyYXBoOwogLy8gRml4IHBvcnRpb25zIG9mIHRoZSBncmFwaCB0aGF0IGFyZSBpbmVmZmlj
aWVudCBnaXZlbiB0aGUgcHJlZGljdGlvbnMgdGhhdAogLy8gd2UgaGF2ZS4gVGhpcyBzaG91bGQg
cnVuIGFmdGVyIHByZWRpY3Rpb24gcHJvcGFnYXRpb24gYnV0IGJlZm9yZSBDU0UuCiAKLXZvaWQg
cGVyZm9ybUZpeHVwKEdyYXBoJik7Citib29sIHBlcmZvcm1GaXh1cChHcmFwaCYpOwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHOjpQaGFzZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiwxMCArMTI2LDggQEAg
dm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHVuc2lnbmVkIHJlZkNv
dW50ID0gbm9kZS5yZWZDb3VudCgpOwogICAgIGJvb2wgc2tpcHBlZCA9ICFyZWZDb3VudDsKICAg
ICBib29sIG11c3RHZW5lcmF0ZSA9IG5vZGUubXVzdEdlbmVyYXRlKCk7Ci0gICAgaWYgKG11c3RH
ZW5lcmF0ZSkgewotICAgICAgICBBU1NFUlQocmVmQ291bnQpOworICAgIGlmIChtdXN0R2VuZXJh
dGUpCiAgICAgICAgIC0tcmVmQ291bnQ7Ci0gICAgfQogICAgIAogICAgIHByaW50V2hpdGVTcGFj
ZSgobm9kZS5jb2RlT3JpZ2luLmlubGluZURlcHRoKCkgLSAxKSAqIDIpOwogCkBAIC0yNzUsMTUg
KzI3MywyOSBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgpCiAKIHZvaWQg
R3JhcGg6OmR1bXAoKQogeworICAgIGJvb2wgZHVtcEFsbCA9IGZhbHNlOworI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICBkdW1wQWxsID0gdHJ1ZTsKKyNlbmRp
ZgorCiAgICAgTm9kZUluZGV4IGxhc3ROb2RlSW5kZXggPSBOb05vZGU7CiAgICAgZm9yIChzaXpl
X3QgYiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewogICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fYmxvY2tzW2JdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGRhdGFMb2coIkJsb2NrICMldSAoYmMjJXUpOiAlcyVz
XG4iLCAoaW50KWIsIGJsb2NrLT5ieXRlY29kZUJlZ2luLCBibG9jay0+aXNSZWFjaGFibGUgPyAi
IiA6ICIgKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDog
IiIpOworICAgICAgICBkYXRhTG9nKCIgIFByZWRlY2Vzc29yczoiKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBibG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBkYXRhTG9nKCIgIyV1IiwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldKTsKKyAgICAg
ICAgZGF0YUxvZygiXG4iKTsKICAgICAgICAgZGF0YUxvZygiICBQaGkgTm9kZXM6XG4iKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgLy8gRHVtcGluZyB0aGUgZGVhZCBQaGkgbm9kZXMgaXMganVzdCBhbm5veWlu
ZyEKLSAgICAgICAgICAgIGlmIChhdChibG9jay0+cGhpc1tpXSkucmVmQ291bnQoKSkKKyAgICAg
ICAgICAgIGlmIChkdW1wQWxsIHx8IGF0KGJsb2NrLT5waGlzW2ldKS5yZWZDb3VudCgpKSB7Cisg
ICAgICAgICAgICAgICAgZHVtcENvZGVPcmlnaW4obGFzdE5vZGVJbmRleCwgYmxvY2stPnBoaXNb
aV0pOwogICAgICAgICAgICAgICAgIGR1bXAoYmxvY2stPnBoaXNbaV0pOworICAgICAgICAgICAg
ICAgIGxhc3ROb2RlSW5kZXggPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBkYXRhTG9nKCIgIHZhcnMgYmVmb3JlOiAiKTsKICAgICAgICAgaWYgKGJs
b2NrLT5jZmFIYXNWaXNpdGVkKQpAQCAtMzA1LDYgKzMxNyw5IEBAIHZvaWQgR3JhcGg6OmR1bXAo
KQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkYXRhTG9nKCI8ZW1wdHk+Iik7CiAgICAgICAg
IGRhdGFMb2coIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgdmFyIGxpbmtzOiAiKTsKKyAgICAg
ICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIFdURjo6ZGF0YUZpbGUoKSk7
CisgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAgfQogfQogCkBAIC0zNjIsNiArMzc3LDU0IEBA
IHZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKCkKICAgICB9CiB9CiAKK3ZvaWQgR3Jh
cGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxv
Y2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KQoreworICAgIEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fYmxvY2tzW3N1Y2Nlc3NvckluZGV4XS5nZXQoKTsKKyAg
ICBpZiAoIXN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUpIHsKKyAgICAgICAgc3VjY2Vzc29yLT5pc1Jl
YWNoYWJsZSA9IHRydWU7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChzdWNjZXNzb3JJbmRleCk7
CisgICAgfQorICAgIAorICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2Nr
SW5kZXgpOworfQorCit2b2lkIEdyYXBoOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQoreworICAg
IFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7CisgICAgd29ya2xpc3QuYXBwZW5kKDAp
OworICAgIG1fYmxvY2tzWzBdLT5pc1JlYWNoYWJsZSA9IHRydWU7CisgICAgd2hpbGUgKCF3b3Jr
bGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgQmxvY2tJbmRleCBpbmRleCA9IHdvcmtsaXN0Lmxh
c3QoKTsKKyAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOworICAgICAgICAKKyAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7CisgICAgICAgIEFTU0VS
VChibG9jay0+aXNMaW5rZWQpOworICAgICAgICAKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KGJs
b2NrLT5sYXN0KCkpOworICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKG5vZGUuaXNKdW1wKCkpCisgICAgICAgICAgICBoYW5kbGVTdWNjZXNz
b3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZWxz
ZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29y
a2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgICAgIGhhbmRs
ZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCit7
CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2Jsb2Nrcy5zaXplKCk7IGJsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBibG9jay0+aXNSZWFjaGFibGUgPSBmYWxzZTsKKyAgICAgICAgYmxvY2stPm1fcHJl
ZGVjZXNzb3JzLmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIGRldGVybWluZVJlYWNoYWJpbGl0
eSgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNiAr
MzQ2LDc4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGlzQ2FwdHVyZWQoc3RhdGljX2Nhc3Q8
aW50Pih2aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICB9CiAgICAgCisgICAgdW5zaWduZWQgbnVtU3Vj
Y2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBhdChibG9j
ay0+bGFzdCgpKS5udW1TdWNjZXNzb3JzKCk7CisgICAgfQorICAgIEJsb2NrSW5kZXggc3VjY2Vz
c29yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhdChibG9jay0+bGFzdCgpKS5zdWNjZXNzb3IoaW5kZXgpOworICAgIH0KKyAgICBCbG9j
a0luZGV4IHN1Y2Nlc3NvckZvckNvbmRpdGlvbihCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCBjb25k
aXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkuc3VjY2Vzc29y
Rm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNQcmVkaWN0
ZWROdW1lcmljYWwoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgbGVm
dCA9IGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKTsKKyAgICAgICAgUHJlZGljdGVkVHlw
ZSByaWdodCA9IGF0KG5vZGUuY2hpbGQyKCkpLnByZWRpY3Rpb24oKTsKKyAgICAgICAgcmV0dXJu
IGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGJ5VmFsSXNQdXJlKE5vZGUmIG5vZGUpCisgICAgeworICAg
ICAgICByZXR1cm4gYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCisg
ICAgICAgICAgICAmJiAoKG5vZGUub3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLm9wKCkgPT0gUHV0
QnlWYWxBbGlhcykKKyAgICAgICAgICAgICAgICA/IGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVBy
ZWRpY3Rpb24oYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKQorICAgICAgICAgICAgICAg
IDogaXNBY3Rpb25hYmxlQXJyYXlQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rp
b24oKSkpOworICAgIH0KKyAgICAKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZSYgbm9kZSkK
KyAgICB7CisgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIShub2RlLmZsYWdzKCkgJiBOb2Rl
TWlnaHRDbG9iYmVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNo
IChub2RlLm9wKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBDb21w
YXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBjYXNlIENvbXBh
cmVHcmVhdGVyOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgIGNhc2Ug
Q29tcGFyZUVxOgorICAgICAgICAgICAgcmV0dXJuICFpc1ByZWRpY3RlZE51bWVyaWNhbChub2Rl
KTsKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIHJldHVybiAhYnlWYWxJc1B1
cmUobm9kZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJZiBieSBzb21lIG9kZGl0eSB3ZSBo
aXQgdGhpcyBjYXNlIGluIHJlbGVhc2UgYnVpbGQgaXQncyBzYWZlciB0byBoYXZlIENTRSBhc3N1
bWUgdGhlIHdvcnN0LgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgY2xvYmJlcnNX
b3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNsb2JiZXJz
V29ybGQoYXQobm9kZUluZGV4KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZGV0ZXJtaW5lUmVh
Y2hhYmlsaXR5KCk7CisgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOworICAgIAorICAgIHVu
c2lnbmVkIG51bUNoaWxkcmVuKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCisgICAgICAgICAgICByZXR1cm4gbm9kZS5udW1DaGls
ZHJlbigpOworICAgICAgICByZXR1cm4gQWRqYWNlbmN5TGlzdFNpemU7CisgICAgfQorICAgIAor
ICAgIEVkZ2UgY2hpbGQoTm9kZSYgbm9kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpCisgICAgICAgICAgICByZXR1cm4g
bV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIGluZGV4XTsKKyAgICAgICAgcmV0
dXJuIG5vZGUuY2hpbGRyZW4uY2hpbGQoaW5kZXgpOworICAgIH0KKyAgICAKICAgICBKU0dsb2Jh
bERhdGEmIG1fZ2xvYmFsRGF0YTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIENv
ZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwpAQCAtMzY0LDYgKzQzNiw4IEBAIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwogcHJpdmF0ZToKICAgICAKKyAgICB2b2lkIGhh
bmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRl
eCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKKyAgICAKICAgICBib29s
IGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSYgYWRkLCBOb2RlJiB2YXJp
YWJsZSwgTm9kZSYgaW1tZWRpYXRlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS5o
YXNDb25zdGFudCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBzdHJ1Y3QgT3BJbmZvIHsKIC8vIE5vZGUgcmVw
cmVzZW50cyBhIHNpbmdsZSBvcGVyYXRpb24gaW4gdGhlIGRhdGEgZmxvdyBncmFwaC4KIHN0cnVj
dCBOb2RlIHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OwotCisgICAgCiAgICAgLy8g
Q29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1
ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRl
eCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBj
aGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQpAQCAtMjAy
LDcgKzIwMiw4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9vcCA9IEpTQ29uc3RhbnQ7CiAg
ICAgICAgIGlmIChtX2ZsYWdzICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fcmVm
Q291bnQtLTsKLSAgICAgICAgbV9mbGFncyAmPSB+Tm9kZU11c3RHZW5lcmF0ZTsKKyAgICAgICAg
QVNTRVJUKCEobV9mbGFncyAmIE5vZGVDbG9iYmVyc1dvcmxkKSk7CisgICAgICAgIG1fZmxhZ3Mg
Jj0gfihOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcik7CiAgICAgICAgIG1fb3BJ
bmZvID0gY29uc3RhbnROdW1iZXI7CiAgICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7CiAgICAgfQpA
QCAtNDY4LDYgKzQ2OSwzNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5m
bzI7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgICAgIHJl
dHVybiAxOworICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgQmxvY2tJbmRleCBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGluZGV4KSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHJldHVy
biB0YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJu
IG5vdFRha2VuQmxvY2tJbmRleCgpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gTm9CbG9jazsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvckZvckNvbmRpdGlvbihib29s
IGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKKyAgICAgICAg
cmV0dXJuIGNvbmRpdGlvbiA/IHRha2VuQmxvY2tJbmRleCgpIDogbm90VGFrZW5CbG9ja0luZGV4
KCk7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzSGVhcFByZWRpY3Rpb24oKQogICAgIHsKICAg
ICAgICAgc3dpdGNoIChvcCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oSXNTdHJpbmcsIE5vZGVSZXN1bHRC
b29sZWFuKSBcCiAgICAgbWFjcm8oSXNPYmplY3QsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAg
bWFjcm8oSXNGdW5jdGlvbiwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBtYWNybyhMb2dpY2Fs
Tm90LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNaWdodENsb2JiZXIpIFwKKyAgICBtYWNybyhM
b2dpY2FsTm90LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKFRvUHJpbWl0aXZlLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAg
ICBtYWNybyhTdHJDYXQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFz
VmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwog
ICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwotICAgIEFTU0VSVChjb2RlQmxv
Y2stPm51bWJlck9mREZHT1NSRW50cmllcygpKTsKIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCiAgICAgZGF0YUxvZygiT1NSIGluICVwKCVwKSBmcm9tIGJjIyV1XG4iLCBjb2RlQmxvY2ss
IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgYnl0ZWNvZGVJbmRleCk7CkBAIC01MSw2ICs1MCwx
MyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBPU1JFbnRyeURh
dGEqIGVudHJ5ID0gY29kZUJsb2NrLT5kZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpOwogICAgIAorICAgIGlmICghZW50cnkpIHsKKyNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQorICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHRoZSBl
bnRyeXBvaW50IHdhcyBvcHRpbWl6ZWQgb3V0LlxuIik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAogICAgIEFTU0VSVChlbnRyeS0+bV9ieXRlY29kZUluZGV4ID09IGJ5
dGVjb2RlSW5kZXgpOwogICAgIAogICAgIC8vIFRoZSBjb2RlIGJlbG93IGNoZWNrcyBpZiBpdCBp
cyBzYWZlIHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBJdCBtYXkgZmluZApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIxLDcgKzExMjEsNyBAQCBzaXplX3QgREZHX09QRVJBVElPTiBkZmdDb252ZXJ0
SlNWYWx1ZVRvCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMp
OwogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wKS50b0Jvb2xlYW4o
ZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvQm9vbGVhbigp
OwogfQogCiAjaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZH
VmFsaWRhdGUuaCIKKwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtMzYsMTAgKzM4LDEyIEBAIHZv
aWQgUGhhc2U6OmJlZ2luUGhhc2UoKQogICAgIGRhdGFMb2coIkJlZ2lubmluZyBERkcgcGhhc2Ug
JXMuXG4iLCBtX25hbWUpOwogICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSAlczpcbiIsIG1fbmFt
ZSk7CiAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgdmFsaWRhdGUobV9ncmFwaCwgRG9udER1bXBH
cmFwaCk7CiB9CiAKIHZvaWQgUGhhc2U6OmVuZFBoYXNlKCkKIHsKKyAgICB2YWxpZGF0ZShtX2dy
YXBoLCBEdW1wR3JhcGgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDEwIEBAIHByaXZhdGU6
CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQaGFzZVR5cGU+Ci12b2lkIHJ1blBoYXNlKEdyYXBo
JiBncmFwaCkKK2Jvb2wgcnVuUGhhc2UoR3JhcGgmIGdyYXBoKQogewogICAgIFBoYXNlVHlwZSBw
aGFzZShncmFwaCk7Ci0gICAgcGhhc2UucnVuKCk7CisgICAgcmV0dXJuIHBoYXNlLnJ1bigpOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wg
cnVuKCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQog
ICAgICAgICBtX2NvdW50ID0gMDsKQEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgZG9Sb3VuZE9mRG91YmxlVm90aW5nKCk7CiAgICAgICAgICAgICBwcm9wYWdhdGVCYWNrd2Fy
ZCgpOwogICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIAogcHJpdmF0ZToKQEAgLTgzMSw5ICs4MzMsOSBAQCBwcml2
YXRlOgogI2VuZGlmCiB9OwogICAgIAotdm9pZCBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9u
KEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYg
Z3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U+KGdyYXBo
KTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U+KGdyYXBo
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
aAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBA
IGNsYXNzIEdyYXBoOwogLy8gYXJpdGhtZXRpYyBub2RlcykgZG8gbm90IHF1YWxpZnkgZm9yIGFu
eSBvZiB0aGVzZSBjYXRlZ29yaWVzLiBCdXQgYWZ0ZXIgcnVubmluZwogLy8gdGhpcyBwaGFzZSwg
d2UnbGwgaGF2ZSBmdWxsIGluZm9ybWF0aW9uIGZvciB0aGUgZXhwZWN0ZWQgdHlwZSBvZiBlYWNo
IG5vZGUuCiAKLXZvaWQgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYpOworYm9v
bCBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkc6OlBoYXNlCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQ
aGlFbGltaW5hdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4o
KQogICAgIHsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGRvIHsKQEAg
LTYzLDcgKzYzLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogcHJpdmF0ZToKQEAgLTE2Niw5ICsxNjcsOSBAQCBwcml2YXRlOgogCiB9OwogCi12b2lkIHBl
cmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbihHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1S
ZWR1bmRhbnRQaGlFbGltaW5hdGlvbihHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8UmVk
dW5kYW50UGhpRWxpbWluYXRpb25QaGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFzZTxS
ZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50
UGhpRWxpbWluYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9u
UGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBHcmFwaDsKIC8v
IFdlIGluc2VydGVkIG1hbnkgY2FuLWJlLXJlZHVuZGFudCBQaGkgbm9kZXMgd2hlbiBidWlsZGlu
ZyB0aGUgZ3JhcGguCiAvLyBUaGlzIHBoYXNlIHdpbGwganVzdCByZW1vdmUgdGhlbS4KIAotdm9p
ZCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24oR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybVJl
ZHVuZGFudFBoaUVsaW1pbmF0aW9uKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2Fy
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTIgKzEyMCwyNSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAvLyBDbGVhciB0aGUgdXNlIGNvdW50ICYgYWRkIHRvIHRoZSBmcmVlIGxpc3QuCiAgICAg
ICAgICAgICBtX3VzZWRbaW5kZXhdID0gMDsKICAgICAgICAgICAgIG1fZnJlZS5hcHBlbmQoaW5k
ZXgpOworICAgICAgICB9IGVsc2UgeworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coIiBWaXJ0dWFsIHJlZ2lzdGVyICV1IGlzIGF0
ICV1LyV1IHVzZXMuIiwgaW5kZXgsIG1fdXNlZFtpbmRleF0sIG5vZGUucmVmQ291bnQoKSk7Cisj
ZW5kaWYKICAgICAgICAgfQogICAgIH0KICAgICB2b2lkIHVzZShFZGdlIGNoaWxkKQogICAgIHsK
ICAgICAgICAgdXNlKGNoaWxkLmluZGV4VW5jaGVja2VkKCkpOwogICAgIH0KKyAgICAKKyAgICB2
b2lkIHVzZUlmSGFzUmVzdWx0KEVkZ2UgY2hpbGQpCisgICAgeworICAgICAgICBpZiAoIWNoaWxk
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIW1fZ3JhcGhbY2hpbGRdLmhhc1Jl
c3VsdCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB1c2UoY2hpbGQpOworICAgIH0K
IAogICAgIHVuc2lnbmVkIGhpZ2hXYXRlcm1hcmsoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI4MCw4ICsxMjgwLDExIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoKQogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgR1BSSW5mbzo6
cmVnVDApOwogCiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7Ci0gICAgZm9yIChtX2Jsb2Nr
ID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2sp
Ci0gICAgICAgIGNvbXBpbGUoKm1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10pOworICAg
IGZvciAobV9ibG9jayA9IDA7IG1fYmxvY2sgPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUo
KTsgKyttX2Jsb2NrKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQuZ3JhcGgo
KS5tX2Jsb2Nrc1ttX2Jsb2NrXS5nZXQoKTsKKyAgICAgICAgaWYgKGJsb2NrKQorICAgICAgICAg
ICAgY29tcGlsZSgqYmxvY2spOworICAgIH0KICAgICBsaW5rQnJhbmNoZXMoKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTEyODksOCArMTI5MiwxMCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKCkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNyZWF0ZU9TUkVudHJpZXMoKQogewogICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1faml0LmdyYXBo
KCkubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayYg
YmxvY2sgPSAqbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1tibG9ja0luZGV4XTsKLSAgICAgICAgaWYg
KCFibG9jay5pc09TUlRhcmdldCkKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5n
cmFwaCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgbmVl
ZCB0byBjcmVhdGUgT1NSIGVudHJ5IHRyYW1wb2xpbmVzIHdoZW4gdXNpbmcgZWRnZSBjb2RlCkBA
IC0xMzEyLDkgKzEzMTcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMo
TGluawogewogICAgIHVuc2lnbmVkIG9zckVudHJ5SW5kZXggPSAwOwogICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Mu
c2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayYgYmxvY2sgPSAqbV9q
aXQuZ3JhcGgoKS5tX2Jsb2Nrc1tibG9ja0luZGV4XTsKLSAgICAgICAgaWYgKGJsb2NrLmlzT1NS
VGFyZ2V0KQotICAgICAgICAgICAgbV9qaXQubm90aWNlT1NSRW50cnkoYmxvY2ssIG1fb3NyRW50
cnlIZWFkc1tvc3JFbnRyeUluZGV4KytdLCBsaW5rQnVmZmVyKTsKKyAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghYmxv
Y2stPmlzT1NSVGFyZ2V0KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1faml0Lm5v
dGljZU9TUkVudHJ5KCpibG9jaywgbV9vc3JFbnRyeUhlYWRzW29zckVudHJ5SW5kZXgrK10sIGxp
bmtCdWZmZXIpOwogICAgIH0KICAgICBBU1NFUlQob3NyRW50cnlJbmRleCA9PSBtX29zckVudHJ5
SGVhZHMuc2l6ZSgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDcgKzMw
NiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIG9uIGFuIG9wZXJhbmQgb25jZSBpdCBoYXMg
YmVlbiBjb25zdW1lZCBieSBhIHBhcmVudCBub2RlLgogICAgIHZvaWQgdXNlKE5vZGVJbmRleCBu
b2RlSW5kZXgpCiAgICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gYXQobm9kZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgTm9kZSYgbm9kZSA9
IGF0KG5vZGVJbmRleCk7CisgICAgICAgIGlmICghbm9kZS5oYXNSZXN1bHQoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5v
ZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgICAgIC8vIHVzZSgpIHJldHVy
bnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBiZWNvbWVzIGRlYWQsIGFuZCBhbnkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKyNpZiBERkdfRU5BQkxFKFZBTElEQVRJT04pCisK
K2NsYXNzIFZhbGlkYXRlIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZShHcmFwaCYgZ3JhcGgsIEdy
YXBoRHVtcE1vZGUgZ3JhcGhEdW1wTW9kZSkKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAg
ICAgICAsIG1fZ3JhcGhEdW1wTW9kZShncmFwaER1bXBNb2RlKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgI2RlZmluZSBWQUxJREFURShjb250ZXh0LCBhc3NlcnRpb24pIGRvIHsgXAorICAgICAg
ICBpZiAoIShhc3NlcnRpb24pKSB7IFwKKyAgICAgICAgICAgIGRhdGFMb2coIlxuXG5cbkF0ICIp
OyBcCisgICAgICAgICAgICByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0OyBcCisgICAg
ICAgICAgICBkYXRhTG9nKCI6IHZhbGlkYXRpb24gJXMgKCVzOiVkKSBmYWlsZWQuXG4iLCAjYXNz
ZXJ0aW9uLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisgICAgICAgICAgICBkdW1wR3JhcGhJZkFw
cHJvcHJpYXRlKCk7IFwKKyAgICAgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19G
SUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9uKTsgXAorICAg
ICAgICAgICAgQ1JBU0goKTsgXAorICAgICAgICB9IFwKKyAgICB9IHdoaWxlICgwKQorICAgIAor
ICAgICNkZWZpbmUgVl9FUVVBTChjb250ZXh0LCBsZWZ0LCByaWdodCkgZG8geyBcCisgICAgICAg
IGlmIChsZWZ0ICE9IHJpZ2h0KSB7IFwKKyAgICAgICAgICAgIGRhdGFMb2coIlxuXG5cbkF0ICIp
OyBcCisgICAgICAgICAgICByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0OyBcCisgICAg
ICAgICAgICBkYXRhTG9nKCI6IHZhbGlkYXRpb24gKCVzID0gIiwgI2xlZnQpOyBcCisgICAgICAg
ICAgICBkdW1wRGF0YShsZWZ0KTsgXAorICAgICAgICAgICAgZGF0YUxvZygiKSA9PSAoJXMgPSAi
LCAjcmlnaHQpOyBcCisgICAgICAgICAgICBkdW1wRGF0YShyaWdodCk7IFwKKyAgICAgICAgICAg
IGRhdGFMb2coIikgKCVzOiVkKSBmYWlsZWQuXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisg
ICAgICAgICAgICBkdW1wR3JhcGhJZkFwcHJvcHJpYXRlKCk7IFwKKyAgICAgICAgICAgIFdURlJl
cG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNU
SU9OLCAjbGVmdCAiID09ICIgI3JpZ2h0KTsgXAorICAgICAgICAgICAgQ1JBU0goKTsgXAorICAg
ICAgICB9IFwKKyAgICB9IHdoaWxlICgwKQorCisgICAgdm9pZCB2YWxpZGF0ZSgpCisgICAgewor
ICAgICAgICAvLyBOQi4gVGhpcyBjb2RlIGlzIG5vdCB3cml0dGVuIGZvciBwZXJmb3JtYW5jZSwg
c2luY2UgaXQgaXMgbm90IGludGVuZGVkIHRvIHJ1bgorICAgICAgICAvLyBpbiByZWxlYXNlIGJ1
aWxkcy4KKyAgICAgICAgCisgICAgICAgIC8vIFZhbGlkYXRlIHJlZiBjb3VudHMgYW5kIHVzZXMu
CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbXlSZWZDb3VudHM7CisgICAgICAgIG15UmVmQ291
bnRzLmZpbGwoMCwgbV9ncmFwaC5zaXplKCkpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9j
a0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2stPm5vZGVJbmRleChpKTsKKyAgICAgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsg
KytqKSB7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9k
ZSwgaik7CisgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgbXlSZWZDb3VudHNbZWRnZS5pbmRleCgpXSsrOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFudG9tLCBHZXRMb2Nh
bCwgb3IgUGhpLCBteSBjaGlsZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCisgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1
c2g6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGk6CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBtX2dyYXBo
W2VkZ2VdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gYmxvY2stPm5vZGVJbmRleChpKTsKKyAgICAgICAgICAgICAgICBWX0VR
VUFMKChub2RlSW5kZXgpLCBteVJlZkNvdW50c1tub2RlSW5kZXhdLCBtX2dyYXBoW25vZGVJbmRl
eF0uYWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgR3JhcGhEdW1wTW9kZSBt
X2dyYXBoRHVtcE1vZGU7CisgICAgCisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgZGF0YUxvZygiQCV1Iiwgbm9kZUlu
ZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2Rl
SW5kZXggbm9kZUluZGV4LCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBkYXRhTG9nKCJAJXUg
LT4gJXNAJXUiLCBub2RlSW5kZXgsIHVzZUtpbmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSksIGVk
Z2UuaW5kZXgoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcERhdGEodW5zaWduZWQgdmFs
dWUpCisgICAgeworICAgICAgICBkYXRhTG9nKCIldSIsIHZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wR3JhcGhJZkFwcHJvcHJpYXRlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2dy
YXBoRHVtcE1vZGUgPT0gRG9udER1bXBHcmFwaCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgZGF0YUxvZygiR3JhcGggYXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIG1fZ3Jh
cGguZHVtcCgpOworICAgIH0KK307CisKK3ZvaWQgdmFsaWRhdGUoR3JhcGgmIGdyYXBoLCBHcmFw
aER1bXBNb2RlIGdyYXBoRHVtcE1vZGUpCit7CisgICAgVmFsaWRhdGUgdmFsaWRhdGlvbk9iamVj
dChncmFwaCwgZ3JhcGhEdW1wTW9kZSk7CisgICAgdmFsaWRhdGlvbk9iamVjdC52YWxpZGF0ZSgp
OworfQorCisjZW5kaWYgLy8gREZHX0VOQUJMRShWQUxJREFUSU9OKQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR1ZhbGlkYXRlX2gKKyNkZWZpbmUgREZHVmFsaWRhdGVfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworZW51bSBHcmFwaER1bXBNb2RlIHsgRG9udER1bXBHcmFwaCwgRHVtcEdyYXBoIH07
CisKKyNpZiBERkdfRU5BQkxFKFZBTElEQVRJT04pCit2b2lkIHZhbGlkYXRlKEdyYXBoJiwgR3Jh
cGhEdW1wTW9kZSk7CisjZWxzZQoraW5saW5lIHZvaWQgdmFsaWRhdGUoR3JhcGgmLCBHcmFwaER1
bXBNb2RlKSB7IH0KKyNlbmRpZgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1BoYXNlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewogI2lmIERGR19FTkFCTEUo
REVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygiUHJlc2VydmVkIHZhcnM6ICIpOwpAQCAt
NTQsNiArNTQsMTAgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIGZvciAoc2l6ZV90IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJ
bmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXhJbkJs
b2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsK
ICAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5C
bG9jayk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtNjYs
MjIgKzcwLDIxIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFub2Rl
LnNob3VsZEdlbmVyYXRlKCkgfHwgbm9kZS5vcCgpID09IFBoaSB8fCBub2RlLm9wKCkgPT0gRmx1
c2gpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgLy8gR2V0TG9jYWwgbm9kZXMgYXJlIGVmZmVjdGl2ZWx5IHBoaSBub2RlcyBpbiB0
aGUgZ3JhcGgsIHJlZmVyZW5jaW5nCi0gICAgICAgICAgICAgICAgLy8gcmVzdWx0cyBmcm9tIHBy
aW9yIGJsb2Nrcy4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpICE9IEdldExvY2FsKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBjYWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1
cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCi0gICAgICAgICAgICAgICAgICAgIC8vIGFsbG9j
YXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKLSAg
ICAgICAgICAgICAgICAgICAgLy8gb3JkZXIgc28gdGhhdCBpZiBhIGNoaWxkIGlzIG9uIGl0cyBs
YXN0IHVzZSwgYW5kIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlz
IGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGls
ZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsr
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMigpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQzKCkpOwotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KG5vZGUub3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2dy
YXBoW25vZGUuY2hpbGQxKCldLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUn
cyBjaGlsZHJlbiwgdGhlbgorICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJl
Z2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKKyAgICAgICAgICAgICAgICAv
LyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQorICAg
ICAgICAgICAgICAgIC8vIFZpcnR1YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUg
cmV1c2VkIGZvciBub2RlLgorICAgICAgICAgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4
ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2Rl
Lm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCisgICAgICAgICAgICAgICAgICAgICAgICBzY29y
ZUJvYXJkLnVzZUlmSGFzUmVzdWx0KG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0p
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9h
cmQudXNlSWZIYXNSZXN1bHQobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIHNj
b3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobm9kZS5jaGlsZDMoKSk7CiAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmhhc1Jlc3VsdCgpKQpAQCAtMTE0
LDEyICsxMTcsMTQgQEAgcHVibGljOgogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAg
ICAgICAgZGF0YUxvZygiTnVtIGNhbGxlZSByZWdpc3RlcnM6ICV1XG4iLCBjYWxsZWVSZWdpc3Rl
cnMpOwogI2VuZGlmCisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9Owog
Ci12b2lkIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKEdyYXBoJiBncmFwaCkKK2Jv
b2wgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmIGdyYXBoKQogewotICAg
IHJ1blBoYXNlPFZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZT4oZ3JhcGgpOworICAgIHJl
dHVybiBydW5QaGFzZTxWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2U+KGdyYXBoKTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFz
ZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIGNsYXNzIEdyYXBoOwogLy8gZm9yIGxvb2stdXAgdGFibGVzIGZvciB0aGUgbGluZWFy
IHNjYW4gcmVnaXN0ZXIgYWxsb2NhdG9yIHRoYXQgdGhlIGJhY2tlbmQKIC8vIHVzZXMuCiAKLXZv
aWQgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmKTsKK2Jvb2wgcGVyZm9y
bVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1ODUs
NyArMjU4NSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAg
ICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGlu
dCBzcmMgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9v
bGVhbighY2FsbEZyYW1lLT5yKHNyYykuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKTsK
KyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oIWNhbGxGcmFtZS0+cihzcmMpLmpz
VmFsdWUoKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAg
ICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZXN1bHQ7CiAKQEAgLTM5MDUsNyAr
MzkwNSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICAqLwogICAgICAgICBpbnQg
Y29uZCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCB0YXJnZXQgPSB2UENbMl0udS5v
cGVyYW5kOwotICAgICAgICBpZiAoY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xl
YW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAoY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUo
KS50b0Jvb2xlYW4oKSkgewogICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKICAgICAgICAgICAg
IENIRUNLX0ZPUl9USU1FT1VUKCk7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBA
IC0zOTI1LDcgKzM5MjUsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgKi8KICAg
ICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBpbnQgdGFyZ2V0ID0g
dlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1
ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7CisgICAgICAgIGlmICghY2FsbEZyYW1lLT5yKGNv
bmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkgewogICAgICAgICAgICAgdlBDICs9IHRhcmdldDsK
ICAgICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7CiAgICAgICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7CkBAIC0zOTQyLDcgKzM5NDIsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAg
ICAgICAqLwogICAgICAgICBpbnQgY29uZCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGlu
dCB0YXJnZXQgPSB2UENbMl0udS5vcGVyYW5kOwotICAgICAgICBpZiAoY2FsbEZyYW1lLT5yKGNv
bmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAoY2FsbEZy
YW1lLT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkgewogICAgICAgICAgICAgdlBDICs9
IHRhcmdldDsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICAgICAgfQpAQCAt
Mzk1OCw3ICszOTU4LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgKi8KICAgICAg
ICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBpbnQgdGFyZ2V0ID0gdlBD
WzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgp
LnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7CisgICAgICAgIGlmICghY2FsbEZyYW1lLT5yKGNvbmQp
LmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkgewogICAgICAgICAgICAgdlBDICs9IHRhcmdldDsKICAg
ICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODU1LDkg
KzI4NTUsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAg
ICBKU1ZhbHVlIHNyYyA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAKLSAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotCi0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc0Jvb2xlYW4oIXNyYy50b0Jvb2xlYW4oY2FsbEZyYW1lKSk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc0Jvb2xlYW4oIXNyYy50b0Jvb2xlYW4oKSk7CiAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9
CkBAIC0yODY4LDkgKzI4NjYsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihpbnQsIG9wX2p0cnVl
KQogCiAgICAgSlNWYWx1ZSBzcmMxID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKIAot
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0KLSAgICBi
b29sIHJlc3VsdCA9IHNyYzEudG9Cb29sZWFuKGNhbGxGcmFtZSk7CisgICAgYm9vbCByZXN1bHQg
PSBzcmMxLnRvQm9vbGVhbigpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA3
LDcgKzUwNyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfcmVnZXgKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9ub3QpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsK
LSAgICBMTElOVF9SRVRVUk4oanNCb29sZWFuKCFMTElOVF9PUF9DKDIpLmpzVmFsdWUoKS50b0Jv
b2xlYW4oZXhlYykpKTsKKyAgICBMTElOVF9SRVRVUk4oanNCb29sZWFuKCFMTElOVF9PUF9DKDIp
LmpzVmFsdWUoKS50b0Jvb2xlYW4oKSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfZXEpCkBAIC0xMTEwLDEzICsxMTEwLDEzIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9qbXBfc2NvcGUKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qdHJ1ZSkK
IHsKICAgICBMTElOVF9CRUdJTigpOwotICAgIExMSU5UX0JSQU5DSChvcF9qdHJ1ZSwgTExJTlRf
T1BfQygxKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBMTElOVF9CUkFOQ0gob3Bf
anRydWUsIExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvQm9vbGVhbigpKTsKIH0KIAogTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pmYWxzZSkKIHsKICAgICBMTElOVF9CRUdJTigpOwot
ICAgIExMSU5UX0JSQU5DSChvcF9qZmFsc2UsICFMTElOVF9PUF9DKDEpLmpzVmFsdWUoKS50b0Jv
b2xlYW4oZXhlYykpOworICAgIExMSU5UX0JSQU5DSChvcF9qZmFsc2UsICFMTElOVF9PUF9DKDEp
LmpzVmFsdWUoKS50b0Jvb2xlYW4oKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9qbGVzcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk3LDcg
Kzc5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAg
ICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAg
ICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbihleGVjKSkKKyAgICAgICAgICAgIGlmIChyZXN1bHQu
dG9Cb29sZWFuKCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVjdEluZGV4
KGV4ZWMsIGZpbHRlckluZGV4KyssIHYpOwogICAgICAgICB9CiAgICAgICAgIGlmIChrID09IGxl
bmd0aCkKQEAgLTgxOCw3ICs4MTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHRoaXNPYmopOwogCiAgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpOwotICAgICAgICBpZiAocmVzdWx0LnRvQm9v
bGVhbihleGVjKSkKKyAgICAgICAgaWYgKHJlc3VsdC50b0Jvb2xlYW4oKSkKICAgICAgICAgICAg
IHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBmaWx0ZXJJbmRleCsrLCB2KTsKICAg
ICB9CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHRBcnJheSk7CkBAIC05MTcsNyAr
OTE3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAg
ICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRv
Qm9vbGVhbihjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkpCisgICAgICAgICAgICBpZiAo
IXJlc3VsdC50b0Jvb2xlYW4oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtOTM0LDcgKzkzNCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAotICAgICAgICBib29sIHByZWRpY2F0ZVJlc3VsdCA9IGNhbGwo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1l
bnRzKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJvb2wgcHJlZGljYXRlUmVzdWx0ID0gY2Fs
bChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1
bWVudHMpLnRvQm9vbGVhbigpOwogICAgICAgICBpZiAoIXByZWRpY2F0ZVJlc3VsdCkgewogICAg
ICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTAyNSw3ICsxMDI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7
CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKLSAgICAgICAgICAgIGlm
IChyZXN1bHQudG9Cb29sZWFuKGNhY2hlZENhbGwubmV3Q2FsbEZyYW1lKGV4ZWMpKSkKKyAgICAg
ICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFuKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA0
Miw3ICsxMDQyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgICAgIGJvb2wgcHJlZGljYXRlUmVz
dWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRoaXMs
IGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9vbCBwcmVkaWNhdGVS
ZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhp
cywgZWFjaEFyZ3VtZW50cykudG9Cb29sZWFuKCk7CiAgICAgICAgIGlmIChwcmVkaWNhdGVSZXN1
bHQpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbih0cnVlKTsKICAgICAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw3ICs0OSw3IEBAIHZvaWQgQm9vbGVhbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbigK
IEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVh
dGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkp
LT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBvYmotPnNl
dEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc0Jvb2xlYW4oYXJncy5hdCgwKS50
b0Jvb2xlYW4oZXhlYykpKTsKKyAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBqc0Jvb2xlYW4oYXJncy5hdCgwKS50b0Jvb2xlYW4oKSkpOwogICAgIHJldHVybiBv
Ymo7CiB9CiAKQEAgLTY4LDcgKzY4LDcgQEAgQ29uc3RydWN0VHlwZSBCb29sZWFuQ29uc3RydWN0
b3I6OmdldENvbgogLy8gRUNNQSAxNS42LjEKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGxCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDApLnRvQm9vbGVh
bihleGVjKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGV4ZWMtPmFy
Z3VtZW50KDApLnRvQm9vbGVhbigpKSk7CiB9CiAKIENhbGxUeXBlIEJvb2xlYW5Db25zdHJ1Y3Rv
cjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3
ICs5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBCYXNpYyBjb252ZXJzaW9ucy4K
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUq
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQcmltaXRp
dmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25zdDsKLSAg
ICAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIGJvb2wgdG9C
b29sZWFuKCkgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJl
cihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3Qq
IHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDExNDU1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIyLDExICs0MjIsNiBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqCiAgICAgICAgIGdldENsYXNzUHJvcGVydHlOYW1lcyhleGVjLCBvYmplY3Qt
PmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotYm9vbCBKU09iamVjdDo6
dG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGRv
dWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEpT
VmFsdWUgcHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywgUHJlZmVyTnVtYmVyKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTE0NTU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM4LDcgKzEzOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgICAgIEpT
VmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5v
UHJlZmVyZW5jZSkgY29uc3Q7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgdG9Cb29s
ZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihF
eGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTU3RyaW5nKiB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlz
aW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw3IEBAIGJvb2wgSlNTdHJpbmc6OmdldFBy
aW1pdGl2ZU51bWJlcihFeGVjU3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNTdHJp
bmc6OnRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdAorYm9vbCBKU1N0cmluZzo6dG9Cb29sZWFu
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9sZW5ndGg7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNSw3
ICsyMTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyBy
ZXR1cm4gbV9sZW5ndGg7IH0KIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQcmltaXRp
dmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25zdDsKICAg
ICAgICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29u
c3Q7CiAgICAgICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKQEAgLTQzNSwy
MyArNDM1LDIzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIGJvb2wgaXNKU1N0cmlu
ZyhKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYgdi5hc0NlbGwoKS0+Y2xhc3NJbmZv
KCkgPT0gJkpTU3RyaW5nOjpzX2luZm87IH0KIAotICAgIGlubGluZSBib29sIEpTQ2VsbDo6dG9C
b29sZWFuKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICBpbmxpbmUgYm9vbCBKU0NlbGw6OnRv
Qm9vbGVhbigpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNTdHJpbmcoKSkgCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih0aGlzKS0+dG9Cb29sZWFu
KGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4o
dGhpcyktPnRvQm9vbGVhbigpOwogICAgICAgICByZXR1cm4gIXN0cnVjdHVyZSgpLT50eXBlSW5m
bygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICAvLyAtLS0gSlNWYWx1
ZSBpbmxpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAKLSAgICBpbmxpbmUg
Ym9vbCBKU1ZhbHVlOjp0b0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIGlubGlu
ZSBib29sIEpTVmFsdWU6OnRvQm9vbGVhbigpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNJ
bnQzMigpKQogICAgICAgICAgICAgcmV0dXJuIGFzSW50MzIoKTsKICAgICAgICAgaWYgKGlzRG91
YmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gYXNEb3VibGUoKSA+IDAuMCB8fCBhc0RvdWJsZSgp
IDwgMC4wOyAvLyBmYWxzZSBmb3IgTmFOCiAgICAgICAgIGlmIChpc0NlbGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiBhc0NlbGwoKS0+dG9Cb29sZWFuKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJu
IGFzQ2VsbCgpLT50b0Jvb2xlYW4oKTsKICAgICAgICAgcmV0dXJuIGlzVHJ1ZSgpOyAvLyBmYWxz
ZSwgbnVsbCwgYW5kIHVuZGVmaW5lZCBhbGwgY29udmVydCB0byBmYWxzZS4KICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHJldmlzaW9uIDExNDU1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVl
IHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZl
cmVuY2UpIGNvbnN0OwogICAgICAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUq
LCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpOwogCi0gICAgICAgIGJvb2wgdG9Cb29sZWFuKEV4
ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBib29sIHRvQm9vbGVhbigpIGNvbnN0OwogCiAgICAg
ICAgIC8vIHRvTnVtYmVyIGNvbnZlcnNpb24gaXMgZXhwZWN0ZWQgdG8gYmUgc2lkZSBlZmZlY3Qg
ZnJlZSBpZiBhbiBleGNlcHRpb24gaGFzCiAgICAgICAgIC8vIGJlZW4gc2V0IGluIHRoZSBFeGVj
U3RhdGUgYWxyZWFkeS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVj
dENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjE0LDE0ICsyMTQsMTQgQEAgc3RhdGljIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3Io
RXhlY1N0YQogCiAgICAgUHJvcGVydHlTbG90IGVudW1lcmFibGVTbG90KGRlc2NyaXB0aW9uKTsK
ICAgICBpZiAoZGVzY3JpcHRpb24tPmdldFByb3BlcnR5U2xvdChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuZW51bWVyYWJsZSwgZW51bWVyYWJsZVNsb3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0
RW51bWVyYWJsZShlbnVtZXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuZW51bWVyYWJsZSkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgZGVzYy5zZXRFbnVt
ZXJhYmxlKGVudW1lcmFibGVTbG90LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5lbnVtZXJhYmxlKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBQcm9wZXJ0eVNs
b3QgY29uZmlndXJhYmxlU2xvdChkZXNjcmlwdGlvbik7CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZpZ3VyYWJsZSwg
Y29uZmlndXJhYmxlU2xvdCkpIHsKLSAgICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUoY29uZmln
dXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uZmlndXJh
YmxlKS50b0Jvb2xlYW4oZXhlYykpOworICAgICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShjb25m
aWd1cmFibGVTbG90LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25maWd1
cmFibGUpLnRvQm9vbGVhbigpKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTIzNiw3ICsyMzYsNyBAQCBzdGF0
aWMgYm9vbCB0b1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhCiAKICAgICBQcm9wZXJ0eVNsb3Qg
d3JpdGFibGVTbG90KGRlc2NyaXB0aW9uKTsKICAgICBpZiAoZGVzY3JpcHRpb24tPmdldFByb3Bl
cnR5U2xvdChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkud3JpdGFibGUsIHdyaXRhYmxlU2xv
dCkpIHsKLSAgICAgICAgZGVzYy5zZXRXcml0YWJsZSh3cml0YWJsZVNsb3QuZ2V0VmFsdWUoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKS50b0Jvb2xlYW4oZXhlYykpOworICAg
ICAgICBkZXNjLnNldFdyaXRhYmxlKHdyaXRhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkud3JpdGFibGUpLnRvQm9vbGVhbigpKTsKICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDkgKzI0OSw5IEBA
IHZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUKICAgICBhc1JlZ0V4cENv
bnN0cnVjdG9yKGJhc2VPYmplY3QpLT5zZXRJbnB1dChleGVjLCB2YWx1ZS50b1N0cmluZyhleGVj
KSk7CiB9CiAKLXZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgc2V0UmVnRXhw
Q29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgYXNSZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0
TXVsdGlsaW5lKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgYXNSZWdFeHBDb25zdHJ1Y3Rv
cihiYXNlT2JqZWN0KS0+c2V0TXVsdGlsaW5lKHZhbHVlLnRvQm9vbGVhbigpKTsKIH0KIAogLy8g
RUNNQSAxNS4xMC40CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
NywxMSArMTQ3LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8K
IAogICAgIGNoYXIgcG9zdGZpeFs1XSA9IHsgJy8nLCAwLCAwLCAwLCAwIH07CiAgICAgaW50IGlu
ZGV4ID0gMTsKLSAgICBpZiAodGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5nbG9iYWwpLnRvQm9vbGVhbihleGVjKSkKKyAgICBpZiAodGhpc09iamVjdC0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nbG9iYWwpLnRvQm9vbGVhbigpKQogICAgICAgICBw
b3N0Zml4W2luZGV4KytdID0gJ2cnOwotICAgIGlmICh0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmlnbm9yZUNhc2UpLnRvQm9vbGVhbihleGVjKSkKKyAgICBpZiAo
dGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pZ25vcmVDYXNlKS50
b0Jvb2xlYW4oKSkKICAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICdpJzsKLSAgICBpZiAodGhp
c09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tdWx0aWxpbmUpLnRvQm9v
bGVhbihleGVjKSkKKyAgICBpZiAodGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5tdWx0aWxpbmUpLnRvQm9vbGVhbigpKQogICAgICAgICBwb3N0Zml4W2luZGV4XSA9
ICdtJzsKICAgICBVU3RyaW5nIHNvdXJjZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuc291cmNlKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAg
Ly8gSWYgc291cmNlIGlzIGVtcHR5LCB1c2UgIi8oPzopLyIgdG8gYXZvaWQgY29sbGlkaW5nIHdp
dGggY29tbWVudCBzeW50YXgK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138934</attachid>
            <date>2012-04-25 22:17:28 -0700</date>
            <delta_ts>2012-04-26 19:37:49 -0700</delta_ts>
            <desc>almost there</desc>
            <filename>cfgsimplify_patch_9.diff</filename>
            <type>text/plain</type>
            <size>133228</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE1MjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2MSBA
QAorMjAxMi0wNC0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTUzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNo
YW5nZSBnaXZlcyB0aGUgREZHIHRoZSBhYmlsaXR5IHRvIHNpbXBsaWZ5IHRoZSBjb250cm9sIGZs
b3cgZ3JhcGgKKyAgICAgICAgYXMgcGFydCBvZiBhbiBvcHRpbWl6YXRpb24gZml4cG9pbnQgdGhh
dCBpbmNsdWRlcyBDU0UsIENGQSwgYW5kIGNvbnN0YW50CisgICAgICAgIGZvbGRpbmcuIFRoaXMg
cmVxdWlyZWQgYSBudW1iZXIgb2YgaW50ZXJlc3RpbmcgY2hhbmdlcyBpbmNsdWRpbmc6CisgICAg
ICAgIAorICAgICAgICAtIFNvbGlkaWZ5aW5nIHRoZSBzZXQgb2YgaW52YXJpYW50cyB0aGF0IHRo
ZSBERkcgb2JleXMuIEZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgICBoZWFkIGFuZCB0YWlsIG9m
IGVhY2ggYmFzaWMgYmxvY2sgbXVzdCBhZHZlcnRpc2UgdGhlIHNldCBvZiBsaXZlIGxvY2Fscwor
ICAgICAgICAgIGFuZCB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsb2NhbHMsIHJlc3BlY3RpdmVseS4g
SXQgbXVzdCBkbyBzbyBieQorICAgICAgICAgIHJlZmVycmluZyB0byB0aGUgZmlyc3QgYWNjZXNz
IHRvIHRoZSBsb2NhbCBpbiB0aGUgYmxvY2sgKGZvciBoZWFkKSBhbmQKKyAgICAgICAgICB0aGUg
bGFzdCBvbmUgKGZvciB0YWlsKS4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBzdGFydCBvZiBh
CisgICAgICAgICAgdmFsaWRhdGlvbiBzdGVwIHRoYXQgbWF5IGJlIHR1cm5lZCBvbiBldmVuIHdp
dGggYXNzZXJ0cyBkaXNhYmxlZC4gVG8KKyAgICAgICAgICBlbnN1cmUgdGhhdCB0aGVzZSBpbnZh
cmlhbnRzIGFyZSBwcmVzZXJ2ZWQsIEkgaGFkIHRvIHJlbW92ZSB0aGUKKyAgICAgICAgICByZWR1
bmRhbnQgcGhpIGVsaW1pbmF0aW9uIHBoYXNlLiBGb3Igbm93IEkganVzdCByZW1vdmUgdGhlIGNh
bGwsIGJ1dCBpbgorICAgICAgICAgIHRoZSBmdXR1cmUgd2Ugd2lsbCBwcm9iYWJseSByZW1vdmUg
aXQgZW50aXJlbHkgdW5sZXNzIHdlIGZpbmQgYSB1c2UgZm9yCisgICAgICAgICAgaXQuCisgICAg
ICAgIAorICAgICAgICAtIE1ha2luZyBpdCBlYXNpZXIgdG8gZ2V0IHRoZSBib29sZWFuIHZlcnNp
b24gb2YgYSBKU1ZhbHVlLiBUaGlzIGlzIGEKKyAgICAgICAgICBwdXJlIG9wZXJhdGlvbiwgYnV0
IHdlIHByZXZpb3VzbHkgZGlkIG5vdCB0cmVhdCBpdCBhcyBzdWNoLgorICAgICAgICAKKyAgICAg
ICAgLSBGaXhpbmcgdGhlIG1lcmdpbmcgYW5kIGZpbHRlcmluZyBvZiBBYnN0cmFjdFZhbHVlcyB0
aGF0IGNvcnJlc3BvbmQgdG8KKyAgICAgICAgICBjb25jcmV0ZSBKU1ZhbHVlcy4gVGhpcyB3YXMg
cHJldmlvdXNseSBicm9rZW4gYW5kIHdhcyBsaW1pdGluZyB0aGUKKyAgICAgICAgICBlZmZlY3Qg
b2YgcnVubmluZyBjb25zdGFudCBmb2xkaW5nLiBGaXhpbmcgdGhpcyBtZWFudCB0aGF0IEkgaGFk
IHRvCisgICAgICAgICAgY2hhbmdlIGhvdyBjb25zdGFudCBmb2xkaW5nIGVsaW1pbmF0ZXMgR2V0
TG9jYWwgbm9kZXMsIHNvIGFzIHRvIGVuc3VyZQorICAgICAgICAgIHRoYXQgdGhlIHJlc3VsdGlu
ZyBncmFwaCBzdGlsbCBvYmV5cyBERkcgcnVsZXMuCisgICAgICAgIAorICAgICAgICAtIEludHJv
ZHVjaW5nIHNpbXBsaWZpZWQgZ2V0dGVycyBmb3Igc29tZSBvZiB0aGUgdGhpbmdzIHRoYXQgREZH
IHBoYXNlcworICAgICAgICAgIHdhbnQgdG8ga25vdyBhYm91dCwgbGlrZSB0aGUgTnRoIGNoaWxk
IG9mIGEgbm9kZSAobm93IGp1c3QKKyAgICAgICAgICBncmFwaC5jaGlsZCguLi4pIGlmIHlvdSBk
b24ndCBjYXJlIGFib3V0IHBlcmZvcm1hbmNlIHRvbyBtdWNoKSBvcgorICAgICAgICAgIGdldHRp
bmcgc3VjY2Vzc29ycyBvZiBhIGJhc2ljIGJsb2NrLgorICAgICAgICAKKyAgICAgICAgVGhlIGN1
cnJlbnQgQ0ZHIHNpbXBsaWZpZXIgY2FuIGhhbmRsZSBhbG1vc3QgYWxsIG9mIHRoZSBjYXNlcyB0
aGF0IGl0CisgICAgICAgIG91Z2h0IHRvIGhhbmRsZTsgdGhlIG5vdGV3b3J0aHkgb25lIHRoYXQg
aXMgbm90IHlldCBoYW5kbGVkIGlzIHJlbW92aW5nCisgICAgICAgIGJhc2ljIGJsb2NrcyB0aGF0
IGp1c3QgaGF2ZSBqdW1wcy4gVG8gZG8gdGhpcyByaWdodCB3ZSBuZWVkIHRvIGJlIGFibGUKKyAg
ICAgICAgdG8gcmVtb3ZlIGp1bXAtb25seSBibG9ja3MgdGhhdCBhbHNvIHBlcmZvcm0ga2VlcC1h
bGl2ZSBvbiBzb21lIHZhbHVlcy4KKyAgICAgICAgVG8gbWFrZSB0aGlzIHdvcmssIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byBob2lzdCB0aGUga2VlcC1hbGl2ZSBpbnRvIChvcgorICAgICAgICBqdXN0
IGFib3ZlKSBhIEJyYW5jaC4gVGhpcyBpcyBub3QgZnVuZGFtZW50YWxseSBkaWZmaWN1bHQgYnV0
IEkgb3B0ZWQgdG8KKyAgICAgICAgbGV0IHRoaXMgcGF0Y2ggb21pdCB0aGlzIG9wdGltaXphdGlv
bi4gV2UgY2FuIGhhbmRsZSB0aGlzIGxhdGVyLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBh
IGJpZyB3aW4gb24gcHJvZ3JhbXMgdGhhdCBpbmNsdWRlIGlubGluZSBmdW5jdGlvbnMgdGhhdCBh
cmUKKyAgICAgICAgb2Z0ZW4gY2FsbGVkIHdpdGggY29uc3RhbnQgYXJndW1lbnRzLiBPZiBjb3Vy
c2UsIFN1blNwaWRlciwgVjgsIGFuZAorICAgICAgICBLcmFrZW4gZG9uJ3QgY291bnQuIFRob3Nl
IGJlbmNobWFya3MgYXJlIGNvbXBsZXRlbHkgbmV1dHJhbCB3aXRoIHRoaXMKKyAgICAgICAgY2hh
bmdlLgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNWYWx1ZVRv
Qm9vbGVhbik6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpkZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKiBieXRl
Y29kZS9PcGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZEZpcnN0
VGltZSk6CisgICAgICAgIChPcGVyYW5kcyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzQ2xl
YXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFs
dWU6OnZhbGlkYXRlSWdub3JpbmdWYWx1ZSk6CisgICAgICAgIChBYnN0cmFjdFZhbHVlKToKKyAg
ICAgICAgKiBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoSlNDOjpERkc6OkFkamFj
ZW5jeUxpc3Q6OmNoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGphY2VuY3lMaXN0OjpzZXRD
aGlsZCk6CisgICAgICAgIChBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNC
bG9jay5oOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKToKKyAg
ICAgICAgKEJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Om51bU5v
ZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpub2RlSW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmlzSW5QaGlzKToKKyAgICAgICAgKiBkZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoQnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAq
IGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnJ1bik6
CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAg
IChKU0M6OkRGRzo6cGVyZm9ybUNGQSk6CisgICAgICAgICogZGZnL0RGR0NGQVBoYXNlLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6Q0ZHU2ltcGxp
ZmljYXRpb25QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFz
ZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpraWxs
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpbmRPcGVyYW5kU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlv
blBoYXNlOjprZWVwT3BlcmFuZEFsaXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlm
aWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpD
RkdTaW1wbGlmaWNhdGlvblBoYXNlOjpqZXR0aXNvbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpyZW1vdmVQb3RlbnRpYWxs
eURlYWRQaGlSZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9u
UGhhc2U6OmZpeFRhaWxPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNh
dGlvblBoYXNlOjptZXJnZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNGR1Np
bXBsaWZpY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5o
OiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cnVuKToKKyAgICAgICAgKENTRVBoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6aW1wdXJlQ1NFKToKKyAgICAgICAgKEpTQzo6
REZHOjpDU0VQaGFzZTo6Z2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpDU0VQaGFzZTo6Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpE
Rkc6OkNTRVBoYXNlOjpjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChK
U0M6OkRGRzo6Q1NFUGhhc2U6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxv
YWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2Rl
Q1NFKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAg
ICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2Uu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAq
IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29u
c3RhbnRGb2xkaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNvbnN0
YW50Rm9sZGluZyk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdFZGdlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6RWRnZTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5oOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aGFuZGxlU3VjY2Vz
c29yKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRldGVybWlu
ZVJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnJlc2V0UmVhY2hhYmls
aXR5KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bnVtU3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1Y2Nlc3Nvcik6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1Y2Nlc3NvckZvckNvbmRpdGlvbik6CisgICAg
ICAgIChHcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzUHJlZGljdGVkTnVtZXJp
Y2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YnlWYWxJc1B1cmUpOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjpjbG9iYmVyc1dvcmxkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjaGlsZCk6CisgICAg
ICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9D
b25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bnVtU3VjY2Vzc29ycyk6CisgICAg
ICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzdWNjZXNzb3IpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OnN1Y2Nlc3NvckZvckNvbmRpdGlvbik6CisgICAgICAgICogZGZn
L0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRy
eS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBk
ZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpQaGFzZTo6YmVnaW5QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6UGhh
c2U6OmVuZFBoYXNlKToKKyAgICAgICAgKiBkZmcvREZHUGhhc2UuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpydW5QaGFzZSk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6
cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKToK
KyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaDoKKyAgICAgICAg
KERGRyk6CisgICAgICAgICogZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlJlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2U6OnJ1bik6
CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oOgorICAgICAgICAo
REZHKToKKyAgICAgICAgKiBkZmcvREZHU2NvcmVCb2FyZC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNjb3JlQm9hcmQ6OnVzZSk6CisgICAgICAgIChTY29yZUJvYXJkKToKKyAgICAgICAgKEpTQzo6
REZHOjpTY29yZUJvYXJkOjp1c2VJZkhhc1Jlc3VsdCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNyZWF0ZU9TUkVudHJpZXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpsaW5rT1NSRW50cmllcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVTdHJpY3RFcUZvckNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpuZXh0QmxvY2spOgorICAg
ICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpqdW1wKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5j
aCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRC
cmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5j
aCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRC
cmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChWYWxpZGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OlZhbGlkYXRlKToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6dmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhbGlkYXRlOjpyZXBvcnRWYWxpZGF0aW9uQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRG
Rzo6VmFsaWRhdGU6OmR1bXBEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6ZHVt
cEdyYXBoSWZBcHByb3ByaWF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6dmFsaWRhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChKU0M6OkRGRzo6dmFsaWRhdGUpOgorICAgICAgICAqIGRmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZpcnR1YWxSZWdpc3RlckFs
bG9jYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvbik6CisgICAgICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgor
ICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6
CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJf
RlVOQ1RJT04pOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAg
KEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNGaWx0ZXIpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0V2ZXJ5KToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNTb21lKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpjYWxsQm9v
bGVhbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAo
SlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJp
bmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dG9Cb29sZWFuKToKKyAgICAgICAgKiBy
dW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU1N0cmluZyk6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6dG9Cb29sZWFuKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9Cb29sZWFuKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuaDoKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6dG9Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpzZXRSZWdF
eHBDb25zdHJ1Y3Rvck11bHRpbGluZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNUb1N0cmluZyk6CisKIDIwMTIt
MDQtMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgc2hv
dWxkIGhhdmUgY29uc3RhbnQgcHJvcGFnYXRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNWYWx1ZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZhbHVlUmVmLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3
IEBAIGJvb2wgSlNWYWx1ZVRvQm9vbGVhbihKU0NvbnRleHRSZWYgY3R4LCAKICAgICBBUElFbnRy
eVNoaW0gZW50cnlTaGltKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVj
LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIGpzVmFsdWUudG9Cb29sZWFuKGV4ZWMpOworICAgIHJldHVy
biBqc1ZhbHVlLnRvQm9vbGVhbigpOwogfQogCiBkb3VibGUgSlNWYWx1ZVRvTnVtYmVyKEpTQ29u
dGV4dFJlZiBjdHgsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsMTAgQEAKIAkJMEYyQzU1NzAxNDczOEYzNTAw
MTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9j
a3MuY3BwICovOyB9OwogCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcCAqLzsgfTsKIAkJMEYzQjNBMUIxNTNFNjhGNDAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjNCM0ExODE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjNCM0Ey
NzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0EyNDE1NDRDOTkx
MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi87IH07CisJCTBGM0Iz
QTI4MTU0NEM5OTcwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0EyNTE1NDRDOTkx
MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGM0IzQTJCMTU0NzUwMDAwMDNFRDBG
RiAvKiBERkdWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICov
OyB9OworCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTJBMTU0NzRGRjQw
MDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292
ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQy
NkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4
RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQy
NkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERh
dGFGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtNzY4LDYgKzc3MiwxMCBAQAogCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZH
Q29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdDb2RlQmxv
Y2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE3MTUzRTY4RUYwMDNF
RDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjNCM0ExODE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjNCM0EyNDE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzQjNBMjUxNTQ0Qzk5
MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhbGlkYXRlLmNwcDsgcGF0aCA9IGRmZy9E
RkdWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGM0IzQTJBMTU0
NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdWYWxpZGF0ZS5oOyBwYXRoID0gZGZnL0RGR1ZhbGlkYXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJl
Y292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3Zlcnku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhG
IC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
aXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNEEx
NDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA0
NSw2ICsyMDUzLDggQEAKIAkJCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZHQ0NhbGxI
ZWxwZXJzLmggKi8sCiAJCQkJMEZGRkM5NEIxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NGQVBoYXNl
LmNwcCAqLywKIAkJCQkwRkZGQzk0QzE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuaCAq
LywKKwkJCQkwRjNCM0EyNDE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25Q
aGFzZS5jcHAgKi8sCisJCQkJMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkZGQzk0RDE0RUY5MDk1MDBDNzI1MzIgLyogREZH
Q1NFUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQ
aGFzZS5oICovLAogCQkJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRp
ZXMuY3BwICovLApAQCAtMjEwMSw2ICsyMTExLDggQEAKIAkJCQk4Njg4MEY0QzE0MzUzQjIxMDBC
MDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgKi8sCiAJCQkJMEZDMDk3OUYxNDZCMjhD
NzAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi8sCiAJCQkJMEZDMDk3QTAxNDZCMjhDNzAwQ0Yy
NDQyIC8qIERGR1RodW5rcy5oICovLAorCQkJCTBGM0IzQTI5MTU0NzRGRjQwMDNFRDBGRiAvKiBE
RkdWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1Zh
bGlkYXRlLmggKi8sCiAJCQkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YS5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0MTRFRjkwOTUw
MEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywKQEAgLTI1
ODMsNiArMjU5NSw4IEBACiAJCQkJMEYzQjNBMUIxNTNFNjhGNDAwM0VEMEZGIC8qIERGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NzE1MzRDQkI5MDAw
Rjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUz
QTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZG
IC8qIERGR1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTMxNDcsNiArMzE2MSw4IEBACiAJ
CQkJODY0MkM1MTIxNTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NjNDNkQ5QzE1MjExMTFBMDA1ODVFNEUgLyogWWFyckNhbm9uaWNh
bGl6ZVVDUzIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMUExNTNFNjhGMjAwM0VEMEZG
IC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGM0Iz
QTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGM0IzQTJCMTU0NzUwMDAwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDcgKzI1OSwxNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgREZHOjpPU1JFbnRyeURhdGEqIGRmZ09TUkVudHJ5RGF0
YSh1bnNpZ25lZCBpKSB7IHJldHVybiAmbV9kZmdEYXRhLT5vc3JFbnRyeVtpXTsgfQogICAgICAg
ICBERkc6Ok9TUkVudHJ5RGF0YSogZGZnT1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleCh1bnNp
Z25lZCBieXRlY29kZUluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYmluYXJ5
U2VhcmNoPERGRzo6T1NSRW50cnlEYXRhLCB1bnNpZ25lZCwgREZHOjpnZXRPU1JFbnRyeURhdGFC
eXRlY29kZUluZGV4PihtX2RmZ0RhdGEtPm9zckVudHJ5LmJlZ2luKCksIG1fZGZnRGF0YS0+b3Ny
RW50cnkuc2l6ZSgpLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIGlmICghbV9kZmdEYXRh
KQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgaWYgKG1fZGZnRGF0YS0+
b3NyRW50cnkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgREZHOjpPU1JFbnRyeURhdGEqIHJlc3VsdCA9IGJpbmFyeVNlYXJjaDwKKyAgICAgICAgICAg
ICAgICBERkc6Ok9TUkVudHJ5RGF0YSwgdW5zaWduZWQsIERGRzo6Z2V0T1NSRW50cnlEYXRhQnl0
ZWNvZGVJbmRleD4oCisgICAgICAgICAgICAgICAgICAgIG1fZGZnRGF0YS0+b3NyRW50cnkuYmVn
aW4oKSwgbV9kZmdEYXRhLT5vc3JFbnRyeS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgIGJ5
dGVjb2RlSW5kZXgsIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkpOworICAgICAgICAg
ICAgaWYgKHJlc3VsdC0+bV9ieXRlY29kZUluZGV4ICE9IGJ5dGVjb2RlSW5kZXgpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoY29uc3QgREZHOjpPU1JFeGl0
JiBvc3JFeGl0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgc2V0TG9jYWwob3BlcmFuZCwgdmFsdWUpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNl
dE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBzZXRB
cmd1bWVudEZpcnN0VGltZShvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSwgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzZXRMb2NhbEZp
cnN0VGltZShvcGVyYW5kLCB2YWx1ZSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY2xlYXIoKQog
ICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7
ICsraSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTksNiArOTksOCBAQCB2b2lkIEFi
c3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAgICAgUFJPRklMRShGTEFHX0ZPUl9C
TE9DS19JTklUSUFMSVpBVElPTik7CiAgICAgQmFzaWNCbG9jayogcm9vdCA9IGdyYXBoLm1fYmxv
Y2tzWzBdLmdldCgpOwogICAgIHJvb3QtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOworICAgIHJv
b3QtPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKKyAgICByb290LT5jZmFGb3VuZENvbnN0YW50cyA9
IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51
bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICBOb2RlJiBub2RlID0gZ3JhcGhbcm9v
dC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpXTsKICAgICAgICAgQVNTRVJUKG5vZGUub3Ao
KSA9PSBTZXRBcmd1bWVudCk7CkBAIC0xNDMsMTEgKzE0NSwzMyBAQCB2b2lkIEFic3RyYWN0U3Rh
dGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQu
YXJndW1lbnQoaSkuc2V0KFByZWRpY3RGbG9hdDY0QXJyYXkpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOworICAgICAg
ICAKKyAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAgICAg
fQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCk7ICsraSkgewotICAgICAgICBpZiAoIWdyYXBoLmxvY2FsSXNDYXB0dXJlZChpKSkK
KyAgICAgICAgaWYgKGdyYXBoLmxvY2FsSXNDYXB0dXJlZChpKSkKKyAgICAgICAgICAgIHJvb3Qt
PnZhbHVlc0F0SGVhZC5sb2NhbChpKS5tYWtlVG9wKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICByb290LT52
YWx1ZXNBdFRhaWwubG9jYWwoaSkuY2xlYXIoKTsKKyAgICB9CisgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAxIDsgYmxvY2tJbmRleCA8IGdyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsKKyAg
ICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgYmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKKyAgICAgICAgYmxvY2stPmNm
YUhhc1Zpc2l0ZWQgPSBmYWxzZTsKKyAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0g
ZmFsc2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0SGVh
ZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNB
dEhlYWQuYXJndW1lbnQoaSkuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRh
aWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7Cisg
ICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgICAg
ICAgICBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgICAgIH0KICAg
ICB9CiB9CiAKQEAgLTUyNiw4ICs1NTAsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0SW50MzIpOwogICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RO
dW1iZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRl
eEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFu
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI4Niw3ICsxMzA4LDkgQEAgaW5saW5lIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgICAgICAvLyBUaGUgYmxvY2sgdHJh
bnNmZXJzIHRoZSB2YWx1ZSBmcm9tIGhlYWQgdG8gdGFpbC4KICAgICAgICAgc291cmNlID0gaW5W
YXJpYWJsZTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgIGRhdGFMb2coIiAgICAgICAgICBUcmFuc2ZlcmluZyBmcm9tIGhlYWQgdG8gdGFpbC5cbiIp
OworICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgVHJhbnNmZXJpbmcgIik7CisgICAgICAgIHNv
dXJjZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIiBmcm9tIGhlYWQg
dG8gdGFpbC5cbiIpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0x
Mjk0LDcgKzEzMTgsOSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRU
CiAgICAgICAgIC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwg
c3BlY3VsYXRpb25zLgogICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGVJbmRleCk7CiAjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCIg
ICAgICAgICAgUmVmaW5pbmcuXG4iKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICAgIFJlZmlu
aW5nIHRvICIpOworICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAgICAg
ICBkYXRhTG9nKCJcbiIpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBA
IC0xMzA2LDcgKzEzMzIsOSBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRl
QXRUCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICBkYXRhTG9nKCIgICAgICAgICAgU2V0dGluZy5cbiIpOworICAgICAgICBkYXRhTG9nKCIgICAg
ICAgICAgU2V0dGluZyB0byAiKTsKKyAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgp
KTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKICNlbmRpZgogICAgICAgICBicmVhazsKICAgICAg
ICAgCkBAIC0xMzgyLDEyICsxNDEwLDI1IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1l
cmdlVG9TdWNjZXMKICAgICBBU1NFUlQodGVybWluYWwuaXNUZXJtaW5hbCgpKTsKICAgICAKICAg
ICBzd2l0Y2ggKHRlcm1pbmFsLm9wKCkpIHsKLSAgICBjYXNlIEp1bXA6CisgICAgY2FzZSBKdW1w
OiB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBk
YXRhTG9nKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwudGFrZW5C
bG9ja0luZGV4KCkpOworI2VuZGlmCiAgICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2NrLCBn
cmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgIH0K
ICAgICAgICAgCi0gICAgY2FzZSBCcmFuY2g6Ci0gICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Js
b2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpCi0g
ICAgICAgICAgICB8IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLm5v
dFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgY2FzZSBCcmFuY2g6IHsKKyAgICAgICAg
Ym9vbCBjaGFuZ2VkID0gZmFsc2U7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1Llxu
IiwgdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCkpOworI2VuZGlmCisgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwudGFrZW5CbG9ja0lu
ZGV4KCldLmdldCgpKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJt
aW5hbC5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CisjZW5kaWYKKyAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC5ub3RUYWtlbkJsb2NrSW5k
ZXgoKV0uZ2V0KCkpOworICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgUmV0dXJuOgogICAgIGNhc2UgVGhyb3c6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyMyw3ICszMjMsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIGJv
b2wgaXNDbGVhcigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV90eXBlID09IFByZWRp
Y3ROb25lICYmIG1fc3RydWN0dXJlLmlzQ2xlYXIoKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBt
X3R5cGUgPT0gUHJlZGljdE5vbmUgJiYgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpOworICAgICAgICBp
ZiAocmVzdWx0KQorICAgICAgICAgICAgQVNTRVJUKCFtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgdm9pZCBtYWtlVG9wKCkKQEAgLTQxNywxNSArNDIw
LDMwIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgICAgICYmIG1fc3RydWN0dXJl
ID09IG90aGVyLm1fc3RydWN0dXJlCiAgICAgICAgICAgICAmJiBtX3ZhbHVlID09IG90aGVyLm1f
dmFsdWU7CiAgICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBYnN0cmFjdFZhbHVlJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICB9CiAgICAgCiAgICAgYm9vbCBtZXJnZShjb25zdCBBYnN0cmFjdFZhbHVlJiBvdGhlcikKICAg
ICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBBYnN0cmFjdFZhbHVlIG9sZE1lID0g
KnRoaXM7CisjZW5kaWYKICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgcmVz
dWx0IHw9IG1lcmdlUHJlZGljdGlvbihtX3R5cGUsIG90aGVyLm1fdHlwZSk7Ci0gICAgICAgIHJl
c3VsdCB8PSBtX3N0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9zdHJ1Y3R1cmUpOwotICAgICAgICBp
ZiAobV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKQotICAgICAgICAgICAgbV92YWx1ZSA9IEpTVmFs
dWUoKTsKKyAgICAgICAgaWYgKGlzQ2xlYXIoKSkgeworICAgICAgICAgICAgKnRoaXMgPSBvdGhl
cjsKKyAgICAgICAgICAgIHJlc3VsdCA9ICFvdGhlci5pc0NsZWFyKCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1fdHlwZSwgb3RoZXIu
bV90eXBlKTsKKyAgICAgICAgICAgIHJlc3VsdCB8PSBtX3N0cnVjdHVyZS5hZGRBbGwob3RoZXIu
bV9zdHJ1Y3R1cmUpOworICAgICAgICAgICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkg
eworICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAhIW1fdmFsdWU7CisgICAgICAgICAgICAgICAg
bV92YWx1ZSA9IEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBj
aGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gKCp0aGlzICE9IG9s
ZE1lKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtNDUyLDcgKzQ3
MCw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgLy8gaW50byB0aGUgaW5mb3Jt
YXRpb24gZ2xlYW5lZCBmcm9tIHRoZSBTdHJ1Y3R1cmVTZXQuCiAgICAgICAgIG1fc3RydWN0dXJl
LmZpbHRlcihtX3R5cGUpOwogICAgICAgICAKLSAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiAhdmFs
aWRhdGUobV92YWx1ZSkpCisgICAgICAgIGlmICghIW1fdmFsdWUgJiYgIXZhbGlkYXRlSWdub3Jp
bmdWYWx1ZShtX3ZhbHVlKSkKICAgICAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgIAogICAgICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC00NzAsMTIgKzQ4OCwzNiBAQCBzdHJ1Y3QgQWJzdHJh
Y3RWYWx1ZSB7CiAgICAgICAgIC8vIHRoZSBuZXcgdHlwZSAoTm9uZSkgcmF0aGVyIHRoYW4gdGhl
IG9uZSBwYXNzZWQgKEFycmF5KS4KICAgICAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7
CiAKLSAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiAhdmFsaWRhdGUobV92YWx1ZSkpCisgICAgICAg
IGlmICghIW1fdmFsdWUgJiYgIXZhbGlkYXRlSWdub3JpbmdWYWx1ZShtX3ZhbHVlKSkKICAgICAg
ICAgICAgIGNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAg
ICAgfQogICAgIAorICAgIGJvb2wgdmFsaWRhdGVJZ25vcmluZ1ZhbHVlKEpTVmFsdWUgdmFsdWUp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKG1lcmdlUHJlZGljdGlvbnMobV90eXBlLCBwcmVk
aWN0aW9uRnJvbVZhbHVlKHZhbHVlKSkgIT0gbV90eXBlKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgQVNTRVJUKG1fdHlwZSAmIFByZWRpY3RFbXB0eSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlLmlzVG9wKCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghIXZhbHVl
ICYmIHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICBBU1NFUlQobV90eXBlICYgUHJlZGlj
dENlbGwpOworICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmNvbnRhaW5zKHZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKICAgICBib29sIHZhbGlkYXRlKEpTVmFsdWUgdmFsdWUpIGNv
bnN0CiAgICAgewogICAgICAgICBpZiAoaXNUb3AoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNyArNDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIEZpeGVkLAogICAgICAgICBWYXJpYWJs
ZQogICAgIH07Ci0KKyAgICAKKyAgICAjZGVmaW5lIEFkamFjZW5jeUxpc3RTaXplIDMKKyAgICAK
ICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAg
ICAgIDogbV9raW5kKGtpbmQpCkBAIC03NCwyMSArNzYsMjEgQEAgcHVibGljOgogICAgIAogICAg
IGNvbnN0IEVkZ2UmIGNoaWxkKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NF
UlQoaSA8IDMpOworICAgICAgICBBU1NFUlQoaSA8IEFkamFjZW5jeUxpc3RTaXplKTsKICAgICAg
ICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzW2ldOwog
ICAgIH0gICAgCiAgICAgCiAgICAgRWRnZSYgY2hpbGQodW5zaWduZWQgaSkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChpIDwgMyk7CisgICAgICAgIEFTU0VSVChpIDwgQWRqYWNlbmN5TGlzdFNpemUp
OwogICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgcmV0dXJuIG1fd29y
ZHNbaV07CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0Q2hpbGQodW5zaWduZWQgaSwgRWRnZSBu
b2RlVXNlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCAzMCk7CisgICAgICAgIEFTU0VSVChp
IDwgQWRqYWNlbmN5TGlzdFNpemUpOwogICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsK
ICAgICAgICAgbV93b3Jkc1tpXSA9IG5vZGVVc2U7CiAgICAgfQpAQCAtMTUwLDcgKzE1Miw3IEBA
IHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIEVkZ2UgbV93b3Jkc1szXTsKKyAg
ICBFZGdlIG1fd29yZHNbQWRqYWNlbmN5TGlzdFNpemVdOwogI2lmICFBU1NFUlRfRElTQUJMRUQK
ICAgICBLaW5kIG1fa2luZDsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxMCBA
QCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgewogICAgIH0K
ICAgICAKKyAgICB+QmFzaWNCbG9jaygpCisgICAgeworICAgIH0KKyAgICAKICAgICB2b2lkIGVu
c3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCiAgICAgewogICAgICAgICB2YXJpYWJs
ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CkBAIC02Myw2ICs2NywyMyBAQCBz
dHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlSW5kZXgsIDg+CiAgICAgICAgIHZhbHVlc0F0
SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKICAgICAgICAgdmFsdWVzQXRUYWlsLmVu
c3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwogICAgIH0KKyAgICAKKyAgICBzaXplX3QgbnVtTm9k
ZXMoKSBjb25zdCB7IHJldHVybiBwaGlzLnNpemUoKSArIHNpemUoKTsgfQorICAgIE5vZGVJbmRl
eCBub2RlSW5kZXgoc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaSA8IHBoaXMu
c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHBoaXNbaV07CisgICAgICAgIHJldHVybiBhdChp
IC0gcGhpcy5zaXplKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSW5QaGlzKE5vZGVJbmRl
eCBub2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChwaGlzW2ldID09IG5vZGVJbmRl
eCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkg
Zm9yIGJsb2NrIGxpbmtpbmcgYW5kIE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5IG1lYW5pbmdsZXNz
CiAgICAgLy8gZm9yIG90aGVyIHB1cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAvLyBQYXJzZSBhIHNpbmdsZSBiYXNpYyBibG9j
ayBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMuCiAgICAgYm9vbCBwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KTsKLSAgICAvLyBGaW5kIHJlYWNoYWJsZSBjb2RlIGFuZCBzZXR1cCBwcmVkZWNlc3Nv
ciBsaW5rcyBpbiB0aGUgZ3JhcGgncyBCYXNpY0Jsb2Nrcy4KLSAgICB2b2lkIGRldGVybWluZVJl
YWNoYWJpbGl0eSgpOwotICAgIC8vIEVucXVldWUgYSBibG9jayBvbnRvIHRoZSB3b3JrbGlzdCwg
aWYgbmVjZXNzYXJ5LgotICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4
LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3Nvcik7CiAgICAg
Ly8gTGluayBibG9jayBzdWNjZXNzb3JzLgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sq
LCBWZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxv
Y2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCbG9ja0lu
ZGV4PiYgcG9zc2libGVUYXJnZXRzKTsKQEAgLTI1ODUsNDEgKzI1ODEsNiBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpsaW5rQmxvY2tzKFZlY3RvcjxVCiAgICAgfQogfQogCi12b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3Qs
IEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKLXsKLSAg
ICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2dyYXBoLm1fYmxvY2tzW3N1Y2Nlc3NvckluZGV4
XS5nZXQoKTsKLSAgICBpZiAoIXN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUpIHsKLSAgICAgICAgc3Vj
Y2Vzc29yLT5pc1JlYWNoYWJsZSA9IHRydWU7Ci0gICAgICAgIHdvcmtsaXN0LmFwcGVuZChzdWNj
ZXNzb3JJbmRleCk7Ci0gICAgfQotICAgIAotICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMu
YXBwZW5kKGJsb2NrSW5kZXgpOwotfQotCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVS
ZWFjaGFiaWxpdHkoKQotewotICAgIFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7Ci0g
ICAgd29ya2xpc3QuYXBwZW5kKDApOwotICAgIG1fZ3JhcGgubV9ibG9ja3NbMF0tPmlzUmVhY2hh
YmxlID0gdHJ1ZTsKLSAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBC
bG9ja0luZGV4IGluZGV4ID0gd29ya2xpc3QubGFzdCgpOwotICAgICAgICB3b3JrbGlzdC5yZW1v
dmVMYXN0KCk7Ci0gICAgICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbaW5kZXhdLmdldCgpOwotICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGlua2VkKTsK
LSAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldOwot
ICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KG5vZGUuaXNKdW1wKCkpCi0gICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGlu
ZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5pc0Jy
YW5jaCgpKSB7Ci0gICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBu
b2RlLnRha2VuQmxvY2tJbmRleCgpKTsKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3Jr
bGlzdCwgaW5kZXgsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICB9Ci0gICAg
fQotfQotCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpidWlsZE9wZXJhbmRNYXBzSWZOZWNlc3Nhcnko
KQogewogICAgIGlmIChtX2hhdmVCdWlsdE9wZXJhbmRNYXBzKQpAQCAtMjgzMSw3ICsyNzkyLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAK
ICAgICBsaW5rQmxvY2tzKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2NrcywgaW5saW5l
U3RhY2tFbnRyeS5tX2Jsb2NrTGlua2luZ1RhcmdldHMpOwotICAgIGRldGVybWluZVJlYWNoYWJp
bGl0eSgpOworICAgIG1fZ3JhcGguZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgIGRhdGFMb2coIlByb2Nlc3Npbmcg
bG9jYWwgdmFyaWFibGUgcGhpcy5cbiIpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcg
KzQyLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAg
IGJvb2wgcnVuKCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQogICAgICAgICBtX2NvdW50ID0gMDsKQEAgLTY1LDEyICs2NSwxNiBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHBlcmZvcm1Gb3J3YXJk
Q0ZBKCk7CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgcGVyZm9ybUJsb2Nr
Q0ZBKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxk
UmV2aXNpdCkKICAgICAgICAgICAgIHJldHVybjsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCkBAIC0xMjYsOSArMTMwLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsK
IAotdm9pZCBwZXJmb3JtQ0ZBKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUNGQShHcmFwaCYg
Z3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Q0ZBUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVu
UGhhc2U8Q0ZBUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuaAkocmV2aXNpb24gMTE0
NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIEdyYXBoOwogLy8gdGhlIGNvZGUgYmxvY2su
IEl0J3MgYWxzbyByZXNwb25zaWJsZSBmb3IgaWRlbnRpZnlpbmcgZGVhZCBjb2RlLCBhbmQgaW4g
dGhlCiAvLyBmdXR1cmUgc2hvdWxkIGJlIHVzZWQgYXMgYSBob29rIGZvciBjb25zdGFudCBwcm9w
YWdhdGlvbi4KIAotdm9pZCBwZXJmb3JtQ0ZBKEdyYXBoJik7Citib29sIHBlcmZvcm1DRkEoR3Jh
cGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHQmFz
aWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBDRkdTaW1wbGlmaWNhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsK
K3B1YmxpYzoKKyAgICBDRkdTaW1wbGlmaWNhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAg
ICAgOiBQaGFzZShncmFwaCwgIkNGRyBzaW1wbGlmaWNhdGlvbiIpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBib29sIG91dGVyQ2hhbmdlZCA9IGZh
bHNlOworICAgICAgICBib29sIGlubmVyQ2hhbmdlZDsKKyAgICAgICAgCisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkgeworICAgICAgICAgICAgICAgICAgICBraWxsVW5yZWFj
aGFibGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobV9ncmFw
aFtibG9jay0+bGFzdCgpXS5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBKdW1wOiB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NvciB3aXRoIG9uZSBwcmVkZWNlc3NvciAtPiBt
ZXJnZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5z
dWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vz
c29yKGJsb2NrLCAwKV0tPm1fcHJlZGVjZXNzb3JzWzBdCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPT0gYmxvY2tJbmRleCk7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ0ZHU2ltcGxpZnk6
IEp1bXAgbWVyZ2Ugb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldS5cbiIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAw
KSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrSW5k
ZXgsIG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSwgTm9CbG9jayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpbm5lckNoYW5nZWQgPSBvdXRlckNoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiTm90IGp1bXAgbWVyZ2luZyBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1
IGJlY2F1c2UgcHJlZGVjZXNzb3JzID0gIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzW21f
Z3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiwgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiIyV1IiwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywg
MCldLT5tX3ByZWRlY2Vzc29yc1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIuXG4iKTsKKyNlbmRpZgorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBCbG9jayBvbmx5IGhhcyBhIGp1bXAgLT4gcmVtb3ZlLiBUaGlzIGlzIHRyaWNreSB0aG91Z2gg
YmVjYXVzZSBvZgorICAgICAgICAgICAgICAgICAgICAvLyBsaXZlbmVzcy4gV2hhdCB3ZSByZWFs
bHkgd2FudCBpcyB0byBzbGFtIGluIGEgcGhhbnRvbSBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAg
ICAgICAgICAgICAgICAvLyBibG9jaywgYWZ0ZXIgdGhlIHRlcm1pbmFsLiBCdXQgd2UgY2FuJ3Qg
cmlnaHQgbm93LiA6LSgKKyAgICAgICAgICAgICAgICAgICAgLy8gSWRlYTogd2hhdCBpZiBJIHNs
YW0gdGhlIGdob3N0aWVzIGludG8gbXkgc3VjY2Vzc29yPyBOb3BlLCB0aGF0J3MKKyAgICAgICAg
ICAgICAgICAgICAgLy8gc3Vib3B0aW1hbCwgYmVjYXVzZSBpZiBteSBzdWNjZXNzb3IgaGFzIG11
bHRpcGxlIHByZWRlY2Vzc29ycyB0aGVuIHdlJ2xsCisgICAgICAgICAgICAgICAgICAgIC8vIGJl
IGtlZXBpbmcgYWxpdmUgdGhpbmdzIG9uIG90aGVyIHByZWRlY2Vzc29yIGVkZ2VzIHVubmVjZXNz
YXJpbHkuCisgICAgICAgICAgICAgICAgICAgIC8vIFdoYXQgd2UgcmVhbGx5IG5lZWQgaXMgdGhl
IG5vdGlvbiBvZiBlbmQtb2YtYmxvY2sgZ2hvc3RpZXMhCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIEJyYW5jaDogeworICAgICAgICAgICAgICAgICAgICAvLyBCcmFuY2ggb24gY29uc3Rh
bnQgLT4gamV0dGlzb24gdGhlIG5vdC10YWtlbiBibG9jayBhbmQgbWVyZ2UuCisgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoW21fZ3JhcGhbYmxvY2stPmxhc3QoKV0uY2hpbGQxKCldLmhh
c0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29uZGl0aW9uID0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1f
Z3JhcGhbYmxvY2stPmxhc3QoKV0uY2hpbGQxKCkuaW5kZXgoKSkudG9Cb29sZWFuKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JD
b25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbildLmdldCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRhcmdldEJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkgeworI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJDRkdTaW1wbGlmeTogS25vd24gY29uZGl0aW9uICglcykgYnJhbmNo
IG1lcmdlIG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUsIGpldHRpc29uaW5nIEJsb2NrICMldS5c
biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPyAidHJ1
ZSIgOiAiZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJ
bmRleCwgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihibG9jaywgIWNvbmRpdGlvbikpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWVyZ2VCbG9ja3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJs
b2NrSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vz
c29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgIWNvbmRpdGlv
bikpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiQ0ZHU2ltcGxpZnk6IEtub3duIGNvbmRpdGlvbiAoJXMpIGJyYW5jaC0+anVtcCBjb252
ZXJzaW9uIG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUsIGpldHRpc29uaW5nIEJsb2NrICMldS5c
biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPyAidHJ1
ZSIgOiAiZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJ
bmRleCwgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihibG9jaywgIWNvbmRpdGlvbikpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQmxvY2tJbmRleCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZv
ckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29u
ZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmlz
VGVybWluYWwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBib3Vu
ZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLmNvZGVPcmlnaW47CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtibG9jay0+bGFzdCgpXS5zZXRPcEFuZERl
ZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bV9ncmFwaFtibG9jay0+bGFzdCgpXS5yZWZDb3VudCgpID09IDEpOworICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25CbG9jayhibG9j
a0luZGV4LCBub3RUYWtlbkJsb2NrSW5kZXgsIGJvdW5kYXJ5Q29kZU9yaWdpbik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
anVtcE5vZGVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUganVtcChKdW1wLCBib3VuZGFyeUNvZGVPcmlnaW4sIE9wSW5mbyh0YWtlbkJsb2Nr
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wLnJlZigpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGp1bXApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmQoanVtcE5vZGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNoYW5nZWQgPSBv
dXRlckNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCkgPT0gbV9ncmFwaC5zdWNjZXNzb3Io
YmxvY2ssIDEpKSB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ0ZHU2ltcGxpZnk6IEJyYW5jaCBtZXJn
ZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApKTsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgbV9ncmFw
aC5zdWNjZXNzb3IoYmxvY2ssIDApLCBOb0Jsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIk5vdCBicmFuY2ggc2ltcGxpZnlpbmcgb24gQmxvY2sgIyV1IGJlY2F1
c2UgdGhlIHN1Y2Nlc3NvcnMgZGlmZmVyIGFuZCB0aGUgY29uZGl0aW9uIGlzIG5vdCBrbm93bi5c
biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCk7CisjZW5kaWYKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gQnJhbmNoIHRvIHNhbWUgZGVz
dGluYXRpb24gLT4ganVtcC4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHRoaXMgd2ls
bCBjdXJyZW50bHkgbm90IGJlIGhpdCBiZWNhdXNlIG9mIHRoZSBsYWNrIG9mIGp1bXAtb25seQor
ICAgICAgICAgICAgICAgICAgICAvLyBibG9jayBzaW1wbGlmaWNhdGlvbi4KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChpbm5lckNoYW5nZWQpIHsKKyAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBjaGFuZ2VkIHRoZSBncmFwaCwgdGhlbiBzb21lIGJsb2NrcyBtYXkgaGF2ZSBiZWNv
bWUgdW5yZWFjaGFibGUuIE5lZWQgdG8KKyAgICAgICAgICAgICAgICAvLyBwZXJmb3JtIGEgYmxv
Y2sgR0Mgb2Ygc29ydHMuCisgICAgICAgICAgICAgICAgbV9ncmFwaC5yZXNldFJlYWNoYWJpbGl0
eSgpOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChpbm5lckNoYW5nZWQpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIG91dGVyQ2hhbmdlZDsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBraWxsVW5yZWFjaGFibGUoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdl
dCgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGJsb2NrKTsKKyAgICAgICAgQVNTRVJUKCFi
bG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAKKyAgICAgICAgLy8gMSkgUmVtb3ZlIGl0cyBy
ZWZlcmVuY2VzIHRvIG90aGVyIGJsb2Nrcy4KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZSYgcGhpTm9kZSA9
IG1fZ3JhcGhbYmxvY2stPnBoaXNbaV1dOworICAgICAgICAgICAgaWYgKCFwaGlOb2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAwOyBqIDwgQWRqYWNlbmN5TGlzdFNpemU7ICsraikgeworICAgICAgICAg
ICAgICAgIGlmICghcGhpTm9kZS5jaGlsZHJlbi5jaGlsZChqKSkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihwaGlOb2RlLmNoaWxkcmVu
LmNoaWxkKGopKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gMikgS2lsbCB0aGUgYmxvY2sKKyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4
XS5jbGVhcigpOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggZmluZE9wZXJhbmRTb3VyY2Uo
Y29uc3QgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+JiB2YXJpYWJsZXMsIGlu
dCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IHZhcmlhYmxl
cy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0u
b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAgICAgICAgIHJldHVybiBtX2dyYXBoW25vZGVJbmRleF0u
Y2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICB9CisgICAg
CisgICAgdm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sqIGJsb2NrLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGguaXND
YXB0dXJlZChvcGVyYW5kKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGZpbmRPcGVyYW5kU291cmNlKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG9w
ZXJhbmQpOworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKCFtX2dyYXBoW25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5v
cCgpICE9IFNldExvY2FsKTsKKyAgICAgICAgTm9kZUluZGV4IHBoYW50b21Ob2RlSW5kZXggPSBt
X2dyYXBoLnNpemUoKTsKKyAgICAgICAgTm9kZSBwaGFudG9tKFBoYW50b20sIGNvZGVPcmlnaW4s
IG5vZGVJbmRleCk7CisgICAgICAgIG1fZ3JhcGguYXBwZW5kKHBoYW50b20pOworICAgICAgICBt
X2dyYXBoLnJlZihwaGFudG9tTm9kZUluZGV4KTsKKyAgICAgICAgYmxvY2stPmFwcGVuZChwaGFu
dG9tTm9kZUluZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaXhQb3NzaWJsZUdldExvY2Fs
KEJhc2ljQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSYgY2hp
bGQgPSBtX2dyYXBoW2VkZ2VdOworICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG1fZ3JhcGguaXNDYXB0dXJlZChjaGls
ZC5sb2NhbCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgTm9kZUluZGV4IG9yaWdp
bmFsTm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLmxvY2Fs
KCkpOworICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlSW5kZXggIT0gTm9Ob2RlKTsKKyAgICAg
ICAgTm9kZSogb3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2RlSW5kZXhdOworICAg
ICAgICBBU1NFUlQob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgLy8g
UG9zc2liaWxpdGllczoKKyAgICAgICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlz
IGdldHRpbmcgdGhlIHZhbHVlIG9mIHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5CisgICAg
ICAgIC8vICAgICBhdmFpbGFibGUgaW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2Rl
SW5kZXguCisgICAgICAgIC8vIEdldExvY2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5n
IHRoZSB2YWx1ZSBvZiBzb21ldGhpbmcgdGhhdCB0aGUgZmlyc3QKKyAgICAgICAgLy8gICAgIGJs
b2NrIGFsc28gZ2V0cy4KKyAgICAgICAgLy8gUGhpIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tp
bmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdCBibG9jaworICAg
ICAgICAvLyAgICAgd2FzIGFsc28gYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uLgorICAgICAgICAv
LyBTZXRBcmd1bWVudCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZl
IG9uIGFuIG9wZXJhbmQgdGhhdCB0aGUKKyAgICAgICAgLy8gICAgIGZpcnN0IGJsb2NrIHdhcyBr
ZWVwaW5nIGFsaXZlIGJ5IHZpcnR1ZSBvZiB0aGUgZmlyc3RCbG9jayBiZWluZyB0aGUgcm9vdCBh
bmQKKyAgICAgICAgLy8gICAgIHRoZSBvcGVyYW5kIGJlaW5nIGFuIGFyZ3VtZW50LgorICAgICAg
ICAvLyBGbHVzaCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9u
IGFuIG9wZXJhbmQgdGhhdCB0aGUgZmlyc3QKKyAgICAgICAgLy8gICAgIGJsb2NrIHdhcyBmb3Jj
aW5nIHRvIGJlIGFsaXZlLCBzbyB0aGUgc2Vjb25kIGJsb2NrIHNob3VsZCByZWZlciBjaGlsZCBv
ZgorICAgICAgICAvLyAgICAgdGhlIGZsdXNoLgorICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5v
cCgpID09IEZsdXNoKSB7CisgICAgICAgICAgICBvcmlnaW5hbE5vZGVJbmRleCA9IG9yaWdpbmFs
Tm9kZS0+Y2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgIG9yaWdpbmFsTm9kZSA9ICZtX2dy
YXBoW29yaWdpbmFsTm9kZUluZGV4XTsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9yaWdp
bmFsTm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICBF
ZGdlIG5ld0VkZ2UgPSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgRWRnZSBv
bGRFZGdlID0gZWRnZTsKKyAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5ld0VkZ2UpOworICAgICAg
ICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsKKyAgICAgICAgICAgIGVkZ2UgPSBuZXdFZGdl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRMb2NhbDog
eworICAgICAgICAgICAgRWRnZSBuZXdFZGdlID0gZWRnZTsKKyAgICAgICAgICAgIEVkZ2Ugb2xk
RWRnZSA9IGVkZ2U7CisgICAgICAgICAgICBuZXdFZGdlLnNldEluZGV4KG9yaWdpbmFsTm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5ld0VkZ2UpOworICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihvbGRFZGdlKTsKKyAgICAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAgIGNhc2Ug
U2V0QXJndW1lbnQ6IHsKKyAgICAgICAgICAgIC8vIEtlZXAgdGhlIEdldExvY2FsIQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBqZXR0aXNvbkJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxv
Y2tJbmRleCBqZXR0aXNvbmVkQmxvY2tJbmRleCwgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmln
aW4pCisgICAgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAgICAgICAgICBrZWVwT3BlcmFu
ZEFsaXZlKGJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAgICAgICBrZWVwT3BlcmFuZEFs
aXZlKGJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGkpOworICAgICAgICAKKyAgICAgICAgZml4
SmV0dGlzb25lZFByZWRlY2Vzc29ycyhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgZml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0dGlzb25lZEJsb2NrSW5kZXgpCisgICAgewor
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxv
ZygiRml4aW5nIHByZWRlY2Vzc29ycyBhbmQgcGhpcyBkdWUgdG8gamV0dGlzb24gb2YgQmxvY2sg
IyV1IGZyb20gQmxvY2sgIyV1LlxuIiwKKyAgICAgICAgICAgICAgICBqZXR0aXNvbmVkQmxvY2tJ
bmRleCwgYmxvY2tJbmRleCk7CisjZW5kaWYKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBCYXNpY0Jsb2NrKiBq
ZXR0aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGV4XS5n
ZXQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+
bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChqZXR0aXNvbmVk
QmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldICE9IGJsb2NrSW5kZXgpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzW2ld
ID0gamV0dGlzb25lZEJsb2NrLT5tX3ByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBq
ZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlz
b25lZEJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggcGhp
Tm9kZUluZGV4ID0gamV0dGlzb25lZEJsb2NrLT5waGlzW2ldOworICAgICAgICAgICAgTm9kZSYg
cGhpTm9kZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBt
eU5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwaGlOb2RlLmxvY2Fs
KCkpOworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIHJlbW92aW5nIHJlZmVyZW5jZSBmcm9tIHBoaSBAJXUg
dG8gQCV1IG9uIGxvY2FsIHIlZDoiLAorICAgICAgICAgICAgICAgICAgICBwaGlOb2RlSW5kZXgs
IG15Tm9kZUluZGV4LCBwaGlOb2RlLmxvY2FsKCkpOworI2VuZGlmCisgICAgICAgICAgICBBU1NF
UlQobXlOb2RlSW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBBZGphY2VuY3lMaXN0U2l6ZTsgKytqKQorICAgICAgICAgICAgICAgIHJlbW92ZVBv
dGVudGlhbGx5RGVhZFBoaVJlZmVyZW5jZShteU5vZGVJbmRleCwgcGhpTm9kZSwgaik7CisjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxv
ZygiXG4iKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcmVtb3Zl
UG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKE5vZGVJbmRleCBteU5vZGVJbmRleCwgTm9kZSYg
cGhpTm9kZSwgdW5zaWduZWQgZWRnZUluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKHBoaU5vZGUu
Y2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KS5pbmRleFVuY2hlY2tlZCgpICE9IG15Tm9kZUluZGV4
KQorICAgICAgICAgICAgcmV0dXJuOworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygiIFJlbW92aW5nIHJlZmVyZW5jZSBhdCBjaGlsZCAl
dS4iLCBlZGdlSW5kZXgpOworI2VuZGlmCisgICAgICAgIG1fZ3JhcGguZGVyZWYobXlOb2RlSW5k
ZXgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlZGdlSW5kZXg7IGkgPCBBZGphY2VuY3lM
aXN0U2l6ZSAtIDE7ICsraSkKKyAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQo
aSwgcGhpTm9kZS5jaGlsZHJlbi5jaGlsZChpICsgMSkpOworICAgICAgICBwaGlOb2RlLmNoaWxk
cmVuLnNldENoaWxkKEFkamFjZW5jeUxpc3RTaXplIC0gMSwgRWRnZSgpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBmaXhUYWlsT3BlcmFuZChCYXNpY0Jsb2NrKiBmaXJzdEJsb2NrLCBCYXNpY0Js
b2NrKiBzZWNvbmRCbG9jaywgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBOb2RlSW5kZXgg
YXRTZWNvbmRUYWlsID0gc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fZ3JhcGguaXNDYXB0dXJlZChvcGVyYW5kKSkg
eworICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBibG9jayBkaWQgc29tZXRoaW5nIHRvIGEgdmFy
aWFibGUgdGhhdCBpcyBjYXB0dXJlZCwgc28gcmVmbGVjdCB0aGlzLgorICAgICAgICAgICAgZmly
c3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBhdFNlY29uZFRhaWw7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChh
dFNlY29uZFRhaWwgPT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgdmFyaWFibGUg
aXMgZGVhZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWNvbmQgYmxvY2ssIHRoZW4gZG8gbm90aGluZzsg
ZXNzZW50aWFsbHkKKyAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRoZSB0
YWlsIHN0YXRlIHRvIHJlZmxlY3Qgd2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGRpZC4KKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTm9kZSYgc2Vjb25k
Tm9kZSA9IG1fZ3JhcGhbYXRTZWNvbmRUYWlsXTsKKyAgICAgICAgc3dpdGNoIChzZWNvbmROb2Rl
Lm9wKCkpIHsKKyAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgY2FzZSBGbHVzaDogewor
ICAgICAgICAgICAgLy8gVGhlIHNlY29uZCBibG9jayBkaWQgaW50ZXJlc3RpbmcgdGhpbmdzIHRv
IHRoZSB2YXJpYWJsZXMsIHNvIHVwZGF0ZSB0aGUgdGFpbAorICAgICAgICAgICAgLy8gYWNjb3Jk
aW5nbHkuCisgICAgICAgICAgICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChv
cGVyYW5kKSA9IGF0U2Vjb25kVGFpbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgY2FzZSBQaGk6IHsK
KyAgICAgICAgICAgIC8vIEtlZXAgd2hhdCB3YXMgaW4gdGhlIGZpcnN0IGJsb2NrLgorICAgICAg
ICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQp
ICE9IE5vTm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIG1lcmdlQmxvY2tzKAorICAgICAgICBCbG9j
a0luZGV4IGZpcnN0QmxvY2tJbmRleCwgQmxvY2tJbmRleCBzZWNvbmRCbG9ja0luZGV4LCBCbG9j
a0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxs
IGFkZCBhbGwgb2YgdGhlIG5vZGVzIGluIHNlY29uZEJsb2NrIHRvIGZpcnN0QmxvY2ssIGJ1dCBp
biBzbyBkb2luZworICAgICAgICAvLyBpdCB3aWxsIGFsc28gZW5zdXJlIHRoYXQgYW55IEdldExv
Y2FscyBmcm9tIHRoZSBzZWNvbmQgYmxvY2sgdGhhdCByZWZlciB0bworICAgICAgICAvLyBTZXRM
b2NhbHMgaW4gdGhlIGZpcnN0IGJsb2NrIGFyZSByZWxpbmtlZC4gSWYgamV0dGlzb25lZEJsb2Nr
IGlzIG5vdCBOb0Jsb2NrLAorICAgICAgICAvLyB0aGVuIFBoYW50b21zIGFyZSBpbnNlcnRlZCBm
b3IgYW55dGhpbmcgdGhhdCB0aGUgamV0dGlzb25lZEJsb2NrIHdvdWxkIGhhdmUKKyAgICAgICAg
Ly8ga2VwdCBhbGl2ZS4KKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIGZpcnN0QmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2ZpcnN0QmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEJhc2lj
QmxvY2sqIHNlY29uZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tzZWNvbmRCbG9ja0luZGV4XS5n
ZXQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJlbW92ZSB0aGUgdGVybWluYWwgb2YgZmlyc3RC
bG9jayBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0IGFueW1vcmUuIFdlbGwsIHdlIGRvbid0CisgICAg
ICAgIC8vIHJlYWxseSByZW1vdmUgaXQ7IHdlIGFjdHVhbGx5IHR1cm4gaXQgaW50byBhIFBoYW50
b20uCisgICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5h
bCgpKTsKKyAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2Zp
cnN0QmxvY2stPmxhc3QoKV0uY29kZU9yaWdpbjsKKyAgICAgICAgbV9ncmFwaFtmaXJzdEJsb2Nr
LT5sYXN0KCldLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBBU1NFUlQo
bV9ncmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIAor
ICAgICAgICBpZiAoamV0dGlzb25lZEJsb2NrSW5kZXggIT0gTm9CbG9jaykgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNv
bmVkQmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRpbWUg
dG8gaW5zZXJ0IGdob3N0aWVzIGZvciB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGtlcHQgYWxpdmUg
aW4gY2FzZSB3ZSBPU1IKKyAgICAgICAgICAgIC8vIGV4aXQgcHJpb3IgdG8gaGl0dGluZyB0aGUg
Zmlyc3RCbG9jaydzIHRlcm1pbmFsLCBhbmQgZW5kIHVwIGdvaW5nIGRvd24gYQorICAgICAgICAg
ICAgLy8gZGlmZmVyZW50IHBhdGggdGhhbiBzZWNvbmRCbG9jay4KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAgICAgICAgICAgICAga2VlcE9w
ZXJhbmRBbGl2ZShmaXJzdEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGFyZ3VtZW50VG9PcGVy
YW5kKGkpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25lZEJs
b2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAgICAgICAg
ICAgIGtlZXBPcGVyYW5kQWxpdmUoZmlyc3RCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNv
bmRCbG9jay0+cGhpcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGZpcnN0QmxvY2stPnBoaXMu
YXBwZW5kKHNlY29uZEJsb2NrLT5waGlzW2ldKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4ID0gc2Vjb25kQmxvY2stPmF0KGkpOworICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlLnNob3Vs
ZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFBoYW50b20g
JiYgbm9kZS5jaGlsZDEoKSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlJiBwb3NzaWJsZUxv
Y2FsT3AgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAgICAgICAgICBpZiAo
cG9zc2libGVMb2NhbE9wLmhhc0xvY2FsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBzZXRMb2NhbEluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJz
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwb3NzaWJsZUxvY2FsT3AubG9jYWwoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBzZXRMb2NhbCA9IG1fZ3JhcGhbc2V0TG9j
YWxJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWwub3AoKSA9PSBT
ZXRMb2NhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgbmV3RWRnZSA9IHNl
dExvY2FsLmNoaWxkMSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugb2xkRWRn
ZSA9IG5vZGUuY2hpbGQxKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5y
ZWYobmV3RWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihv
bGRFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnNldENo
aWxkMShuZXdFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBHZXRMb2NhbCwgdGhlbiB3ZSBtaWdodCBsaWtlIHRv
IGZpeCBpdC4KKyAgICAgICAgICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFy
Z3MpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUu
Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS5m
aXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgKytjaGlsZElkeCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9j
YWwoZmlyc3RCbG9jaywgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkMSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGlsZDEo
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUuY2hpbGRy
ZW4uY2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJs
b2NrLCBub2RlLmNoaWxkcmVuLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpcnN0QmxvY2stPmFw
cGVuZChub2RlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaXggdGhl
IHByZWRlY2Vzc29ycyBvZiBteSBuZXcgc3VjY2Vzc29ycy4gVGhpcyBpcyB0cmlja3ksIHNpbmNl
IHdlIGFyZSBnb2luZyB0byByZXNldAorICAgICAgICAvLyBhbGwgcHJlZGVjZXNzb3JzIGFueXdh
eSBkdWUgdG8gcmVhY2hhYmlsaXR5IGFuYWx5c2lzLiBCdXQgd2UgbmVlZCB0byBmaXggdGhlCisg
ICAgICAgIC8vIHByZWRlY2Vzc29ycyBlYWdlcmx5IHRvIGVuc3VyZSB0aGF0IHdlIGtub3cgd2hh
dCB0aGV5IGFyZSBpbiBjYXNlIHRoZSBuZXh0IGJsb2NrIHdlCisgICAgICAgIC8vIGNvbnNpZGVy
IGluIHRoaXMgcGhhc2Ugd2lzaGVzIHRvIHF1ZXJ5IHRoZSBwcmVkZWNlc3NvcnMgb2Ygb25lIG9m
IHRoZSBibG9ja3Mgd2UKKyAgICAgICAgLy8gYWZmZWN0ZWQuCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhmaXJzdEJsb2NrKTsgaS0tOykgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1
Y2Nlc3NvcihmaXJzdEJsb2NrLCBpKV0uZ2V0KCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraikgeworICAg
ICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzW2pdID09IHNlY29uZEJs
b2NrSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnNb
al0gPSBmaXJzdEJsb2NrSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIEZpeCB0aGUgcHJlZGVjZXNzb3JzIG9mIG15IGZvcm1lciBzdWNjZXNzb3Jz
LiBBZ2Fpbiwgd2UnZCByYXRoZXIgbm90IGRvIHRoaXMsIGJ1dCBpdCdzCisgICAgICAgIC8vIGFu
IHVuZm9ydHVuYXRlIG5lY2Vzc2l0eS4gU2VlIGFib3ZlIGNvbW1lbnQuCisgICAgICAgIGlmIChq
ZXR0aXNvbmVkQmxvY2tJbmRleCAhPSBOb0Jsb2NrKQorICAgICAgICAgICAgZml4SmV0dGlzb25l
ZFByZWRlY2Vzc29ycyhmaXJzdEJsb2NrSW5kZXgsIGpldHRpc29uZWRCbG9ja0luZGV4KTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEZpeCB1cCB0aGUgdmFyaWFibGVzIGF0IHRhaWwuCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAgICAgICAgICBmaXhUYWlsT3BlcmFuZChmaXJzdEJs
b2NrLCBzZWNvbmRCbG9jaywgYXJndW1lbnRUb09wZXJhbmQoaSkpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKTsgKytpKQorICAgICAgICAgICAgZml4VGFpbE9wZXJhbmQoZmlyc3RCbG9jaywgc2Vjb25k
QmxvY2ssIGkpOworICAgICAgICBmaXJzdEJsb2NrLT52YWx1ZXNBdFRhaWwgPSBzZWNvbmRCbG9j
ay0+dmFsdWVzQXRUYWlsOworICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tzZWNv
bmRCbG9ja0luZGV4XS5jbGVhcigpOworICAgIH0KK307CisKK2Jvb2wgcGVyZm9ybUNGR1NpbXBs
aWZpY2F0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICByZXR1cm4gcnVuUGhhc2U8Q0ZHU2ltcGxp
ZmljYXRpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZV9oCisjZGVmaW5lIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ0ZHIHNpbXBsaWZpY2F0aW9uOgor
Ly8KKy8vIGp1bXAgdG8gc2luZ2xlIHByZWRlY2Vzc29yIC0+IG1lcmdlIGJsb2NrcworLy8gYnJh
bmNoIG9uIGNvbnN0YW50IC0+IGp1bXAKKy8vIGJyYW5jaCB0byBzYW1lIGJsb2NrcyAtPiBqdW1w
CisvLyBqdW1wLW9ubHkgYmxvY2sgLT4gcmVtb3ZlCisvLyBraWxsIGRlYWQgY29kZQorCitib29s
IHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBtX3JlcGxhY2VtZW50c1tpXSA9IE5vTm9kZTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Js
b2NrKQotICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKCptX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
XSk7CisgICAgICAgICAgICBwZXJmb3JtQmxvY2tDU0UobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja10u
Z2V0KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTWF5YmUgd2UnbGwgbmVlZCB0byBtYWtl
IHRoaXMgcmVhc29uIGFib3V0IHdoZXRoZXIgaXQgY2hhbmdlZCB0aGUgZ3JhcGggaW4gYW4gYWN0
aW9uYWJsZSB3YXk/CiAgICAgfQogICAgIAogcHJpdmF0ZToKQEAgLTEzOSw1MiArMTQwLDYgQEAg
cHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBp
c1ByZWRpY3RlZE51bWVyaWNhbChOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgUHJlZGljdGVk
VHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAg
IFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24o
KTsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclBy
ZWRpY3Rpb24ocmlnaHQpOwotICAgIH0KLSAgICAKLSAgICBib29sIGxvZ2ljYWxOb3RJc1B1cmUo
Tm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICByZXR1cm4gaXNCb29s
ZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSB8fCAhcHJlZGljdGlvbjsKLSAgICB9Ci0gICAgCi0g
ICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
Z3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAg
ICAmJiAoKG5vZGUub3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlh
cykKLSAgICAgICAgICAgICAgICA/IGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVByZWRpY3Rpb24o
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgOiBp
c0FjdGlvbmFibGVBcnJheVByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCkpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGVJbmRleCBu
b2RlSW5kZXgpCi0gICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhd
OwotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEobm9kZS5mbGFncygpICYgTm9kZU1pZ2h0
Q2xvYmJlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZS5vcCgpKSB7Ci0gICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxl
c3M6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgY2FzZSBDb21wYXJlR3Jl
YXRlcjoKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBjYXNlIENvbXBh
cmVFcToKLSAgICAgICAgICAgIHJldHVybiAhaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSk7Ci0g
ICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgICAgIHJldHVybiAhbG9naWNhbE5vdElz
UHVyZShub2RlKTsKLSAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAgIHJldHVybiAh
YnlWYWxJc1B1cmUobm9kZSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJZiBieSBzb21lIG9k
ZGl0eSB3ZSBoaXQgdGhpcyBjYXNlIGluIHJlbGVhc2UgYnVpbGQgaXQncyBzYWZlciB0byBoYXZl
IENTRSBhc3N1bWUgdGhlIHdvcnN0LgotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIE5vZGVJ
bmRleCBpbXB1cmVDU0UoTm9kZSYgbm9kZSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCBjaGls
ZDEgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEoKSk7CkBAIC0yMTUsNyArMTcwLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAg
IGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb05vZGU7CkBAIC0yMzgsNyArMTkzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAg
ICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMjU0LDE0ICsy
MDksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4
XTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdl
dEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmICghYnlWYWxJc1B1cmUobm9kZSkpCisgICAgICAg
ICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09
IGNoaWxkMSAmJiBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNo
aWxkMikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKCFieVZhbElzUHVyZShub2RlKSkKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQx
KCkgPT0gY2hpbGQxICYmIGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxp
emUoY2hpbGQyKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCkuaW5k
ZXgoKTsKQEAgLTI4MCw3ICsyMzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIEEg
cHVzaCBjYW5ub3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3RpbmcgZWxlbWVudHMgaW4gdGhlIGFy
cmF5LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zMzEs
NyArMjg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
UHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAg
ICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
YnlWYWxJc1B1cmUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwg
c3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAg
ICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0
IHRvIGNhdXNlIGEgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KQEAg
LTM0MCw3ICsyOTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
aWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNs
b2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zNzcsNyArMzMyLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFs
SXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUo
bm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0
aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAg
Ly8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEg
c3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KQEAgLTM4Niw3ICszNDEs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjbG9iYmVy
c1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxk
KGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTQxNiw3ICszNzEsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9k
ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBh
Y2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2Vy
IGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUK
ICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgpAQCAtNDI1LDcgKzM4MCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5k
ZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQpAQCAtNDYxLDEyICs0MTYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWw6Ci0gICAgICAgICAgICAgICAgaWYgKGlzRml4ZWRJbmRleGVkU3RvcmFnZU9iamVjdFByZWRp
Y3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpICYmIGJ5VmFsSXNQdXJl
KG5vZGUpKQorICAgICAgICAgICAgICAgIGlmIChpc0ZpeGVkSW5kZXhlZFN0b3JhZ2VPYmplY3RQ
cmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSAmJiBtX2dyYXBo
LmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICByZXR1cm4gTm9Ob2RlOwogCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTYxMCw2ICs1
NjUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElzU3RyaW5nOgogICAgICAgICBjYXNlIElz
T2JqZWN0OgogICAgICAgICBjYXNlIElzRnVuY3Rpb246CisgICAgICAgIGNhc2UgTG9naWNhbE5v
dDoKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHB1cmVDU0Uobm9kZSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTYzNSwxOCArNTkxLDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVx
OgogICAgICAgICBjYXNlIENvbXBhcmVFcTogewotICAgICAgICAgICAgaWYgKGlzUHJlZGljdGVk
TnVtZXJpY2FsKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50
SW5kZXggPSBwdXJlQ1NFKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudElu
ZGV4ICE9IE5vTm9kZSAmJiBpc1ByZWRpY3RlZE51bWVyaWNhbChtX2dyYXBoW3JlcGxhY2VtZW50
SW5kZXhdKSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJ
bmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgTG9naWNhbE5vdDogewotICAgICAgICAgICAgaWYgKGxv
Z2ljYWxOb3RJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzUHJlZGlj
dGVkTnVtZXJpY2FsKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2Vt
ZW50SW5kZXggPSBwdXJlQ1NFKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVu
dEluZGV4ICE9IE5vTm9kZSAmJiBsb2dpY2FsTm90SXNQdXJlKG1fZ3JhcGhbcmVwbGFjZW1lbnRJ
bmRleF0pKQorICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudEluZGV4ICE9IE5vTm9kZSAm
JiBtX2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG1fZ3JhcGhbcmVwbGFjZW1lbnRJbmRleF0p
KQogICAgICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChyZXBsYWNlbWVudEluZGV4KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjU5LDEyICs2MDYsMTIgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
R2V0QnlWYWw6Ci0gICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkpCisgICAgICAgICAg
ICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAgICAgICAgICBzZXRSZXBs
YWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2Rl
KSAmJiBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUu
Y2hpbGQyKCkuaW5kZXgoKSkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlW
YWxJc1B1cmUobm9kZSkgJiYgZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5p
bmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCkpICE9IE5vTm9kZSkKICAgICAgICAgICAgICAg
ICBub2RlLnNldE9wKFB1dEJ5VmFsQWxpYXMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKQEAgLTcwNCwxNCArNjUxLDE5IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBwZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9jayYgYmxvY2spCisgICAgdm9pZCBw
ZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBtX2N1cnJl
bnRCbG9jayA9ICZibG9jazsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgTGFzdE5vZGVUeXBlOyArK2kpCiAgICAgICAgICAgICBtX2xh
c3RTZWVuW2ldID0gVUlOVF9NQVg7CiAKLSAgICAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7
IG1faW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0gICAg
ICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrW21faW5kZXhJbkJsb2NrXTsKKyAgICAgICAg
Zm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsg
KyttX2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBibG9jay0+
YXQobV9pbmRleEluQmxvY2spOwogICAgICAgICAgICAgcGVyZm9ybU5vZGVDU0UobV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0pOwogICAgICAgICB9CiAgICAgfQpAQCAtNzIzLDkgKzY3NSw5IEBAIHBy
aXZhdGU6CiAgICAgRml4ZWRBcnJheTx1bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBtX2xhc3RTZWVu
OwogfTsKIAotdm9pZCBwZXJmb3JtQ1NFKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUNTRShH
cmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1
cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkocmV2aXNp
b24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIEdyYXBoOwogLy8gYSB3aWRlIHJh
bmdlIG9mIHN1YmV4cHJlc3Npb24gc2ltaWxhcml0aWVzLiBJdCdzIGtub3duIHRvIHByb2R1Y2Ug
YmlnIHdpbnMKIC8vIG9uIGEgZmV3IGJlbmNobWFya3MsIGFuZCBpcyByZWxhdGl2ZWx5IGNoZWFw
IHRvIHJ1bi4KIAotdm9pZCBwZXJmb3JtQ1NFKEdyYXBoJik7Citib29sIHBlcmZvcm1DU0UoR3Jh
cGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEyIEBA
CiAjZWxzZQogI2RlZmluZSBERkdfRU5BQkxFX0pJVF9BU1NFUlQgMAogI2VuZGlmCisvLyBFbmFi
bGUgdmFsaWRhdGlvbiBvZiB0aGUgZ3JhcGguCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorI2RlZmlu
ZSBERkdfRU5BQkxFX1ZBTElEQVRJT04gMQorI2Vsc2UKKyNkZWZpbmUgREZHX0VOQUJMRV9WQUxJ
REFUSU9OIDAKKyNlbmRpZgogLy8gQ29uc2lzdGVuY3kgY2hlY2sgY29udGVudHMgY29tcGlsZXIg
ZGF0YSBzdHJ1Y3R1cmVzLgogI2RlZmluZSBERkdfRU5BQkxFX0NPTlNJU1RFTkNZX0NIRUNLIDAK
IC8vIEVtaXQgYSBicmVha3BvaW50IGludG8gdGhlIGhlYWQgb2YgZXZlcnkgZ2VuZXJhdGVkIGZ1
bmN0aW9uLCB0byBhaWQgZGVidWdnaW5nIGluIEdEQi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTMgKzQzLDE3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewor
ICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIEFic3RyYWN0
U3RhdGUgc3RhdGUobV9ncmFwaCk7CiAgICAgICAgIEluc2VydGlvblNldDxOb2RlSW5kZXg+IGlu
c2VydGlvblNldDsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBpZiAoIWJsb2NrLT5jZmFGb3VuZENvbnN0YW50cykKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN0YXRlLmJlZ2luQmFzaWNCbG9j
ayhibG9jayk7CkBAIC02MCwyOSArNjQsNTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwogICAgICAgICAgICAgICAgIGlm
ICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIHx8IChub2RlLmZs
YWdzKCkgJiAoTm9kZUNsb2JiZXJzV29ybGQgfCBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAg
ICAgICAgICAgICAgfHwgbV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpCiAgICAgICAgICAgICAg
ICAgICAgIHx8IG5vZGUuaGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLmZvck5vZGUobm9kZUlu
ZGV4KS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vZGUg
cGhhbnRvbShQaGFudG9tLCBub2RlLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ub3AoKSA9PSBQaGkpOworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzUmVzdWx0KCkp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNJblBoaXMobm9kZS5jaGlsZDEoKS5p
bmRleCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3Bl
cmFuZChub2RlLmxvY2FsKCkpID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHRhaWxOb2RlSW5kZXggPSBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRhaWxOb2RlSW5kZXggPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgICAg
ICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBu
b2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdGFpbE5vZGVJbmRleF0ub3AoKSA9PSBG
bHVzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbdGFpbE5vZGVJ
bmRleF0ub3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgcGhhbnRvbS5jaGls
ZHJlbiA9IG5vZGUuY2hpbGRyZW47CiAgICAgICAgICAgICAgICAgcGhhbnRvbS5yZWYoKTsKKyAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50
KG5vZGVJbmRleCwgdmFsdWUpOwogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwaGFudG9tTm9k
ZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQo
cGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxv
Y2ssIHBoYW50b21Ob2RlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUucmVzZXQo
KTsKICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCpibG9jayk7CisgICAgICAgICAg
ICBzdGF0ZS5yZXNldCgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gY2hh
bmdlZDsKICAgICB9CiB9OwogCi12b2lkIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoR3JhcGgmIGdy
YXBoKQorYm9vbCBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKEdyYXBoJiBncmFwaCkKIHsKLSAgICBy
dW5QaGFzZTxDb25zdGFudEZvbGRpbmdQaGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFz
ZTxDb25zdGFudEZvbGRpbmdQaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBpbmZlcnJlZCBjb25zdGFudHMsIGFuZCByZXBs
YWNlcyB0aG9zZSBub2RlcyB3aXRoIGNvbnN0YW50cyB3aGlsc3QgaW5qZWN0aW5nCiAvLyBQaGFu
dG9tIG5vZGVzIHRvIGtlZXAgdGhlIGNoaWxkcmVuIGFsaXZlICh3aGljaCBpcyBuZWNlc3Nhcnkg
Zm9yIE9TUiBleGl0KS4KIAotdm9pZCBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKEdyYXBoJik7Citi
b29sIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0J5dGVDb2Rl
UGFyc2VyLmgiCiAjaW5jbHVkZSAiREZHQ0ZBUGhhc2UuaCIKKyNpbmNsdWRlICJERkdDRkdTaW1w
bGlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKQEAg
LTYwLDEyICs2MSwyNCBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVN
CiAgICAgaWYgKGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbikKICAgICAgICAgZGZnLnBy
ZWRpY3RBcmd1bWVudFR5cGVzKCk7CiAKLSAgICBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRp
b24oZGZnKTsKICAgICBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVy
Zm9ybUZpeHVwKGRmZyk7Ci0gICAgcGVyZm9ybUNGQShkZmcpOwotICAgIHBlcmZvcm1Db25zdGFu
dEZvbGRpbmcoZGZnKTsKLSAgICBwZXJmb3JtQ1NFKGRmZyk7CisgICAgdW5zaWduZWQgY250ID0g
MTsKKyAgICBmb3IgKDs7ICsrY250KSB7CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQor
ICAgICAgICBkYXRhTG9nKCJERkcgYmVnaW5uaW5nIG9wdGltaXphdGlvbiBmaXhwb2ludCBpdGVy
YXRpb24gIyV1LlxuIiwgY250KTsKKyNlbmRpZgorICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgcGVyZm9ybUNGQShkZmcpOworICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1D
b25zdGFudEZvbGRpbmcoZGZnKTsKKyAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ0ZHU2ltcGxp
ZmljYXRpb24oZGZnKTsKKyAgICAgICAgcGVyZm9ybUNTRShkZmcpOworICAgICAgICBpZiAoIWNo
YW5nZWQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisjaWYgREZHX0VOQUJMRShERUJVR19W
RVJCT1NFKQorICAgIGRhdGFMb2coIkRGRyBvcHRpbWl6YXRpb24gZml4cG9pbnQgY29udmVyZ2Vk
IGluICV1IGl0ZXJhdGlvbnMuXG4iLCBjbnQpOworI2VuZGlmCiAgICAgcGVyZm9ybVZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25z
dCB7IHJldHVybiBpbmRleFVuY2hlY2tlZCgpICE9IE5vTm9kZTsgfQorICAgIG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShFZGdlIG90
aGVyKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTEgQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAg
ICB7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBmaXh1
cEJsb2NrKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNTksOSArMzYwLDkgQEAgcHJpdmF0ZToK
ICAgICBJbnNlcnRpb25TZXQ8Tm9kZUluZGV4PiBtX2luc2VydGlvblNldDsKIH07CiAgICAgCi12
b2lkIHBlcmZvcm1GaXh1cChHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1GaXh1cChHcmFwaCYg
Z3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Rml4dXBQaGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBy
dW5QaGFzZTxGaXh1cFBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5oCShyZXZp
c2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBHcmFwaDsKIC8vIEZpeCBw
b3J0aW9ucyBvZiB0aGUgZ3JhcGggdGhhdCBhcmUgaW5lZmZpY2llbnQgZ2l2ZW4gdGhlIHByZWRp
Y3Rpb25zIHRoYXQKIC8vIHdlIGhhdmUuIFRoaXMgc2hvdWxkIHJ1biBhZnRlciBwcmVkaWN0aW9u
IHByb3BhZ2F0aW9uIGJ1dCBiZWZvcmUgQ1NFLgogCi12b2lkIHBlcmZvcm1GaXh1cChHcmFwaCYp
OworYm9vbCBwZXJmb3JtRml4dXAoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
Rzo6UGhhc2UKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsMTAgKzEyNiw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9k
ZUluZGV4IG5vZGVJbmRleCkKICAgICB1bnNpZ25lZCByZWZDb3VudCA9IG5vZGUucmVmQ291bnQo
KTsKICAgICBib29sIHNraXBwZWQgPSAhcmVmQ291bnQ7CiAgICAgYm9vbCBtdXN0R2VuZXJhdGUg
PSBub2RlLm11c3RHZW5lcmF0ZSgpOwotICAgIGlmIChtdXN0R2VuZXJhdGUpIHsKLSAgICAgICAg
QVNTRVJUKHJlZkNvdW50KTsKKyAgICBpZiAobXVzdEdlbmVyYXRlKQogICAgICAgICAtLXJlZkNv
dW50OwotICAgIH0KICAgICAKICAgICBwcmludFdoaXRlU3BhY2UoKG5vZGUuY29kZU9yaWdpbi5p
bmxpbmVEZXB0aCgpIC0gMSkgKiAyKTsKIApAQCAtMjc1LDE1ICsyNzMsMjkgQEAgdm9pZCBHcmFw
aDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4KQogCiB2b2lkIEdyYXBoOjpkdW1wKCkKIHsKKyAg
ICBib29sIGR1bXBBbGwgPSBmYWxzZTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCisgICAgZHVtcEFsbCA9IHRydWU7CisjZW5kaWYKKwogICAgIE5vZGVJbmRleCBs
YXN0Tm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9j
a3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1ti
XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBkYXRhTG9nKCJCbG9jayAjJXUgKGJjIyV1KTogJXMlc1xuIiwgKGludCliLCBibG9jay0+
Ynl0ZWNvZGVCZWdpbiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiIChza2lwcGVkKSIsIGJs
b2NrLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiKTsKKyAgICAgICAgZGF0YUxv
ZygiICBQcmVkZWNlc3NvcnM6Iik7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxv
Y2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgZGF0YUxvZygiICMl
dSIsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1tpXSk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CiAg
ICAgICAgIGRhdGFMb2coIiAgUGhpIE5vZGVzOlxuIik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIC8vIER1bXBp
bmcgdGhlIGRlYWQgUGhpIG5vZGVzIGlzIGp1c3QgYW5ub3lpbmchCi0gICAgICAgICAgICBpZiAo
YXQoYmxvY2stPnBoaXNbaV0pLnJlZkNvdW50KCkpCisgICAgICAgICAgICBpZiAoZHVtcEFsbCB8
fCBhdChibG9jay0+cGhpc1tpXSkucmVmQ291bnQoKSkgeworICAgICAgICAgICAgICAgIGR1bXBD
b2RlT3JpZ2luKGxhc3ROb2RlSW5kZXgsIGJsb2NrLT5waGlzW2ldKTsKICAgICAgICAgICAgICAg
ICBkdW1wKGJsb2NrLT5waGlzW2ldKTsKKyAgICAgICAgICAgICAgICBsYXN0Tm9kZUluZGV4ID0g
YmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGF0YUxv
ZygiICB2YXJzIGJlZm9yZTogIik7CiAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkK
QEAgLTMwNSw2ICszMTcsOSBAQCB2b2lkIEdyYXBoOjpkdW1wKCkKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgZGF0YUxvZygiPGVtcHR5PiIpOwogICAgICAgICBkYXRhTG9nKCJcbiIpOworICAg
ICAgICBkYXRhTG9nKCIgIHZhciBsaW5rczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhibG9j
ay0+dmFyaWFibGVzQXRUYWlsLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nKCJc
biIpOwogICAgIH0KIH0KIApAQCAtMzYyLDYgKzM3Nyw1NCBAQCB2b2lkIEdyYXBoOjpwcmVkaWN0
QXJndW1lbnRUeXBlcygpCiAgICAgfQogfQogCit2b2lkIEdyYXBoOjpoYW5kbGVTdWNjZXNzb3Io
VmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwg
QmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKK3sKKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3Ig
PSBtX2Jsb2Nrc1tzdWNjZXNzb3JJbmRleF0uZ2V0KCk7CisgICAgaWYgKCFzdWNjZXNzb3ItPmlz
UmVhY2hhYmxlKSB7CisgICAgICAgIHN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUgPSB0cnVlOworICAg
ICAgICB3b3JrbGlzdC5hcHBlbmQoc3VjY2Vzc29ySW5kZXgpOworICAgIH0KKyAgICAKKyAgICBz
dWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChibG9ja0luZGV4KTsKK30KKwordm9pZCBH
cmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKK3sKKyAgICBWZWN0b3I8QmxvY2tJbmRleCwg
MTY+IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LmFwcGVuZCgwKTsKKyAgICBtX2Jsb2Nrc1swXS0+
aXNSZWFjaGFibGUgPSB0cnVlOworICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIEJsb2NrSW5kZXggaW5kZXggPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIHdvcmts
aXN0LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ibG9ja3NbaW5kZXhdLmdldCgpOworICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGlua2VkKTsK
KyAgICAgICAgCisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChibG9jay0+bGFzdCgpKTsKKyAgICAg
ICAgQVNTRVJUKG5vZGUuaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2Rl
LmlzSnVtcCgpKQorICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwg
bm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGVsc2UgaWYgKG5vZGUuaXNCcmFuY2go
KSkgeworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS50
YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3Qs
IGluZGV4LCBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQoreworICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYmxvY2stPmlzUmVh
Y2hhYmxlID0gZmFsc2U7CisgICAgICAgIGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5jbGVhcigpOwor
ICAgIH0KKyAgICAKKyAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKK30KKwogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDYgKzM0Niw3OCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBpc0NhcHR1cmVkKHN0YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVy
KSk7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoQmFzaWNCbG9jayog
YmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3QoKSkubnVtU3VjY2Vz
c29ycygpOworICAgIH0KKyAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBibG9j
aywgdW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQoYmxvY2stPmxhc3Qo
KSkuc3VjY2Vzc29yKGluZGV4KTsKKyAgICB9CisgICAgQmxvY2tJbmRleCBzdWNjZXNzb3JGb3JD
b25kaXRpb24oQmFzaWNCbG9jayogYmxvY2ssIGJvb2wgY29uZGl0aW9uKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGF0KGJsb2NrLT5sYXN0KCkpLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRp
b24pOworICAgIH0KKyAgICAKKyAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUmIG5v
ZGUpCisgICAgeworICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBhdChub2RlLmNoaWxkMSgp
KS5wcmVkaWN0aW9uKCk7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBhdChub2RlLmNo
aWxkMigpKS5wcmVkaWN0aW9uKCk7CisgICAgICAgIHJldHVybiBpc051bWJlclByZWRpY3Rpb24o
bGVmdCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBieVZhbElzUHVyZShOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGUu
Y2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQorICAgICAgICAgICAgJiYgKChub2Rl
Lm9wKCkgPT0gUHV0QnlWYWwgfHwgbm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpCisgICAgICAg
ICAgICAgICAgPyBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlQcmVkaWN0aW9uKGF0KG5vZGUuY2hp
bGQxKCkpLnByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgICAgICA6IGlzQWN0aW9uYWJsZUFycmF5
UHJlZGljdGlvbihhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkpKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBpZiAo
bm9kZS5mbGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKCEobm9kZS5mbGFncygpICYgTm9kZU1pZ2h0Q2xvYmJlcikpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAg
ICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgIGNh
c2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAg
Y2FzZSBDb21wYXJlR3JlYXRlckVxOgorICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAg
ICAgIHJldHVybiAhaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSk7CisgICAgICAgIGNhc2UgR2V0
QnlWYWw6CisgICAgICAgICAgICByZXR1cm4gIWJ5VmFsSXNQdXJlKG5vZGUpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsgLy8gSWYgYnkgc29tZSBvZGRpdHkgd2UgaGl0IHRoaXMgY2FzZSBpbiByZWxl
YXNlIGJ1aWxkIGl0J3Mgc2FmZXIgdG8gaGF2ZSBDU0UgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBjbG9iYmVyc1dvcmxkKGF0KG5vZGVJbmRleCkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOworICAgIHZv
aWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICAKKyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbihO
b2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJB
cmdzKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgcmV0
dXJuIEFkamFjZW5jeUxpc3RTaXplOworICAgIH0KKyAgICAKKyAgICBFZGdlIGNoaWxkKE5vZGUm
IG5vZGUsIHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKQorICAgICAgICAgICAgcmV0dXJuIG1fdmFyQXJnQ2hpbGRyZW5bbm9k
ZS5maXJzdENoaWxkKCkgKyBpbmRleF07CisgICAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuLmNo
aWxkKGluZGV4KTsKKyAgICB9CisgICAgCiAgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7
CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRC
bG9jazsKQEAgLTM2NCw2ICs0MzYsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0
ZXJTbG90czsKIHByaXZhdGU6CiAgICAgCisgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9y
PEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJ
bmRleCBzdWNjZXNzb3JJbmRleCk7CisgICAgCiAgICAgYm9vbCBhZGRJbW1lZGlhdGVTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKE5vZGUmIGFkZCwgTm9kZSYgdmFyaWFibGUsIE5vZGUmIGltbWVkaWF0
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpbW1lZGlhdGUuaGFzQ29uc3RhbnQoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcg
Kzc1LDcgQEAgc3RydWN0IE9wSW5mbyB7CiAvLyBOb2RlIHJlcHJlc2VudHMgYSBzaW5nbGUgb3Bl
cmF0aW9uIGluIHRoZSBkYXRhIGZsb3cgZ3JhcGguCiBzdHJ1Y3QgTm9kZSB7CiAgICAgZW51bSBW
YXJBcmdUYWcgeyBWYXJBcmcgfTsKLQorICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0
aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9kZShOb2RlVHlw
ZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBO
b2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAg
ICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKQEAgLTIwMiw3ICsyMDIsOCBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIG1fb3AgPSBKU0NvbnN0YW50OwogICAgICAgICBpZiAobV9mbGFncyAm
IE5vZGVNdXN0R2VuZXJhdGUpCiAgICAgICAgICAgICBtX3JlZkNvdW50LS07Ci0gICAgICAgIG1f
ZmxhZ3MgJj0gfk5vZGVNdXN0R2VuZXJhdGU7CisgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBO
b2RlQ2xvYmJlcnNXb3JsZCkpOworICAgICAgICBtX2ZsYWdzICY9IH4oTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVNaWdodENsb2JiZXIpOwogICAgICAgICBtX29wSW5mbyA9IGNvbnN0YW50TnVtYmVy
OwogICAgICAgICBjaGlsZHJlbi5yZXNldCgpOwogICAgIH0KQEAgLTQ2OCw2ICs0NjksMzcgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8yOwogICAgIH0KICAgICAKKyAg
ICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkg
eworICAgICAgICBjYXNlIEp1bXA6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2Fz
ZSBCcmFuY2g6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEJsb2NrSW5kZXgg
c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbmRleCkg
eworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICByZXR1cm4gdGFrZW5CbG9ja0luZGV4KCk7
CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiBub3RUYWtlbkJsb2NrSW5kZXgo
KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuIE5vQmxvY2s7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
QmxvY2tJbmRleCBzdWNjZXNzb3JGb3JDb25kaXRpb24oYm9vbCBjb25kaXRpb24pCisgICAgewor
ICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7CisgICAgICAgIHJldHVybiBjb25kaXRpb24gPyB0
YWtlbkJsb2NrSW5kZXgoKSA6IG5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIH0KKyAgICAKICAg
ICBib29sIGhhc0hlYXBQcmVkaWN0aW9uKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24g
MTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIG1hY3JvKElzU3RyaW5nLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3Jv
KElzT2JqZWN0LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKElzRnVuY3Rpb24sIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEJvb2xl
YW4gfCBOb2RlTWlnaHRDbG9iYmVyKSBcCisgICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3Vs
dEJvb2xlYW4pIFwKICAgICBtYWNybyhUb1ByaW1pdGl2ZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oU3RyQ2F0LCBOb2Rl
UmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJl
cnNXb3JsZCkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+Z2V0
SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICBBU1NFUlQoIWNvZGVCbG9j
ay0+aml0Q29kZU1hcCgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1iZXJPZkRGR09TUkVu
dHJpZXMoKSk7CiAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgIGRhdGFMb2coIk9T
UiBpbiAlcCglcCkgZnJvbSBiYyMldVxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCksIGJ5dGVjb2RlSW5kZXgpOwpAQCAtNTEsNiArNTAsMTMgQEAgdm9pZCogcHJlcGFyZU9T
UkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9j
ay0+ZGZnT1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICAK
KyAgICBpZiAoIWVudHJ5KSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAg
ZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB0aGUgZW50cnlwb2ludCB3YXMgb3B0aW1p
emVkIG91dC5cbiIpOworI2VuZGlmCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKICAg
ICBBU1NFUlQoZW50cnktPm1fYnl0ZWNvZGVJbmRleCA9PSBieXRlY29kZUluZGV4KTsKICAgICAK
ICAgICAvLyBUaGUgY29kZSBiZWxvdyBjaGVja3MgaWYgaXQgaXMgc2FmZSB0byBwZXJmb3JtIE9T
UiBlbnRyeS4gSXQgbWF5IGZpbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyMSw3ICsxMTIx
LDcgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gZGZnQ29udmVydEpTVmFsdWVUbwogICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9Cb29sZWFuKGV4ZWMpOworICAgIHJldHVybiBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wKS50b0Jvb2xlYW4oKTsKIH0KIAogI2lmIERGR19FTkFC
TEUoVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlMVVJFKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKQEAgLTM2LDEwICszOCwxMiBAQCB2b2lkIFBoYXNlOjpiZWdpblBoYXNl
KCkKICAgICBkYXRhTG9nKCJCZWdpbm5pbmcgREZHIHBoYXNlICVzLlxuIiwgbV9uYW1lKTsKICAg
ICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgJXM6XG4iLCBtX25hbWUpOwogICAgIG1fZ3JhcGguZHVt
cCgpOworICAgIHZhbGlkYXRlKG1fZ3JhcGgsIERvbnREdW1wR3JhcGgpOwogfQogCiB2b2lkIFBo
YXNlOjplbmRQaGFzZSgpCiB7CisgICAgdmFsaWRhdGUobV9ncmFwaCwgRHVtcEdyYXBoKTsKIH0K
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCShyZXZpc2lv
biAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTczLDEwICs3MywxMCBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgUGhhc2VUeXBlPgotdm9pZCBydW5QaGFzZShHcmFwaCYgZ3JhcGgpCitib29sIHJ1blBo
YXNlKEdyYXBoJiBncmFwaCkKIHsKICAgICBQaGFzZVR5cGUgcGhhc2UoZ3JhcGgpOwotICAgIHBo
YXNlLnJ1bigpOworICAgIHJldHVybiBwaGFzZS5ydW4oKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgbV9jb3VudCA9IDA7
CkBAIC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRvUm91bmRPZkRvdWJsZVZv
dGluZygpOwogICAgICAgICAgICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKICAgICAgICAgfSB3aGls
ZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICAKIHByaXZhdGU6CkBAIC04MzEsOSArODMzLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKICAg
ICAKLXZvaWQgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYgZ3JhcGgpCitib29s
IHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBo
YXNlPFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBo
YXNlPFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGFy
aXRobWV0aWMgbm9kZXMpIGRvIG5vdCBxdWFsaWZ5IGZvciBhbnkgb2YgdGhlc2UgY2F0ZWdvcmll
cy4gQnV0IGFmdGVyIHJ1bm5pbmcKIC8vIHRoaXMgcGhhc2UsIHdlJ2xsIGhhdmUgZnVsbCBpbmZv
cm1hdGlvbiBmb3IgdGhlIGV4cGVjdGVkIHR5cGUgb2YgZWFjaCBub2RlLgogCi12b2lkIHBlcmZv
cm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybVByZWRpY3Rpb25Q
cm9wYWdhdGlvbihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHOjpQaGFzZQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGJv
b2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBkbyB7CkBAIC02Myw3ICs2Myw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCisg
ICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNjYs
OSArMTY3LDkgQEAgcHJpdmF0ZToKIAogfTsKIAotdm9pZCBwZXJmb3JtUmVkdW5kYW50UGhpRWxp
bWluYXRpb24oR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRp
b24oR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNlPFJlZHVuZGFudFBoaUVsaW1pbmF0aW9u
UGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UmVkdW5kYW50UGhpRWxpbWluYXRp
b25QaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBo
aUVsaW1pbmF0aW9uUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBXZSBpbnNlcnRlZCBtYW55IGNh
bi1iZS1yZWR1bmRhbnQgUGhpIG5vZGVzIHdoZW4gYnVpbGRpbmcgdGhlIGdyYXBoLgogLy8gVGhp
cyBwaGFzZSB3aWxsIGp1c3QgcmVtb3ZlIHRoZW0uCiAKLXZvaWQgcGVyZm9ybVJlZHVuZGFudFBo
aUVsaW1pbmF0aW9uKEdyYXBoJik7Citib29sIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlv
bihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTIwLDEyICsxMjAsMjUgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHVz
ZSBjb3VudCAmIGFkZCB0byB0aGUgZnJlZSBsaXN0LgogICAgICAgICAgICAgbV91c2VkW2luZGV4
XSA9IDA7CiAgICAgICAgICAgICBtX2ZyZWUuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgfSBlbHNl
IHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAg
ICBkYXRhTG9nKCIgVmlydHVhbCByZWdpc3RlciAldSBpcyBhdCAldS8ldSB1c2VzLiIsIGluZGV4
LCBtX3VzZWRbaW5kZXhdLCBub2RlLnJlZkNvdW50KCkpOworI2VuZGlmCiAgICAgICAgIH0KICAg
ICB9CiAgICAgdm9pZCB1c2UoRWRnZSBjaGlsZCkKICAgICB7CiAgICAgICAgIHVzZShjaGlsZC5p
bmRleFVuY2hlY2tlZCgpKTsKICAgICB9CisgICAgCisgICAgdm9pZCB1c2VJZkhhc1Jlc3VsdChF
ZGdlIGNoaWxkKQorICAgIHsKKyAgICAgICAgaWYgKCFjaGlsZCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgaWYgKCFtX2dyYXBoW2NoaWxkXS5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgdXNlKGNoaWxkKTsKKyAgICB9CiAKICAgICB1bnNpZ25lZCBoaWdo
V2F0ZXJtYXJrKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0NSw3ICs2NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBoCiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9j
a0luZGV4KCk7CiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5C
bG9ja0luZGV4KCk7CiAgICAgCi0gICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAg
ICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsK
ICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBub3RUYWtl
bjsKQEAgLTcxNCw3ICs3MTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZVBlZXBoCiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRo
ZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0
aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0
aHJvdWdoLgotICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAgaWYgKHRha2Vu
ID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGNvbmQgPSBKSVRDb21waWxlcjo6aW52ZXJ0KGNv
bmQpOwogICAgICAgICBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Olplcm87CiAg
ICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CkBAIC04NjYsNyArODY2LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogCiAgICAgLy8gVGhlIGJyYW5jaCBp
bnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFr
ZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5j
aCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KLSAgICBpZiAodGFrZW4gPT0gKG1f
YmxvY2sgKyAxKSkgeworICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBp
bnZlcnQgPSAhaW52ZXJ0OwogICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwogICAgICAg
ICB0YWtlbiA9IG5vdFRha2VuOwpAQCAtMTc3NCw3ICsxNzc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJl
c3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKIAotICAg
ICAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgICAgICBpZiAodGFrZW4gPT0g
bmV4dEJsb2NrKCkpIHsKICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpa
ZXJvOwogICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgIHRh
a2VuID0gbm90VGFrZW47CkBAIC0xNzkzLDcgKzE3OTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7
CisgICAgICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgICAgICAg
ICBpbnZlcnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47
CiAgICAgICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKQEAgLTI4NjAsNyArMjg2MCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRh
a2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0Qmxv
Y2soKSkgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpaZXJv
OwogICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgICAgICAg
ICAgdGFrZW4gPSBub3RUYWtlbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjA0LDcgKzYwNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
UGVlcGgKICAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgo
KTsKICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5k
ZXgoKTsKICAgICAKLSAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgIGlmICh0
YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwogICAgICAg
ICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwpAQCAt
NjcxLDcgKzY3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgK
IAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2Vu
IGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRh
a2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2gu
Ci0gICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICBpZiAodGFrZW4gPT0gbmV4
dEJsb2NrKCkpIHsKICAgICAgICAgY29uZCA9IEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCk7CiAg
ICAgICAgIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6WmVybzsKICAgICAgICAg
QmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKQEAgLTgxMyw3ICs4MTMsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0
aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBu
ZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRp
dGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgotICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayAr
IDEpKSB7CisgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVydCA9
ICFpbnZlcnQ7CiAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgIHRha2Vu
ID0gbm90VGFrZW47CkBAIC0xODM4LDcgKzE4MzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7Cisg
ICAgICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgICAgICAgICBp
bnZlcnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAg
ICAgICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKQEAgLTE4NjYsNyArMTg2Niw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICAgICAgICAgIGlmIChp
c0Jvb2xlYW5QcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KSB7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25k
aXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgICAgICAgICAgICAg
IGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICAgICAgICAgICAgICBjb25kaXRp
b24gPSBNYWNyb0Fzc2VtYmxlcjo6WmVybzsKICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRl
eCB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKQEAg
LTI4NTIsNyArMjg1Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRp
dGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgICAgIGlm
ICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1h
Y3JvQXNzZW1ibGVyOjpaZXJvOwogICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFr
ZW47CiAgICAgICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODI3LDcgKzgyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZU9iamUKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpFcXVhbDsKICAgICAKLSAgICBpZiAodGFr
ZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewog
ICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWw7CiAgICAgICAgIEJs
b2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CkBAIC04NTcs
NyArODU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZQogCiAg
ICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxv
Y2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4g
JiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KLSAg
ICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgIGlmICh0YWtlbiA9PSBuZXh0Qmxv
Y2soKSkgewogICAgICAgICBjb25kaXRpb24gPSBKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmRpdGlv
bik7CiAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90
VGFrZW47CkBAIC0xMjgwLDggKzEyODAsMTEgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSgpCiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBHUFJJbmZvOjpyZWdUMCk7
CiAKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKLSAgICBmb3IgKG1fYmxvY2sgPSAwOyBt
X2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrbV9ibG9jaykKLSAgICAg
ICAgY29tcGlsZSgqbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXSk7CisgICAgZm9yICht
X2Jsb2NrID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21f
YmxvY2spIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxv
Y2tzW21fYmxvY2tdLmdldCgpOworICAgICAgICBpZiAoYmxvY2spCisgICAgICAgICAgICBjb21w
aWxlKCpibG9jayk7CisgICAgfQogICAgIGxpbmtCcmFuY2hlcygpOwogICAgIHJldHVybiB0cnVl
OwogfQpAQCAtMTI4OSw4ICsxMjkyLDEwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
KQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcygpCiB7CiAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5tX2Js
b2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrJiBibG9jayA9
ICptX2ppdC5ncmFwaCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhdOwotICAgICAgICBpZiAoIWJsb2Nr
LmlzT1NSVGFyZ2V0KQorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBoKCku
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBuZWVkIHRvIGNy
ZWF0ZSBPU1IgZW50cnkgdHJhbXBvbGluZXMgd2hlbiB1c2luZyBlZGdlIGNvZGUKQEAgLTEzMTIs
OSArMTMxNywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmllcyhMaW5rCiB7
CiAgICAgdW5zaWduZWQgb3NyRW50cnlJbmRleCA9IDA7CiAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrJiBibG9jayA9ICptX2ppdC5ncmFw
aCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhdOwotICAgICAgICBpZiAoYmxvY2suaXNPU1JUYXJnZXQp
Ci0gICAgICAgICAgICBtX2ppdC5ub3RpY2VPU1JFbnRyeShibG9jaywgbV9vc3JFbnRyeUhlYWRz
W29zckVudHJ5SW5kZXgrK10sIGxpbmtCdWZmZXIpOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNP
U1JUYXJnZXQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9qaXQubm90aWNlT1NS
RW50cnkoKmJsb2NrLCBtX29zckVudHJ5SGVhZHNbb3NyRW50cnlJbmRleCsrXSwgbGlua0J1ZmZl
cik7CiAgICAgfQogICAgIEFTU0VSVChvc3JFbnRyeUluZGV4ID09IG1fb3NyRW50cnlIZWFkcy5z
aXplKCkpOwogfQpAQCAtMjg1Niw3ICsyODY0LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVN0cmljdEVxRm9yQwogICAgICAgICAKICAgICAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVj
dGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgICAgIC8vIElmIHRha2Vu
IGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2gg
Y29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCi0gICAgICAgIGlmICh0YWtlbiA9PSAo
bV9ibG9jayArIDEpKSB7CisgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAg
ICAgICAgICAgY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsOwogICAgICAgICAg
ICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47
CkBAIC0zMTI2LDcgKzMxMzQsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhw
RXhlYyhOCiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9j
a0luZGV4KCk7CiAgICAgCiAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKLSAgICBpZiAodGFrZW4g
PT0gKG1fYmxvY2sgKyAxKSkgeworICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAg
ICAgICBpbnZlcnQgPSB0cnVlOwogICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwogICAg
ICAgICB0YWtlbiA9IG5vdFRha2VuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIs
NiArMTkyLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7
CiAgICAgfQogICAgIAorICAgIEJsb2NrSW5kZXggbmV4dEJsb2NrKCkKKyAgICB7CisgICAgICAg
IGZvciAoQmxvY2tJbmRleCByZXN1bHQgPSBtX2Jsb2NrICsgMTsgOyByZXN1bHQrKykgeworICAg
ICAgICAgICAgaWYgKHJlc3VsdCA+PSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTm9CbG9jazsKKyAgICAgICAgICAgIGlmIChtX2ppdC5ncmFw
aCgpLm1fYmxvY2tzW3Jlc3VsdF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKICAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZUluZGV4LCBE
YXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwogICAgIEZQUlJlZyBmaWxsRG91YmxlKE5vZGVJbmRl
eCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTMwNiw3ICszMTYsMTAgQEAgcHVibGljOgogICAg
IC8vIENhbGxlZCBvbiBhbiBvcGVyYW5kIG9uY2UgaXQgaGFzIGJlZW4gY29uc3VtZWQgYnkgYSBw
YXJlbnQgbm9kZS4KICAgICB2b2lkIHVzZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGF0KG5vZGVJbmRleCkudmly
dHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAg
ICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3Rlcigp
OwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVh
bFJlZ2lzdGVyXTsKIAogICAgICAgICAvLyB1c2UoKSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFs
dWUgYmVjb21lcyBkZWFkLCBhbmQgYW55CkBAIC0xODUyLDcgKzE4NjUsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBpZiAoaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKICAgICAg
ICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGlmIChkZXN0aW5hdGlv
biA9PSBtX2Jsb2NrICsgMQorICAgICAgICBpZiAoZGVzdGluYXRpb24gPT0gbmV4dEJsb2NrKCkK
ICAgICAgICAgICAgICYmIGZhbGxUaHJvdWdoTW9kZSA9PSBBdEZhbGxUaHJvdWdoUG9pbnQpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3Rp
bmF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKyNpZiBERkdf
RU5BQkxFKFZBTElEQVRJT04pCisKK2NsYXNzIFZhbGlkYXRlIHsKK3B1YmxpYzoKKyAgICBWYWxp
ZGF0ZShHcmFwaCYgZ3JhcGgsIEdyYXBoRHVtcE1vZGUgZ3JhcGhEdW1wTW9kZSkKKyAgICAgICAg
OiBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1fZ3JhcGhEdW1wTW9kZShncmFwaER1bXBNb2Rl
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgI2RlZmluZSBWQUxJREFURShjb250ZXh0LCBhc3Nl
cnRpb24pIGRvIHsgXAorICAgICAgICBpZiAoIShhc3NlcnRpb24pKSB7IFwKKyAgICAgICAgICAg
IGRhdGFMb2coIlxuXG5cbkF0ICIpOyBcCisgICAgICAgICAgICByZXBvcnRWYWxpZGF0aW9uQ29u
dGV4dCBjb250ZXh0OyBcCisgICAgICAgICAgICBkYXRhTG9nKCI6IHZhbGlkYXRpb24gJXMgKCVz
OiVkKSBmYWlsZWQuXG4iLCAjYXNzZXJ0aW9uLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisgICAg
ICAgICAgICBkdW1wR3JhcGhJZkFwcHJvcHJpYXRlKCk7IFwKKyAgICAgICAgICAgIFdURlJlcG9y
dEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9O
LCAjYXNzZXJ0aW9uKTsgXAorICAgICAgICAgICAgQ1JBU0goKTsgXAorICAgICAgICB9IFwKKyAg
ICB9IHdoaWxlICgwKQorICAgIAorICAgICNkZWZpbmUgVl9FUVVBTChjb250ZXh0LCBsZWZ0LCBy
aWdodCkgZG8geyBcCisgICAgICAgIGlmIChsZWZ0ICE9IHJpZ2h0KSB7IFwKKyAgICAgICAgICAg
IGRhdGFMb2coIlxuXG5cbkF0ICIpOyBcCisgICAgICAgICAgICByZXBvcnRWYWxpZGF0aW9uQ29u
dGV4dCBjb250ZXh0OyBcCisgICAgICAgICAgICBkYXRhTG9nKCI6IHZhbGlkYXRpb24gKCVzID0g
IiwgI2xlZnQpOyBcCisgICAgICAgICAgICBkdW1wRGF0YShsZWZ0KTsgXAorICAgICAgICAgICAg
ZGF0YUxvZygiKSA9PSAoJXMgPSAiLCAjcmlnaHQpOyBcCisgICAgICAgICAgICBkdW1wRGF0YShy
aWdodCk7IFwKKyAgICAgICAgICAgIGRhdGFMb2coIikgKCVzOiVkKSBmYWlsZWQuXG4iLCBfX0ZJ
TEVfXywgX19MSU5FX18pOyBcCisgICAgICAgICAgICBkdW1wR3JhcGhJZkFwcHJvcHJpYXRlKCk7
IFwKKyAgICAgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElO
RV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjbGVmdCAiID09ICIgI3JpZ2h0KTsgXAorICAgICAg
ICAgICAgQ1JBU0goKTsgXAorICAgICAgICB9IFwKKyAgICB9IHdoaWxlICgwKQorCisgICAgdm9p
ZCB2YWxpZGF0ZSgpCisgICAgeworICAgICAgICAvLyBOQi4gVGhpcyBjb2RlIGlzIG5vdCB3cml0
dGVuIGZvciBwZXJmb3JtYW5jZSwgc2luY2UgaXQgaXMgbm90IGludGVuZGVkIHRvIHJ1bgorICAg
ICAgICAvLyBpbiByZWxlYXNlIGJ1aWxkcy4KKyAgICAgICAgCisgICAgICAgIC8vIFZhbGlkYXRl
IHJlZiBjb3VudHMgYW5kIHVzZXMuCisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbXlSZWZDb3Vu
dHM7CisgICAgICAgIG15UmVmQ291bnRzLmZpbGwoMCwgbV9ncmFwaC5zaXplKCkpOworICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1f
YmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFi
bG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPm5vZGVJbmRleChpKTsKKyAg
ICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAg
ICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFw
aC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRn
ZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CisgICAgICAgICAgICAgICAgICAgIGlmICghZWRn
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgbXlSZWZDb3VudHNbZWRnZS5pbmRleCgpXSsrOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIEknbSBhIEZs
dXNoLCBQaGFudG9tLCBHZXRMb2NhbCwgb3IgUGhpLCBteSBjaGlsZHJlbiBzaG91bGQgaGFzUmVz
dWx0KCkuCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRv
bToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
SW5kZXgsIGVkZ2UpLCBtX2dyYXBoW2VkZ2VdLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2Nr
SW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPm51bU5vZGVzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSBibG9jay0+bm9kZUluZGV4KGkpOworICAgICAgICAgICAgICAgIFZfRVFVQUwo
KG5vZGVJbmRleCksIG15UmVmQ291bnRzW25vZGVJbmRleF0sIG1fZ3JhcGhbbm9kZUluZGV4XS5h
ZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBHcmFwaER1bXBNb2RlIG1fZ3Jh
cGhEdW1wTW9kZTsKKyAgICAKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBkYXRhTG9nKCJAJXUiLCBub2RlSW5kZXgp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGVJbmRl
eCBub2RlSW5kZXgsIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGRhdGFMb2coIkAldSAtPiAl
c0AldSIsIG5vZGVJbmRleCwgdXNlS2luZFRvU3RyaW5nKGVkZ2UudXNlS2luZCgpKSwgZWRnZS5p
bmRleCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wRGF0YSh1bnNpZ25lZCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGRhdGFMb2coIiV1IiwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGR1bXBHcmFwaElmQXBwcm9wcmlhdGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGhE
dW1wTW9kZSA9PSBEb250RHVtcEdyYXBoKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBk
YXRhTG9nKCJHcmFwaCBhdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgbV9ncmFwaC5k
dW1wKCk7CisgICAgfQorfTsKKwordm9pZCB2YWxpZGF0ZShHcmFwaCYgZ3JhcGgsIEdyYXBoRHVt
cE1vZGUgZ3JhcGhEdW1wTW9kZSkKK3sKKyAgICBWYWxpZGF0ZSB2YWxpZGF0aW9uT2JqZWN0KGdy
YXBoLCBncmFwaER1bXBNb2RlKTsKKyAgICB2YWxpZGF0aW9uT2JqZWN0LnZhbGlkYXRlKCk7Cit9
CisKKyNlbmRpZiAvLyBERkdfRU5BQkxFKFZBTElEQVRJT04pCisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHVmFsaWRhdGVfaAorI2RlZmluZSBERkdWYWxpZGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgi
CisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitlbnVtIEdyYXBoRHVtcE1vZGUgeyBEb250RHVtcEdyYXBoLCBEdW1wR3JhcGggfTsKKwor
I2lmIERGR19FTkFCTEUoVkFMSURBVElPTikKK3ZvaWQgdmFsaWRhdGUoR3JhcGgmLCBHcmFwaER1
bXBNb2RlKTsKKyNlbHNlCitpbmxpbmUgdm9pZCB2YWxpZGF0ZShHcmFwaCYsIEdyYXBoRHVtcE1v
ZGUpIHsgfQorI2VuZGlmCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUGhhc2VfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShERUJV
R19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKCJQcmVzZXJ2ZWQgdmFyczogIik7CkBAIC01NCw2
ICs1NCwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleEluQmxvY2sg
PSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewogICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC02NiwyMiAr
NzAsMjEgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hv
dWxkR2VuZXJhdGUoKSB8fCBub2RlLm9wKCkgPT0gUGhpIHx8IG5vZGUub3AoKSA9PSBGbHVzaCkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVzIGluIHRoZSBn
cmFwaCwgcmVmZXJlbmNpbmcKLSAgICAgICAgICAgICAgICAvLyByZXN1bHRzIGZyb20gcHJpb3Ig
YmxvY2tzLgotICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0gR2V0TG9jYWwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGNhbGwgdXNlIG9uIGFsbCBvZiB0aGUgY3VycmVu
dCBub2RlJ3MgY2hpbGRyZW4sIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgLy8gYWxsb2NhdGUg
YSBWaXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8gc28gaW4gdGhpcwotICAgICAg
ICAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3Qg
dXNlLCBhbmQgYQotICAgICAgICAgICAgICAgICAgICAvLyBWaXJ0dWFsUmVnaXN0ZXIgaXMgZnJl
ZWQsIHRoZW4gaXQgbWF5IGJlIHJldXNlZCBmb3Igbm9kZS4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4
IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UobV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQyKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0uaGFzUmVzdWx0KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIEZpcnN0LCBjYWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNo
aWxkcmVuLCB0aGVuCisgICAgICAgICAgICAgICAgLy8gYWxsb2NhdGUgYSBWaXJ0dWFsUmVnaXN0
ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8gc28gaW4gdGhpcworICAgICAgICAgICAgICAgIC8vIG9y
ZGVyIHNvIHRoYXQgaWYgYSBjaGlsZCBpcyBvbiBpdHMgbGFzdCB1c2UsIGFuZCBhCisgICAgICAg
ICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVz
ZWQgZm9yIG5vZGUuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVt
Q2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9h
cmQudXNlSWZIYXNSZXN1bHQobV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51
c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc2NvcmVC
b2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAgICAg
c2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMygpKTsKICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCkBAIC0xMTQsMTIg
KzExNywxNCBAQCBwdWJsaWM6CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAg
ICBkYXRhTG9nKCJOdW0gY2FsbGVlIHJlZ2lzdGVyczogJXVcbiIsIGNhbGxlZVJlZ2lzdGVycyk7
CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07CiAKLXZv
aWQgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmIGdyYXBoKQorYm9vbCBw
ZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVu
UGhhc2U8VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlPihncmFwaCk7CisgICAgcmV0dXJu
IHJ1blBoYXNlPFZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZT4oZ3JhcGgpOwogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgJ
KHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcg
QEAgY2xhc3MgR3JhcGg7CiAvLyBmb3IgbG9vay11cCB0YWJsZXMgZm9yIHRoZSBsaW5lYXIgc2Nh
biByZWdpc3RlciBhbGxvY2F0b3IgdGhhdCB0aGUgYmFja2VuZAogLy8gdXNlcy4KIAotdm9pZCBw
ZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYpOworYm9vbCBwZXJmb3JtVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODU0LDcgKzg1NCw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2Vl
cFRvZ2cKICAgICBkb3VibGUgbGFzdEdDRW5kVGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKICAg
ICBtX2xhc3RHQ0xlbmd0aCA9IGxhc3RHQ0VuZFRpbWUgLSBsYXN0R0NTdGFydFRpbWU7CiAgICAg
SkFWQVNDUklQVENPUkVfR0NfRU5EKCk7Ci0KKyAgICAKICAgICAoKm1fYWN0aXZpdHlDYWxsYmFj
aykoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTg1
LDcgKzI1ODUsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAg
ICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBp
bnQgc3JjID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jv
b2xlYW4oIWNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSk7
CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFjYWxsRnJhbWUtPnIoc3JjKS5q
c1ZhbHVlKCkudG9Cb29sZWFuKCkpOwogICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAg
ICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0OwogCkBAIC0zOTA1LDcg
KzM5MDUsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgKi8KICAgICAgICAgaW50
IGNvbmQgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUu
b3BlcmFuZDsKLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29s
ZWFuKGNhbGxGcmFtZSkpIHsKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVl
KCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAg
ICBDSEVDS19GT1JfVElNRU9VVCgpOwogICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpA
QCAtMzkyNSw3ICszOTI1LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgICovCiAg
ICAgICAgIGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9
IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmICghY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFs
dWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihj
b25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7
CiAgICAgICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwogICAgICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwpAQCAtMzk0Miw3ICszOTQyLDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAg
ICAgICAgKi8KICAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBp
bnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihj
b25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNhbGxGcmFtZSkpIHsKKyAgICAgICAgaWYgKGNhbGxG
cmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyAr
PSB0YXJnZXQ7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgICAgIH0KQEAg
LTM5NTgsNyArMzk1OCw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICovCiAgICAg
ICAgIGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaW50IHRhcmdldCA9IHZQ
Q1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmICghY2FsbEZyYW1lLT5yKGNvbmQpLmpzVmFsdWUo
KS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihjb25k
KS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAg
ICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg1NSw5
ICsyODU1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAg
ICAgSlNWYWx1ZSBzcmMgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwogCi0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLQotICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNCb29sZWFuKCFzcmMudG9Cb29sZWFuKGNhbGxGcmFtZSkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNCb29sZWFuKCFzcmMudG9Cb29sZWFuKCkpOwogICAgIENIRUNLX0ZPUl9F
WENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwog
fQpAQCAtMjg2OCw5ICsyODY2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oaW50LCBvcF9qdHJ1
ZSkKIAogICAgIEpTVmFsdWUgc3JjMSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAK
LSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotCi0gICAg
Ym9vbCByZXN1bHQgPSBzcmMxLnRvQm9vbGVhbihjYWxsRnJhbWUpOworICAgIGJvb2wgcmVzdWx0
ID0gc3JjMS50b0Jvb2xlYW4oKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
Nyw3ICs1MDcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X3JlZ2V4CiBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbm90KQogewogICAgIExMSU5UX0JFR0lOKCk7
Ci0gICAgTExJTlRfUkVUVVJOKGpzQm9vbGVhbighTExJTlRfT1BfQygyKS5qc1ZhbHVlKCkudG9C
b29sZWFuKGV4ZWMpKSk7CisgICAgTExJTlRfUkVUVVJOKGpzQm9vbGVhbighTExJTlRfT1BfQygy
KS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2VxKQpAQCAtMTExMCwxMyArMTExMCwxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfam1wX3Njb3BlCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfanRydWUp
CiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBMTElOVF9CUkFOQ0gob3BfanRydWUsIExMSU5U
X09QX0MoMSkuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7CisgICAgTExJTlRfQlJBTkNIKG9w
X2p0cnVlLCBMTElOVF9PUF9DKDEpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSk7CiB9CiAKIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qZmFsc2UpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsK
LSAgICBMTElOVF9CUkFOQ0gob3BfamZhbHNlLCAhTExJTlRfT1BfQygxKS5qc1ZhbHVlKCkudG9C
b29sZWFuKGV4ZWMpKTsKKyAgICBMTElOVF9CUkFOQ0gob3BfamZhbHNlLCAhTExJTlRfT1BfQygx
KS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfamxlc3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5Nyw3
ICs3OTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwotICAgICAg
ICAgICAgaWYgKHJlc3VsdC50b0Jvb2xlYW4oZXhlYykpCisgICAgICAgICAgICBpZiAocmVzdWx0
LnRvQm9vbGVhbigpKQogICAgICAgICAgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRl
eChleGVjLCBmaWx0ZXJJbmRleCsrLCB2KTsKICAgICAgICAgfQogICAgICAgICBpZiAoayA9PSBs
ZW5ndGgpCkBAIC04MTgsNyArODE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKIAogICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKTsKLSAgICAgICAgaWYgKHJlc3VsdC50b0Jv
b2xlYW4oZXhlYykpCisgICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFuKCkpCiAgICAgICAgICAg
ICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgZmlsdGVySW5kZXgrKywgdik7CiAg
ICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0QXJyYXkpOwpAQCAtOTE3LDcg
KzkxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAg
ICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50
b0Jvb2xlYW4oY2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpKQorICAgICAgICAgICAgaWYg
KCFyZXN1bHQudG9Cb29sZWFuKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTkzNCw3ICs5MzQs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICAgICAgYm9vbCBwcmVkaWNhdGVSZXN1bHQgPSBjYWxs
KGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhpcywgZWFjaEFyZ3Vt
ZW50cykudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBib29sIHByZWRpY2F0ZVJlc3VsdCA9IGNh
bGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJn
dW1lbnRzKS50b0Jvb2xlYW4oKTsKICAgICAgICAgaWYgKCFwcmVkaWNhdGVSZXN1bHQpIHsKICAg
ICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTEwMjUsNyArMTAyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykp
OwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgICAgICBp
ZiAocmVzdWx0LnRvQm9vbGVhbihjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkpCisgICAg
ICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEw
NDIsNyArMTA0Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgICAgICBib29sIHByZWRpY2F0ZVJl
c3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlz
LCBlYWNoQXJndW1lbnRzKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJvb2wgcHJlZGljYXRl
UmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRo
aXMsIGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbigpOwogICAgICAgICBpZiAocHJlZGljYXRlUmVz
dWx0KSB7CiAgICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4odHJ1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Qm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksNyArNDksNyBAQCB2b2lkIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24o
CiBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3Jl
YXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgp
KS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgb2JqLT5z
ZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFuKGFyZ3MuYXQoMCku
dG9Cb29sZWFuKGV4ZWMpKSk7CisgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwganNCb29sZWFuKGFyZ3MuYXQoMCkudG9Cb29sZWFuKCkpKTsKICAgICByZXR1cm4g
b2JqOwogfQogCkBAIC02OCw3ICs2OCw3IEBAIENvbnN0cnVjdFR5cGUgQm9vbGVhbkNvbnN0cnVj
dG9yOjpnZXRDb24KIC8vIEVDTUEgMTUuNi4xCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xl
YW4oZXhlYykpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihleGVjLT5h
cmd1bWVudCgwKS50b0Jvb2xlYW4oKSkpOwogfQogCiBDYWxsVHlwZSBCb29sZWFuQ29uc3RydWN0
b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtOTYs
NyArOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQmFzaWMgY29udmVyc2lvbnMu
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRl
KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0UHJpbWl0
aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7Ci0g
ICAgICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBib29sIHRv
Qm9vbGVhbigpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBkb3VibGUgdG9OdW1i
ZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0
KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyMiwxMSArNDIyLDYgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iagogICAgICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZXhlYywgb2JqZWN0
LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6
OnRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCiBk
b3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBK
U1ZhbHVlIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDExNDU1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzOCw3ICsxMzgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBK
U1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBO
b1ByZWZlcmVuY2UpIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHRvQm9v
bGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIo
RXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25zdDsKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZyogdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZp
c2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNyBAQCBib29sIEpTU3RyaW5nOjpnZXRQ
cmltaXRpdmVOdW1iZXIoRXhlY1N0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTU3Ry
aW5nOjp0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QKK2Jvb2wgSlNTdHJpbmc6OnRvQm9vbGVh
bigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGVuZ3RoOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUs
NyArMjE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsg
cmV0dXJuIG1fbGVuZ3RoOyB9CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3Rh
dGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIGJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0UHJpbWl0
aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7CiAg
ICAgICAgIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNv
bnN0OwogICAgICAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CkBAIC00MzUs
MjMgKzQzNSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBib29sIGlzSlNTdHJp
bmcoSlNWYWx1ZSB2KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIHYuYXNDZWxsKCktPmNsYXNzSW5m
bygpID09ICZKU1N0cmluZzo6c19pbmZvOyB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU0NlbGw6OnRv
Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgaW5saW5lIGJvb2wgSlNDZWxsOjp0
b0Jvb2xlYW4oKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzU3RyaW5nKCkpIAotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhpcyktPnRvQm9vbGVh
bihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+
KHRoaXMpLT50b0Jvb2xlYW4oKTsKICAgICAgICAgcmV0dXJuICFzdHJ1Y3R1cmUoKS0+dHlwZUlu
Zm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgLy8gLS0tIEpTVmFs
dWUgaW5saW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgCi0gICAgaW5saW5l
IGJvb2wgSlNWYWx1ZTo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICBpbmxp
bmUgYm9vbCBKU1ZhbHVlOjp0b0Jvb2xlYW4oKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlz
SW50MzIoKSkKICAgICAgICAgICAgIHJldHVybiBhc0ludDMyKCk7CiAgICAgICAgIGlmIChpc0Rv
dWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGFzRG91YmxlKCkgPiAwLjAgfHwgYXNEb3VibGUo
KSA8IDAuMDsgLy8gZmFsc2UgZm9yIE5hTgogICAgICAgICBpZiAoaXNDZWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gYXNDZWxsKCktPnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgICAgIHJldHVy
biBhc0NlbGwoKS0+dG9Cb29sZWFuKCk7CiAgICAgICAgIHJldHVybiBpc1RydWUoKTsgLy8gZmFs
c2UsIG51bGwsIGFuZCB1bmRlZmluZWQgYWxsIGNvbnZlcnQgdG8gZmFsc2UuCiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1
ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVm
ZXJlbmNlKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRl
KiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKTsKIAotICAgICAgICBib29sIHRvQm9vbGVhbihF
eGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsKIAogICAg
ICAgICAvLyB0b051bWJlciBjb252ZXJzaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHNpZGUgZWZmZWN0
IGZyZWUgaWYgYW4gZXhjZXB0aW9uIGhhcwogICAgICAgICAvLyBiZWVuIHNldCBpbiB0aGUgRXhl
Y1N0YXRlIGFscmVhZHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNCwxNCArMjE0LDE0IEBAIHN0YXRpYyBib29sIHRvUHJvcGVydHlEZXNjcmlwdG9y
KEV4ZWNTdGEKIAogICAgIFByb3BlcnR5U2xvdCBlbnVtZXJhYmxlU2xvdChkZXNjcmlwdGlvbik7
CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmVudW1lcmFibGUsIGVudW1lcmFibGVTbG90KSkgewotICAgICAgICBkZXNjLnNl
dEVudW1lcmFibGUoZW51bWVyYWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmVudW1lcmFibGUpLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgIGRlc2Muc2V0RW51
bWVyYWJsZShlbnVtZXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuZW51bWVyYWJsZSkudG9Cb29sZWFuKCkpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUHJvcGVydHlT
bG90IGNvbmZpZ3VyYWJsZVNsb3QoZGVzY3JpcHRpb24pOwogICAgIGlmIChkZXNjcmlwdGlvbi0+
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25maWd1cmFibGUs
IGNvbmZpZ3VyYWJsZVNsb3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGNvbmZp
Z3VyYWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZpZ3Vy
YWJsZSkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUoY29u
ZmlndXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uZmln
dXJhYmxlKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yMzYsNyArMjM2LDcgQEAgc3Rh
dGljIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YQogCiAgICAgUHJvcGVydHlTbG90
IHdyaXRhYmxlU2xvdChkZXNjcmlwdGlvbik7CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5nZXRQcm9w
ZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlLCB3cml0YWJsZVNs
b3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0V3JpdGFibGUod3JpdGFibGVTbG90LmdldFZhbHVlKGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSkudG9Cb29sZWFuKGV4ZWMpKTsKKyAg
ICAgICAgZGVzYy5zZXRXcml0YWJsZSh3cml0YWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw5ICsyNDksOSBA
QCB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlCiAgICAgYXNSZWdFeHBD
b25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0SW5wdXQoZXhlYywgdmFsdWUudG9TdHJpbmcoZXhl
YykpOwogfQogCi12b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit2b2lkIHNldFJlZ0V4
cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFzZU9iamVjdCktPnNl
dE11bHRpbGluZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworICAgIGFzUmVnRXhwQ29uc3RydWN0
b3IoYmFzZU9iamVjdCktPnNldE11bHRpbGluZSh2YWx1ZS50b0Jvb2xlYW4oKSk7CiB9CiAKIC8v
IEVDTUEgMTUuMTAuNApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDcsMTEgKzE0NywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
CiAKICAgICBjaGFyIHBvc3RmaXhbNV0gPSB7ICcvJywgMCwgMCwgMCwgMCB9OwogICAgIGludCBp
bmRleCA9IDE7Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuZ2xvYmFsKS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHRoaXNPYmplY3QtPmdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS50b0Jvb2xlYW4oKSkKICAgICAgICAg
cG9zdGZpeFtpbmRleCsrXSA9ICdnJzsKLSAgICBpZiAodGhpc09iamVjdC0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5pZ25vcmVDYXNlKS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYg
KHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaWdub3JlQ2FzZSku
dG9Cb29sZWFuKCkpCiAgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnaSc7Ci0gICAgaWYgKHRo
aXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKS50b0Jv
b2xlYW4oZXhlYykpCisgICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubXVsdGlsaW5lKS50b0Jvb2xlYW4oKSkKICAgICAgICAgcG9zdGZpeFtpbmRleF0g
PSAnbSc7CiAgICAgVVN0cmluZyBzb3VyY2UgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnNvdXJjZSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAg
IC8vIElmIHNvdXJjZSBpcyBlbXB0eSwgdXNlICIvKD86KS8iIHRvIGF2b2lkIGNvbGxpZGluZyB3
aXRoIGNvbW1lbnQgc3ludGF4Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139123</attachid>
            <date>2012-04-26 19:37:49 -0700</date>
            <delta_ts>2012-04-27 00:10:31 -0700</delta_ts>
            <desc>and now, passing more tests than ever!</desc>
            <filename>cfgsimplify_patch_10.diff</filename>
            <type>text/plain</type>
            <size>147604</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE1Mzk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3MCBA
QAorMjAxMi0wNC0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTUzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNo
YW5nZSBnaXZlcyB0aGUgREZHIHRoZSBhYmlsaXR5IHRvIHNpbXBsaWZ5IHRoZSBjb250cm9sIGZs
b3cgZ3JhcGgKKyAgICAgICAgYXMgcGFydCBvZiBhbiBvcHRpbWl6YXRpb24gZml4cG9pbnQgdGhh
dCBpbmNsdWRlcyBDU0UsIENGQSwgYW5kIGNvbnN0YW50CisgICAgICAgIGZvbGRpbmcuIFRoaXMg
cmVxdWlyZWQgYSBudW1iZXIgb2YgaW50ZXJlc3RpbmcgY2hhbmdlcyBpbmNsdWRpbmc6CisgICAg
ICAgIAorICAgICAgICAtIFNvbGlkaWZ5aW5nIHRoZSBzZXQgb2YgaW52YXJpYW50cyB0aGF0IHRo
ZSBERkcgb2JleXMuIEZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgICBoZWFkIGFuZCB0YWlsIG9m
IGVhY2ggYmFzaWMgYmxvY2sgbXVzdCBhZHZlcnRpc2UgdGhlIHNldCBvZiBsaXZlIGxvY2Fscwor
ICAgICAgICAgIGFuZCB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsb2NhbHMsIHJlc3BlY3RpdmVseS4g
SXQgbXVzdCBkbyBzbyBieQorICAgICAgICAgIHJlZmVycmluZyB0byB0aGUgZmlyc3QgYWNjZXNz
IHRvIHRoZSBsb2NhbCBpbiB0aGUgYmxvY2sgKGZvciBoZWFkKSBhbmQKKyAgICAgICAgICB0aGUg
bGFzdCBvbmUgKGZvciB0YWlsKS4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBzdGFydCBvZiBh
CisgICAgICAgICAgdmFsaWRhdGlvbiBzdGVwIHRoYXQgbWF5IGJlIHR1cm5lZCBvbiBldmVuIHdp
dGggYXNzZXJ0cyBkaXNhYmxlZC4gVG8KKyAgICAgICAgICBlbnN1cmUgdGhhdCB0aGVzZSBpbnZh
cmlhbnRzIGFyZSBwcmVzZXJ2ZWQsIEkgaGFkIHRvIHJlbW92ZSB0aGUKKyAgICAgICAgICByZWR1
bmRhbnQgcGhpIGVsaW1pbmF0aW9uIHBoYXNlLiBGb3Igbm93IEkganVzdCByZW1vdmUgdGhlIGNh
bGwsIGJ1dCBpbgorICAgICAgICAgIHRoZSBmdXR1cmUgd2Ugd2lsbCBwcm9iYWJseSByZW1vdmUg
aXQgZW50aXJlbHkgdW5sZXNzIHdlIGZpbmQgYSB1c2UgZm9yCisgICAgICAgICAgaXQuCisgICAg
ICAgIAorICAgICAgICAtIE1ha2luZyBpdCBlYXNpZXIgdG8gZ2V0IHRoZSBib29sZWFuIHZlcnNp
b24gb2YgYSBKU1ZhbHVlLiBUaGlzIGlzIGEKKyAgICAgICAgICBwdXJlIG9wZXJhdGlvbiwgYnV0
IHdlIHByZXZpb3VzbHkgZGlkIG5vdCB0cmVhdCBpdCBhcyBzdWNoLgorICAgICAgICAKKyAgICAg
ICAgLSBGaXhpbmcgdGhlIG1lcmdpbmcgYW5kIGZpbHRlcmluZyBvZiBBYnN0cmFjdFZhbHVlcyB0
aGF0IGNvcnJlc3BvbmQgdG8KKyAgICAgICAgICBjb25jcmV0ZSBKU1ZhbHVlcy4gVGhpcyB3YXMg
cHJldmlvdXNseSBicm9rZW4gYW5kIHdhcyBsaW1pdGluZyB0aGUKKyAgICAgICAgICBlZmZlY3Qg
b2YgcnVubmluZyBjb25zdGFudCBmb2xkaW5nLiBGaXhpbmcgdGhpcyBtZWFudCB0aGF0IEkgaGFk
IHRvCisgICAgICAgICAgY2hhbmdlIGhvdyBjb25zdGFudCBmb2xkaW5nIGVsaW1pbmF0ZXMgR2V0
TG9jYWwgbm9kZXMsIHNvIGFzIHRvIGVuc3VyZQorICAgICAgICAgIHRoYXQgdGhlIHJlc3VsdGlu
ZyBncmFwaCBzdGlsbCBvYmV5cyBERkcgcnVsZXMuCisgICAgICAgIAorICAgICAgICAtIEludHJv
ZHVjaW5nIHNpbXBsaWZpZWQgZ2V0dGVycyBmb3Igc29tZSBvZiB0aGUgdGhpbmdzIHRoYXQgREZH
IHBoYXNlcworICAgICAgICAgIHdhbnQgdG8ga25vdyBhYm91dCwgbGlrZSB0aGUgTnRoIGNoaWxk
IG9mIGEgbm9kZSAobm93IGp1c3QKKyAgICAgICAgICBncmFwaC5jaGlsZCguLi4pIGlmIHlvdSBk
b24ndCBjYXJlIGFib3V0IHBlcmZvcm1hbmNlIHRvbyBtdWNoKSBvcgorICAgICAgICAgIGdldHRp
bmcgc3VjY2Vzc29ycyBvZiBhIGJhc2ljIGJsb2NrLgorICAgICAgICAKKyAgICAgICAgVGhlIGN1
cnJlbnQgQ0ZHIHNpbXBsaWZpZXIgY2FuIGhhbmRsZSBhbG1vc3QgYWxsIG9mIHRoZSBjYXNlcyB0
aGF0IGl0CisgICAgICAgIG91Z2h0IHRvIGhhbmRsZTsgdGhlIG5vdGV3b3J0aHkgb25lIHRoYXQg
aXMgbm90IHlldCBoYW5kbGVkIGlzIHJlbW92aW5nCisgICAgICAgIGJhc2ljIGJsb2NrcyB0aGF0
IGp1c3QgaGF2ZSBqdW1wcy4gVG8gZG8gdGhpcyByaWdodCB3ZSBuZWVkIHRvIGJlIGFibGUKKyAg
ICAgICAgdG8gcmVtb3ZlIGp1bXAtb25seSBibG9ja3MgdGhhdCBhbHNvIHBlcmZvcm0ga2VlcC1h
bGl2ZSBvbiBzb21lIHZhbHVlcy4KKyAgICAgICAgVG8gbWFrZSB0aGlzIHdvcmssIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byBob2lzdCB0aGUga2VlcC1hbGl2ZSBpbnRvIChvcgorICAgICAgICBqdXN0
IGFib3ZlKSBhIEJyYW5jaC4gVGhpcyBpcyBub3QgZnVuZGFtZW50YWxseSBkaWZmaWN1bHQgYnV0
IEkgb3B0ZWQgdG8KKyAgICAgICAgbGV0IHRoaXMgcGF0Y2ggb21pdCB0aGlzIG9wdGltaXphdGlv
bi4gV2UgY2FuIGhhbmRsZSB0aGlzIGxhdGVyLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBh
IGJpZyB3aW4gb24gcHJvZ3JhbXMgdGhhdCBpbmNsdWRlIGlubGluZSBmdW5jdGlvbnMgdGhhdCBh
cmUKKyAgICAgICAgb2Z0ZW4gY2FsbGVkIHdpdGggY29uc3RhbnQgYXJndW1lbnRzLiBPZiBjb3Vy
c2UsIFN1blNwaWRlciwgVjgsIGFuZAorICAgICAgICBLcmFrZW4gZG9uJ3QgY291bnQuIFRob3Nl
IGJlbmNobWFya3MgYXJlIGNvbXBsZXRlbHkgbmV1dHJhbCB3aXRoIHRoaXMKKyAgICAgICAgY2hh
bmdlLgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNWYWx1ZVRv
Qm9vbGVhbik6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpkZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKiBieXRl
Y29kZS9PcGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZEZpcnN0
VGltZSk6CisgICAgICAgIChPcGVyYW5kcyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzQ2xl
YXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFs
dWU6OnZhbGlkYXRlSWdub3JpbmdWYWx1ZSk6CisgICAgICAgIChBYnN0cmFjdFZhbHVlKToKKyAg
ICAgICAgKiBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoSlNDOjpERkc6OkFkamFj
ZW5jeUxpc3Q6OmNoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGphY2VuY3lMaXN0OjpzZXRD
aGlsZCk6CisgICAgICAgIChBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNC
bG9jay5oOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKToKKyAg
ICAgICAgKEJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Om51bU5v
ZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpub2RlSW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmlzUGhpSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OmlzSW5QaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpp
c0luQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQ
aGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ0ZBKToK
KyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICog
ZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6
CisgICAgICAgIChDRkdTaW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpD
RkdTaW1wbGlmaWNhdGlvblBoYXNlOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpE
Rkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmtpbGxVbnJlYWNoYWJsZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6ZmluZE9wZXJhbmRTb3VyY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmtlZXBPcGVyYW5kQWxpdmUp
OgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmZpeFBvc3NpYmxl
R2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6Ompl
dHRpc29uQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpeFBoaXMpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmZp
eEpldHRpc29uZWRQcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZp
Y2F0aW9uUGhhc2U6OnJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJlZmVyZW5jZSk6CisgICAgICAg
IChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6T3BlcmFuZFN1YnN0aXR1dGlvbjo6
T3BlcmFuZFN1YnN0aXR1dGlvbik6CisgICAgICAgIChPcGVyYW5kU3Vic3RpdHV0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpPcGVyYW5kU3Vic3RpdHV0
aW9uOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpz
a2lwR2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpeFRhaWxPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBo
YXNlOjptZXJnZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNGR1NpbXBsaWZp
Y2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oOiBBZGRl
ZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cnVuKToKKyAgICAgICAgKENTRVBoYXNlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6aW1wdXJlQ1NFKToKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6Z2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNT
RVBoYXNlOjpjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpDU0VQaGFzZTo6Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuaDoKKyAg
ICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRG
b2xkaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNvbnN0YW50Rm9s
ZGluZyk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdFZGdlLmg6CisgICAgICAgIChFZGdlKToKKyAg
ICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQ
aGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cEJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtRml4dXApOgorICAgICAgICAqIGRmZy9ERkdGaXh1
cFBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjpkZXJlZik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNoYW5n
ZUluZGV4KToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bnVt
U3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1Y2Nlc3NvckZvckNvbmRpdGlvbik6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmlzUHJlZGljdGVkTnVtZXJpY2FsKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6YnlWYWxJc1B1cmUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjbG9iYmVy
c1dvcmxkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bnVtQ2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpjaGlsZCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9Db25zdGFudCk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6bnVtU3VjY2Vzc29ycyk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN1Y2Nl
c3NvckZvckNvbmRpdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQaGFzZTo6ZW5k
UGhhc2UpOgorICAgICAgICAqIGRmZy9ERkdQaGFzZS5oOgorICAgICAgICAoSlNDOjpERkc6OnJ1
blBoYXNlKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24pOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oOgorICAgICAgICAoREZHKToK
KyAgICAgICAgKiBkZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZTo6cnVuKToKKyAgICAg
ICAgKEpTQzo6REZHOjpwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24pOgorICAgICAgICAq
IGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmg6CisgICAgICAgIChERkcpOgor
ICAgICAgICAqIGRmZy9ERkdTY29yZUJvYXJkLmg6CisgICAgICAgIChKU0M6OkRGRzo6U2NvcmVC
b2FyZDo6dXNlKToKKyAgICAgICAgKFNjb3JlQm9hcmQpOgorICAgICAgICAoSlNDOjpERkc6OlNj
b3JlQm9hcmQ6OnVzZUlmSGFzUmVzdWx0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y3Jl
YXRlT1NSRW50cmllcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmxpbmtP
U1JFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0
cmljdEVxRm9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUmVnRXhwRXhlYyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5leHRCbG9jayk6CisgICAgICAgIChT
cGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnVzZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Omp1bXApOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0
cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0
cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAq
IGRmZy9ERkdWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKFZh
bGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6VmFsaWRhdGUpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFs
aWRhdGU6OnJlcG9ydFZhbGlkYXRpb25Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWxp
ZGF0ZTo6ZHVtcERhdGEpOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjpkdW1wR3JhcGhJ
ZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjp2YWxpZGF0ZSk6CisgICAgICAgICog
ZGZnL0RGR1ZhbGlkYXRlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjp2YWxpZGF0ZSk6CisgICAgICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBo
YXNlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAg
ICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElP
Tik6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAg
IChKU0M6OmFycmF5UHJvdG9GdW5jRXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1NvbWUpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0Qm9vbGVhbik6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29u
c3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6
CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNTdHJpbmcuaDoKKyAgICAgICAgKEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjp0
b0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b0Jvb2xlYW4pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNWYWx1ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjp0b1Byb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0
cnVjdG9yTXVsdGlsaW5lKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKToKKwogMjAxMi0wNC0xNyAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaGF2
ZSBjb25zdGFudCBwcm9wYWdhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1ZhbHVlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmFsdWVSZWYuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTVmFsdWVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9v
bCBKU1ZhbHVlVG9Cb29sZWFuKEpTQ29udGV4dFJlZiBjdHgsIAogICAgIEFQSUVudHJ5U2hpbSBl
bnRyeVNoaW0oZXhlYyk7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVl
KTsKLSAgICByZXR1cm4ganNWYWx1ZS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIGpzVmFs
dWUudG9Cb29sZWFuKCk7CiB9CiAKIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVm
IGN0eCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NCw2ICs5NCwxMCBAQAogCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAg
Ki87IH07CiAJCTBGM0IzQTFBMTUzRTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwICov
OyB9OwogCQkwRjNCM0ExQjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0Iz
QTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGM0IzQTI3MTU0NEM5
OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTI0MTU0NEM5OTEwMDNFRDBG
RiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEYzQjNBMjgxNTQ0
Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTI1MTU0NEM5OTEwMDNFRDBG
RiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0IzQTI5MTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAgKi87IH07CisJ
CTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZG
IC8qIERGR1ZhbGlkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2
MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZp
cnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2
MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1h
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03
NjgsNiArNzcyLDEwIEBACiAJCTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxv
Y2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8q
IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0Iz
QTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBwYXRo
ID0gZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNCM0EyNTE1NDRDOTkxMDAzRUQw
RkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNC
M0EyOTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsaWRhdGUuY3BwOyBwYXRoID0gZGZnL0RGR1ZhbGlk
YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzQjNBMkExNTQ3NEZGNDAw
M0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1ZhbGlkYXRlLmg7IHBhdGggPSBkZmcvREZHVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3Zlcnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmly
dHVhbFJlZ2lzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxS
ZWdpc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZC
MDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEYXRhRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDQ1LDYgKzIw
NTMsOCBAQAogCQkJCTBGN0IyOTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMu
aCAqLywKIAkJCQkwRkZGQzk0QjE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwICov
LAogCQkJCTBGRkZDOTRDMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oICovLAorCQkJ
CTBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cCAqLywKKwkJCQkwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFz
ZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmgg
Ki8sCiAJCQkJMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAg
Ki8sCkBAIC0yMTAxLDYgKzIxMTEsOCBAQAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAv
KiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0
NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyog
REZHVGh1bmtzLmggKi8sCisJCQkJMEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlk
YXRlLmNwcCAqLywKKwkJCQkwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUu
aCAqLywKIAkJCQkwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmggKi8sCiAJCQkJMEZGRkM5NTMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdp
c3RlckFsbG9jYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMy
IC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oICovLApAQCAtMjU4Myw2ICsy
NTk1LDggQEAKIAkJCQkwRjNCM0ExQjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAv
KiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNB
MjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGM0IzQTI4MTU0NEM5OTcwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZH
VmFsaWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzE0Nyw2ICszMTYxLDggQEAKIAkJCQk4NjQy
QzUxMjE1MUMwODNEMDA0NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNT
Mi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQjNBMjcxNTQ0
Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksNyArMjU5LDE3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSogZGZnT1NSRW50cnlEYXRhKHVuc2ln
bmVkIGkpIHsgcmV0dXJuICZtX2RmZ0RhdGEtPm9zckVudHJ5W2ldOyB9CiAgICAgICAgIERGRzo6
T1NSRW50cnlEYXRhKiBkZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBiaW5hcnlTZWFyY2g8
REZHOjpPU1JFbnRyeURhdGEsIHVuc2lnbmVkLCBERkc6OmdldE9TUkVudHJ5RGF0YUJ5dGVjb2Rl
SW5kZXg+KG1fZGZnRGF0YS0+b3NyRW50cnkuYmVnaW4oKSwgbV9kZmdEYXRhLT5vc3JFbnRyeS5z
aXplKCksIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFtX2RmZ0RhdGEpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAobV9kZmdEYXRhLT5vc3JFbnRy
eS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBERkc6
Ok9TUkVudHJ5RGF0YSogcmVzdWx0ID0gYmluYXJ5U2VhcmNoPAorICAgICAgICAgICAgICAgIERG
Rzo6T1NSRW50cnlEYXRhLCB1bnNpZ25lZCwgREZHOjpnZXRPU1JFbnRyeURhdGFCeXRlY29kZUlu
ZGV4PigKKyAgICAgICAgICAgICAgICAgICAgbV9kZmdEYXRhLT5vc3JFbnRyeS5iZWdpbigpLCBt
X2RmZ0RhdGEtPm9zckVudHJ5LnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJ
bmRleCwgV1RGOjpLZXlNdXN0Tm90QmVQcmVzZW50SW5BcnJheSk7CisgICAgICAgICAgICBpZiAo
cmVzdWx0LT5tX2J5dGVjb2RlSW5kZXggIT0gYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIHZvaWQgYXBwZW5kT1NSRXhpdChjb25zdCBERkc6Ok9TUkV4aXQmIG9zckV4
aXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2
aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsMTYgQEAgcHVibGljOgogICAgICAgICBz
ZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0T3BlcmFu
ZEZpcnN0VGltZShpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNldEFyZ3VtZW50
Rmlyc3RUaW1lKG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldExvY2FsRmlyc3RUaW1l
KG9wZXJhbmQsIHZhbHVlKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
CShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OSw2ICs5OSw4IEBAIHZvaWQgQWJzdHJhY3RT
dGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICBQUk9GSUxFKEZMQUdfRk9SX0JMT0NLX0lO
SVRJQUxJWkFUSU9OKTsKICAgICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGgubV9ibG9ja3NbMF0u
Z2V0KCk7CiAgICAgcm9vdC0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7CisgICAgcm9vdC0+Y2Zh
SGFzVmlzaXRlZCA9IGZhbHNlOworICAgIHJvb3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZB
cmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBncmFwaFtyb290LT52YXJp
YWJsZXNBdEhlYWQuYXJndW1lbnQoaSldOwogICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFNl
dEFyZ3VtZW50KTsKQEAgLTE0MywxMSArMTQ1LDMzIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZShHcmFwaCYgZ3IKICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVu
dChpKS5zZXQoUHJlZGljdEZsb2F0NjRBcnJheSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CisgICAgICAgIAorICAg
ICAgICByb290LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKICAgICB9CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMo
KTsgKytpKSB7Ci0gICAgICAgIGlmICghZ3JhcGgubG9jYWxJc0NhcHR1cmVkKGkpKQorICAgICAg
ICBpZiAoZ3JhcGgubG9jYWxJc0NhcHR1cmVkKGkpKQorICAgICAgICAgICAgcm9vdC0+dmFsdWVz
QXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcm9v
dC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgICAgIHJvb3QtPnZhbHVlc0F0
VGFpbC5sb2NhbChpKS5jbGVhcigpOworICAgIH0KKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDEgOyBibG9ja0luZGV4IDwgZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgpOworICAgICAgICBp
ZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBi
bG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZhbHNlOworICAgICAgICBibG9jay0+Y2ZhSGFzVmlz
aXRlZCA9IGZhbHNlOworICAgICAgICBibG9jay0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRIZWFkLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5h
cmd1bWVudChpKS5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1
bWVudChpKS5jbGVhcigpOworICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAg
ICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgICAgIGJs
b2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgfQogICAgIH0KIH0K
IApAQCAtNTI2LDggKzU1MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJ
bnQzMik7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9j
ayk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEJvb2xlYW4pOwogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0xMjg2LDcgKzEzMDgsOSBAQCBpbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgIC8vIFRoZSBibG9jayB0cmFuc2ZlcnMg
dGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgogICAgICAgICBzb3VyY2UgPSBpblZhcmlhYmxl
OwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0
YUxvZygiICAgICAgICAgIFRyYW5zZmVyaW5nIGZyb20gaGVhZCB0byB0YWlsLlxuIik7CisgICAg
ICAgIGRhdGFMb2coIiAgICAgICAgICBUcmFuc2ZlcmluZyAiKTsKKyAgICAgICAgc291cmNlLmR1
bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZygiIGZyb20gaGVhZCB0byB0YWls
LlxuIik7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEyOTQsNyAr
MTMxOCw5IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAg
ICAgLy8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRpb25hbCBzcGVjdWxh
dGlvbnMuCiAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZUluZGV4KTsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIiAgICAgICAg
ICBSZWZpbmluZy5cbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgUmVmaW5pbmcgdG8g
Iik7CisgICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFM
b2coIlxuIik7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEzMDYs
NyArMTMzMiw5IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2coIiAgICAgICAgICBTZXR0aW5nLlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgICBT
ZXR0aW5nIHRvICIpOworICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAg
ICAgICBkYXRhTG9nKCJcbiIpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAg
LTEzODIsMTIgKzE0MTAsMjUgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1
Y2NlcwogICAgIEFTU0VSVCh0ZXJtaW5hbC5pc1Rlcm1pbmFsKCkpOwogICAgIAogICAgIHN3aXRj
aCAodGVybWluYWwub3AoKSkgewotICAgIGNhc2UgSnVtcDoKKyAgICBjYXNlIEp1bXA6IHsKKyNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2co
IiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5k
ZXgoKSk7CisjZW5kaWYKICAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1f
YmxvY2tzW3Rlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgfQogICAgICAg
ICAKLSAgICBjYXNlIEJyYW5jaDoKLSAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdy
YXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSkKLSAgICAgICAg
ICAgIHwgbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5C
bG9ja0luZGV4KCldLmdldCgpKTsKKyAgICBjYXNlIEJyYW5jaDogeworICAgICAgICBib29sIGNo
YW5nZWQgPSBmYWxzZTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJt
aW5hbC50YWtlbkJsb2NrSW5kZXgoKSk7CisjZW5kaWYKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0u
Z2V0KCkpOworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAg
ICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLm5v
dFRha2VuQmxvY2tJbmRleCgpKTsKKyNlbmRpZgorICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJh
c2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpXS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBSZXR1cm46CiAgICAgY2FzZSBUaHJvdzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIz
LDcgKzMyMywxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgCiAgICAgYm9vbCBpc0Ns
ZWFyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgPT0gUHJlZGljdE5vbmUg
JiYgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpOworICAgICAgICBib29sIHJlc3VsdCA9IG1fdHlwZSA9
PSBQcmVkaWN0Tm9uZSAmJiBtX3N0cnVjdHVyZS5pc0NsZWFyKCk7CisgICAgICAgIGlmIChyZXN1
bHQpCisgICAgICAgICAgICBBU1NFUlQoIW1fdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAKICAgICB2b2lkIG1ha2VUb3AoKQpAQCAtNDE3LDE1ICs0MjAsMzAgQEAg
c3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUgPT0gb3Ro
ZXIubV9zdHJ1Y3R1cmUKICAgICAgICAgICAgICYmIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsK
ICAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KICAg
ICAKICAgICBib29sIG1lcmdlKGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKQogICAgIHsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIEFic3RyYWN0VmFsdWUgb2xkTWUgPSAqdGhpczsK
KyNlbmRpZgogICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICByZXN1bHQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG1fdHlwZSwgb3RoZXIubV90eXBlKTsKLSAgICAgICAgcmVzdWx0IHw9
IG1fc3RydWN0dXJlLmFkZEFsbChvdGhlci5tX3N0cnVjdHVyZSk7Ci0gICAgICAgIGlmIChtX3Zh
bHVlICE9IG90aGVyLm1fdmFsdWUpCi0gICAgICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwor
ICAgICAgICBpZiAoaXNDbGVhcigpKSB7CisgICAgICAgICAgICAqdGhpcyA9IG90aGVyOworICAg
ICAgICAgICAgcmVzdWx0ID0gIW90aGVyLmlzQ2xlYXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHJlc3VsdCB8PSBtZXJnZVByZWRpY3Rpb24obV90eXBlLCBvdGhlci5tX3R5cGUp
OworICAgICAgICAgICAgcmVzdWx0IHw9IG1fc3RydWN0dXJlLmFkZEFsbChvdGhlci5tX3N0cnVj
dHVyZSk7CisgICAgICAgICAgICBpZiAobV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0IHw9ICEhbV92YWx1ZTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
ID0gSlNWYWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSAoKnRoaXMgIT0gb2xkTWUpKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC00NTIsNyArNDcwLDcgQEAg
c3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICAvLyBpbnRvIHRoZSBpbmZvcm1hdGlvbiBn
bGVhbmVkIGZyb20gdGhlIFN0cnVjdHVyZVNldC4KICAgICAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVy
KG1fdHlwZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoISFtX3ZhbHVlICYmICF2YWxpZGF0ZSht
X3ZhbHVlKSkKKyAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiAhdmFsaWRhdGVJZ25vcmluZ1ZhbHVl
KG1fdmFsdWUpKQogICAgICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgCiAgICAgICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKQEAgLTQ3MCwxMiArNDg4LDM2IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVl
IHsKICAgICAgICAgLy8gdGhlIG5ldyB0eXBlIChOb25lKSByYXRoZXIgdGhhbiB0aGUgb25lIHBh
c3NlZCAoQXJyYXkpLgogICAgICAgICBtX3N0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKIAotICAg
ICAgICBpZiAoISFtX3ZhbHVlICYmICF2YWxpZGF0ZShtX3ZhbHVlKSkKKyAgICAgICAgaWYgKCEh
bV92YWx1ZSAmJiAhdmFsaWRhdGVJZ25vcmluZ1ZhbHVlKG1fdmFsdWUpKQogICAgICAgICAgICAg
Y2xlYXIoKTsKICAgICAgICAgCiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAg
ICAgCisgICAgYm9vbCB2YWxpZGF0ZUlnbm9yaW5nVmFsdWUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIAorICAgICAgICBpZiAobWVyZ2VQcmVkaWN0aW9ucyhtX3R5cGUsIHByZWRpY3Rpb25G
cm9tVmFsdWUodmFsdWUpKSAhPSBtX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NF
UlQobV90eXBlICYgUHJlZGljdEVtcHR5KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFs
dWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgJiBQcmVkaWN0Q2VsbCk7
CisgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuY29udGFpbnModmFsdWUuYXNDZWxsKCkt
PnN0cnVjdHVyZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAogICAgIGJvb2wgdmFsaWRhdGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAg
ICB7CiAgICAgICAgIGlmIChpc1RvcCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw5IEBAIHB1YmxpYzoKICAgICAgICAgRml4ZWQsCiAgICAgICAgIFZhcmlhYmxlCiAgICAg
fTsKLQorICAgIAorICAgICNkZWZpbmUgQWRqYWNlbmN5TGlzdFNpemUgMworICAgIAogICAgIEFk
amFjZW5jeUxpc3QoS2luZCBraW5kKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBt
X2tpbmQoa2luZCkKQEAgLTc0LDIxICs3NiwyMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3Qg
RWRnZSYgY2hpbGQodW5zaWduZWQgaSkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpIDwg
Myk7CisgICAgICAgIEFTU0VSVChpIDwgQWRqYWNlbmN5TGlzdFNpemUpOwogICAgICAgICBBU1NF
UlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CiAgICAgfSAg
ICAKICAgICAKICAgICBFZGdlJiBjaGlsZCh1bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKGkgPCAzKTsKKyAgICAgICAgQVNTRVJUKGkgPCBBZGphY2VuY3lMaXN0U2l6ZSk7CiAgICAg
ICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRDaGlsZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2Up
CiAgICAgewotICAgICAgICBBU1NFUlQoaSA8IDMwKTsKKyAgICAgICAgQVNTRVJUKGkgPCBBZGph
Y2VuY3lMaXN0U2l6ZSk7CiAgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAg
ICBtX3dvcmRzW2ldID0gbm9kZVVzZTsKICAgICB9CkBAIC0xNTAsNyArMTUyLDcgQEAgcHVibGlj
OgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgRWRnZSBtX3dvcmRzWzNdOworICAgIEVkZ2Ug
bV93b3Jkc1tBZGphY2VuY3lMaXN0U2l6ZV07CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIEtp
bmQgbV9raW5kOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDEwIEBAIHN0cnVj
dCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICAgICB7CiAgICAgfQogICAgIAor
ICAgIH5CYXNpY0Jsb2NrKCkKKyAgICB7CisgICAgfQorICAgIAogICAgIHZvaWQgZW5zdXJlTG9j
YWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKICAgICB7CiAgICAgICAgIHZhcmlhYmxlc0F0SGVh
ZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKQEAgLTYzLDYgKzY3LDMzIEBAIHN0cnVjdCBC
YXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICAgICAgICAgdmFsdWVzQXRIZWFkLmVu
c3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwogICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9j
YWxzKG5ld051bUxvY2Fscyk7CiAgICAgfQorICAgIAorICAgIHNpemVfdCBudW1Ob2RlcygpIGNv
bnN0IHsgcmV0dXJuIHBoaXMuc2l6ZSgpICsgc2l6ZSgpOyB9CisgICAgTm9kZUluZGV4IG5vZGVJ
bmRleChzaXplX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpIDwgcGhpcy5zaXplKCkp
CisgICAgICAgICAgICByZXR1cm4gcGhpc1tpXTsKKyAgICAgICAgcmV0dXJuIGF0KGkgLSBwaGlz
LnNpemUoKSk7CisgICAgfQorICAgIGJvb2wgaXNQaGlJbmRleChzaXplX3QgaSkgY29uc3QgeyBy
ZXR1cm4gaSA8IHBoaXMuc2l6ZSgpOyB9CisgICAgCisgICAgYm9vbCBpc0luUGhpcyhOb2RlSW5k
ZXggbm9kZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwaGlzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAocGhpc1tpXSA9PSBub2RlSW5k
ZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSW5CbG9jayhOb2RlSW5kZXggaW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU5vZGVz
KCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG5vZGVJbmRleChpKSA9PSBpbmRleCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogCiAgICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJsb2Nr
IGxpbmtpbmcgYW5kIE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5IG1lYW5pbmdsZXNzCiAgICAgLy8g
Zm9yIG90aGVyIHB1cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHByZXBhcmVU
b1BhcnNlQmxvY2soKTsKICAgICAvLyBQYXJzZSBhIHNpbmdsZSBiYXNpYyBibG9jayBvZiBieXRl
Y29kZSBpbnN0cnVjdGlvbnMuCiAgICAgYm9vbCBwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KTsK
LSAgICAvLyBGaW5kIHJlYWNoYWJsZSBjb2RlIGFuZCBzZXR1cCBwcmVkZWNlc3NvciBsaW5rcyBp
biB0aGUgZ3JhcGgncyBCYXNpY0Jsb2Nrcy4KLSAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0
eSgpOwotICAgIC8vIEVucXVldWUgYSBibG9jayBvbnRvIHRoZSB3b3JrbGlzdCwgaWYgbmVjZXNz
YXJ5LgotICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdv
cmtsaXN0LCBCbG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3Nvcik7CiAgICAgLy8gTGluayBi
bG9jayBzdWNjZXNzb3JzLgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8
QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3Rv
cjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9z
c2libGVUYXJnZXRzKTsKQEAgLTI1ODUsNDEgKzI1ODEsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpsaW5rQmxvY2tzKFZlY3RvcjxVCiAgICAgfQogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5k
ZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKLXsKLSAgICBCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgPSBtX2dyYXBoLm1fYmxvY2tzW3N1Y2Nlc3NvckluZGV4XS5nZXQoKTsK
LSAgICBpZiAoIXN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUpIHsKLSAgICAgICAgc3VjY2Vzc29yLT5p
c1JlYWNoYWJsZSA9IHRydWU7Ci0gICAgICAgIHdvcmtsaXN0LmFwcGVuZChzdWNjZXNzb3JJbmRl
eCk7Ci0gICAgfQotICAgIAotICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJs
b2NrSW5kZXgpOwotfQotCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxp
dHkoKQotewotICAgIFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7Ci0gICAgd29ya2xp
c3QuYXBwZW5kKDApOwotICAgIG1fZ3JhcGgubV9ibG9ja3NbMF0tPmlzUmVhY2hhYmxlID0gdHJ1
ZTsKLSAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBCbG9ja0luZGV4
IGluZGV4ID0gd29ya2xpc3QubGFzdCgpOwotICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7
Ci0gICAgICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
aW5kZXhdLmdldCgpOwotICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGlua2VkKTsKLSAgICAgICAg
Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICBB
U1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaXNK
dW1wKCkpCi0gICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2Rl
LnRha2VuQmxvY2tJbmRleCgpKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7
Ci0gICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2Vu
QmxvY2tJbmRleCgpKTsKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5k
ZXgsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpidWlsZE9wZXJhbmRNYXBzSWZOZWNlc3NhcnkoKQogewogICAg
IGlmIChtX2hhdmVCdWlsdE9wZXJhbmRNYXBzKQpAQCAtMjgzMSw3ICsyNzkyLDEzIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICBwYXJzZUNvZGVCbG9jaygpOwogCiAgICAgbGlu
a0Jsb2NrcyhpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MsIGlubGluZVN0YWNrRW50
cnkubV9ibG9ja0xpbmtpbmdUYXJnZXRzKTsKLSAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsK
KyAgICBtX2dyYXBoLmRldGVybWluZVJlYWNoYWJpbGl0eSgpOworICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyAr
K2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBBU1NFUlQoYmxvY2spOworICAgICAgICBp
ZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uY2xlYXIoKTsKKyAgICB9CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQogICAgIGRhdGFMb2coIlByb2Nlc3NpbmcgbG9jYWwgdmFyaWFibGUgcGhpcy5c
biIpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNl
LmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBtX2NvdW50
ID0gMDsKQEAgLTY1LDEyICs2NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2NoYW5nZWQg
PSBmYWxzZTsKICAgICAgICAgICAgIHBlcmZvcm1Gb3J3YXJkQ0ZBKCk7CiAgICAgICAgIH0gd2hp
bGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgCiBwcml2YXRlOgogICAgIHZvaWQgcGVyZm9ybUJsb2NrQ0ZBKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCkKICAgICB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCkKICAgICAgICAgICAg
IHJldHVybjsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0x
MjYsOSArMTMwLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotdm9pZCBwZXJmb3JtQ0ZBKEdy
YXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUNGQShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhh
c2U8Q0ZBUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q0ZBUGhhc2U+KGdyYXBo
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZBUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3
IEBAIGNsYXNzIEdyYXBoOwogLy8gdGhlIGNvZGUgYmxvY2suIEl0J3MgYWxzbyByZXNwb25zaWJs
ZSBmb3IgaWRlbnRpZnlpbmcgZGVhZCBjb2RlLCBhbmQgaW4gdGhlCiAvLyBmdXR1cmUgc2hvdWxk
IGJlIHVzZWQgYXMgYSBob29rIGZvciBjb25zdGFudCBwcm9wYWdhdGlvbi4KIAotdm9pZCBwZXJm
b3JtQ0ZBKEdyYXBoJik7Citib29sIHBlcmZvcm1DRkEoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDYxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZH
UGhhc2UuaCIKKyNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIENGR1NpbXBsaWZpY2F0aW9uUGhhc2UgOiBwdWJsaWMgUGhh
c2UgeworcHVibGljOgorICAgIENGR1NpbXBsaWZpY2F0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQor
ICAgICAgICA6IFBoYXNlKGdyYXBoLCAiQ0ZHIHNpbXBsaWZpY2F0aW9uIikKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGJvb2wgb3V0ZXJDaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgIGJvb2wgaW5uZXJDaGFuZ2VkOworICAgICAgICAKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgc3dpdGNoIChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEp1bXA6IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3VjY2Vzc29yIHdpdGgg
b25lIHByZWRlY2Vzc29yIC0+IG1lcmdlLgorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCldLT5tX3ByZWRlY2Vzc29ycy5z
aXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9i
bG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnNbMF0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBibG9ja0luZGV4KTsKKyNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJDRkdTaW1wbGlmeTogSnVtcCBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1
LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFw
aC5zdWNjZXNzb3IoYmxvY2ssIDApKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAg
bWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApLCBOb0Js
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJOb3QganVtcCBtZXJnaW5nIG9uIEJs
b2NrICMldSB0byBCbG9jayAjJXUgYmVjYXVzZSBwcmVkZWNlc3NvcnMgPSAiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9j
aywgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNl
c3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiLCAiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIjJXUiLCBtX2dyYXBoLm1fYmxvY2tzW21fZ3Jh
cGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJlZGVjZXNzb3JzW2ldKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIi5cbiIpOwor
I2VuZGlmCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEJsb2NrIG9ubHkgaGFzIGEganVtcCAtPiByZW1vdmUuIFRo
aXMgaXMgdHJpY2t5IHRob3VnaCBiZWNhdXNlIG9mCisgICAgICAgICAgICAgICAgICAgIC8vIGxp
dmVuZXNzLiBXaGF0IHdlIHJlYWxseSB3YW50IGlzIHRvIHNsYW0gaW4gYSBwaGFudG9tIGF0IHRo
ZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrLCBhZnRlciB0aGUgdGVy
bWluYWwuIEJ1dCB3ZSBjYW4ndCByaWdodCBub3cuIDotKAorICAgICAgICAgICAgICAgICAgICAv
LyBJZGVhOiB3aGF0IGlmIEkgc2xhbSB0aGUgZ2hvc3RpZXMgaW50byBteSBzdWNjZXNzb3I/IE5v
cGUsIHRoYXQncworICAgICAgICAgICAgICAgICAgICAvLyBzdWJvcHRpbWFsLCBiZWNhdXNlIGlm
IG15IHN1Y2Nlc3NvciBoYXMgbXVsdGlwbGUgcHJlZGVjZXNzb3JzIHRoZW4gd2UnbGwKKyAgICAg
ICAgICAgICAgICAgICAgLy8gYmUga2VlcGluZyBhbGl2ZSB0aGluZ3Mgb24gb3RoZXIgcHJlZGVj
ZXNzb3IgZWRnZXMgdW5uZWNlc3NhcmlseS4KKyAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCB3
ZSByZWFsbHkgbmVlZCBpcyB0aGUgbm90aW9uIG9mIGVuZC1vZi1ibG9jayBnaG9zdGllcyEKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAgICAgICAgICAgICAg
IC8vIEJyYW5jaCBvbiBjb25zdGFudCAtPiBqZXR0aXNvbiB0aGUgbm90LXRha2VuIGJsb2NrIGFu
ZCBtZXJnZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbV9ncmFwaFtibG9jay0+
bGFzdCgpXS5jaGlsZDEoKV0uaGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBjb25kaXRpb24gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dmFsdWVPZkpTQ29uc3RhbnQobV9ncmFwaFtibG9jay0+bGFzdCgpXS5jaGlsZDEoKS5pbmRleCgp
KS50b0Jvb2xlYW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdl
dEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKV0uZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0QmxvY2stPm1fcHJlZGVjZXNzb3JzLnNp
emUoKSA9PSAxKSB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNGR1NpbXBsaWZ5OiBLbm93biBj
b25kaXRpb24gKCVzKSBicmFuY2ggbWVyZ2Ugb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldSwgamV0
dGlzb25pbmcgQmxvY2sgIyV1LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbmRpdGlvbiA/ICJ0cnVlIiA6ICJmYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihi
bG9jaywgY29uZGl0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisjZW5kaWYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDRkdTaW1wbGlmeTogS25vd24gY29uZGl0aW9uICgl
cykgYnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldSwgamV0
dGlzb25pbmcgQmxvY2sgIyV1LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbmRpdGlvbiA/ICJ0cnVlIiA6ICJmYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihi
bG9jaywgY29uZGl0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisjZW5kaWYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuQmxvY2tJbmRleCA9
IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW5CbG9ja0luZGV4ID0gbV9n
cmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssICFjb25kaXRpb24pOworICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3Jh
cGhbYmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IG1fZ3JhcGhbYmxvY2stPmxhc3Qo
KV0uY29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2Jsb2Nr
LT5sYXN0KCldLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLnJlZkNvdW50KCkgPT0g
MSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqZXR0aXNvbkJsb2NrKGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlD
b2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBqdW1wTm9kZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSBqdW1wKEp1bXAsIGJvdW5kYXJ5Q29kZU9yaWdp
biwgT3BJbmZvKHRha2VuQmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGp1bXAucmVmKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQo
anVtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZChqdW1wTm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSA9
PSBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMSkpIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDRkdT
aW1wbGlmeTogQnJhbmNoIG1lcmdlIG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUuXG4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3Nv
cihibG9jaywgMCkpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2Nr
cyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCksIE5vQmxvY2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTm90IGJyYW5jaCBzaW1wbGlmeWlu
ZyBvbiBCbG9jayAjJXUgYmVjYXVzZSB0aGUgc3VjY2Vzc29ycyBkaWZmZXIgYW5kIHRoZSBjb25k
aXRpb24gaXMgbm90IGtub3duLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9j
a0luZGV4KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAv
LyBCcmFuY2ggdG8gc2FtZSBkZXN0aW5hdGlvbiAtPiBqdW1wLgorICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogdGhpcyB3aWxsIGN1cnJlbnRseSBub3QgYmUgaGl0IGJlY2F1c2Ugb2YgdGhl
IGxhY2sgb2YganVtcC1vbmx5CisgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIHNpbXBsaWZp
Y2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubmVyQ2hhbmdlZCkg
eworICAgICAgICAgICAgICAgIC8vIElmIHdlIGNoYW5nZWQgdGhlIGdyYXBoLCB0aGVuIHNvbWUg
YmxvY2tzIG1heSBoYXZlIGJlY29tZSB1bnJlYWNoYWJsZS4gTmVlZCB0bworICAgICAgICAgICAg
ICAgIC8vIHBlcmZvcm0gYSBibG9jayBHQyBvZiBzb3J0cy4KKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogbWFrZSBzdXJlIHRoYXQgaWYgcmVhY2hhYmlsaXR5IGFuYWx5c2lzIHJlbmRlcnMgYSBi
bG9jayB1bnJlYWNoYWJsZSwKKyAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIHJlbWVtYmVyIHdo
aWNoIHByZWRlY2Vzc29ycyB3ZXJlIGVsaW1pbmF0ZWQuIFdlIG5lZWQgdGhpcyB0byBiZSBhYmxl
IHRvCisgICAgICAgICAgICAgICAgLy8gY2xlYW4gdXAgUGhpIGZ1bmN0aW9ucyBpbiByZWFjaGFi
bGUgYmxvY2tzIHRoYXQgcmVmZXIgdG8gbm9kZXMgaW4gdW5yZWFjaGFibGUKKyAgICAgICAgICAg
ICAgICAvLyBibG9ja3MuIFBlcmhhcHMgdGhlIHNvbHV0aW9uIGlzIGZvciByZXNldFJlYWNoYWJp
bGl0eSgpIHRvIG5vdCBtdXRhdGUgdGhlCisgICAgICAgICAgICAgICAgLy8gcHJlZGVjZXNzb3Jz
IGxpc3QsIHNvIHRoYXQgd2UgY2FuIGxhdGVyIGV4cGxvcmUgdGhlIHNldCBvZiBmb3JtZXIgcHJl
ZGVjZXNzb3JzCisgICAgICAgICAgICAgICAgLy8gb2YgYmxvY2tzIHN0aWxsIHJlYWNoYWJsZS4g
T2YgY291cnNlLCB0aGF0IGFzc3VtZXMgdGhhdCB3ZSBkaWRuJ3QgYWRkIG5ldworICAgICAgICAg
ICAgICAgIC8vIHByZWRlY2Vzc29ycy4gVGhhdCBvdWdodCBub3QgaGFwcGVuLiBUaGlzIGFsbCBh
bHNvIHJlcXVpcmVzIG5vdCByZW1vdmluZworICAgICAgICAgICAgICAgIC8vIHByZWRlY2Vzc29y
cyBkdXJpbmcgYnJhbmNoLT5qdW1wIHNpbXBsaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgIC8v
IE5PISBOTyEgTk8hIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIHRoYXQgaWYgd2Uga2lsbCBhIGJsb2Nr
IGJlY2F1c2UgaXQgaXMKKyAgICAgICAgICAgICAgICAvLyB1bnJlYWNoYWJsZSwgd2UgZW5zdXJl
IHRoYXQgd2UgdW5saW5rIGluY29taW5nIHBoaXMgdG8gaXQuIFRoaXMgbWF5IG9yIG1heQorICAg
ICAgICAgICAgICAgIC8vIG5vdCByZXN1bHQgaW4gZGVyZWZpbmcsIGFuZCBpdCBkb2Vzbid0IG11
Y2ggbWF0dGVyIGlmIGl0IGRvZXMuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Ly8gSGVyZSdzIHRoZSByZWFzb24gZm9yIHRoaXMgcGFzczoKKyAgICAgICAgICAgICAgICAvLyBC
bG9ja3M6IEEsIEIsIEMsIEQsIEUsIEYKKyAgICAgICAgICAgICAgICAvLyBBIC0+IEIsIEMKKyAg
ICAgICAgICAgICAgICAvLyBCIC0+IEYKKyAgICAgICAgICAgICAgICAvLyBDIC0+IEQsIEUKKyAg
ICAgICAgICAgICAgICAvLyBEIC0+IEYKKyAgICAgICAgICAgICAgICAvLyBFIC0+IEYKKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IEEncyBicmFuY2gg
aXMgZGV0ZXJtaW5lZCB0byBnbyB0byBCLiBUaGVuIHRoZSByZXN0IG9mIHRoaXMgcGhhc2UKKyAg
ICAgICAgICAgICAgICAvLyBpcyBzbWFydCBlbm91Z2ggdG8gc2ltcGxpZnkgZG93biB0bzoKKyAg
ICAgICAgICAgICAgICAvLyBBIC0+IEIKKyAgICAgICAgICAgICAgICAvLyBCIC0+IEYKKyAgICAg
ICAgICAgICAgICAvLyBDIC0+IEQsIEUKKyAgICAgICAgICAgICAgICAvLyBEIC0+IEYKKyAgICAg
ICAgICAgICAgICAvLyBFIC0+IEYKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
IC8vIFdlIHdpbGwgYWxzbyBtZXJnZSBBIGFuZCBCLiBCdXQgdGhlbiB3ZSBkb24ndCBoYXZlIGFu
eSBvdGhlciBtZWNoYW5pc20gdG8KKyAgICAgICAgICAgICAgICAvLyByZW1vdmUgRCwgRSBhcyBw
cmVkZWNlc3NvcnMgZm9yIEYuIFdvcnNlLCB0aGUgcmVzdCBvZiB0aGlzIHBoYXNlIGRvZXMgbm90
CisgICAgICAgICAgICAgICAgLy8ga25vdyBob3cgdG8gZml4IHRoZSBQaGkgZnVuY3Rpb25zIG9m
IEYgdG8gZW5zdXJlIHRoYXQgdGhleSBubyBsb25nZXIgcmVmZXIKKyAgICAgICAgICAgICAgICAv
LyB0byB2YXJpYWJsZXMgaW4gRCwgRS4gSW4gZ2VuZXJhbCwgd2UgbmVlZCBhIHdheSB0byBoYW5k
bGUgUGhpIHNpbXBsaWZpY2F0aW9uCisgICAgICAgICAgICAgICAgLy8gdXBvbjoKKyAgICAgICAg
ICAgICAgICAvLyAxKSBSZW1vdmFsIG9mIGEgcHJlZGVjZXNzb3IgZHVlIHRvIGJyYW5jaCBzaW1w
bGlmaWNhdGlvbi4gVGhlIGJyYW5jaAorICAgICAgICAgICAgICAgIC8vICAgIHNpbXBsaWZpZXIg
YWxyZWFkeSBkb2VzIHRoYXQuCisgICAgICAgICAgICAgICAgLy8gMikgSW52YWxpZGF0aW9uIG9m
IGEgcHJlZGVjZXNzb3IgYmVjYXVzZSBzYWlkIHByZWRlY2Vzc29yIHdhcyByZW5kZXJlZAorICAg
ICAgICAgICAgICAgIC8vICAgIHVucmVhY2hhYmxlLiBXZSBkbyB0aGlzIGhlcmUuCisgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBUaGlzIGltcGxpZXMgdGhhdCB3aGVuIGEg
YmxvY2sgaXMgdW5yZWFjaGFibGUsIHdlIG11c3QgaW5zcGVjdCBpdHMKKyAgICAgICAgICAgICAg
ICAvLyBzdWNjZXNzb3JzJyBQaGkgZnVuY3Rpb25zIHRvIHJlbW92ZSBhbnkgcmVmZXJlbmNlcyBm
cm9tIHRoZW0gaW50byB0aGUKKyAgICAgICAgICAgICAgICAvLyByZW1vdmVkIGJsb2NrLgorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVzZXRSZWFjaGFiaWxpdHko
KTsKKworICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+
aXNSZWFjaGFibGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHZhbGlkYXRlKG1fZ3JhcGgpOworICAgICAgICB9IHdoaWxlIChpbm5lckNoYW5n
ZWQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG91dGVyQ2hhbmdlZDsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgdm9pZCBraWxsVW5yZWFjaGFibGUoQmxvY2tJbmRleCBibG9ja0luZGV4KQor
ICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGJsb2NrKTsKKyAgICAgICAg
QVNTRVJUKCFibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAKKyAgICAgICAgLy8gMSkgUmVt
b3ZlIHJlZmVyZW5jZXMgZnJvbSBvdGhlciBibG9ja3MgdG8gdGhpcyBibG9jay4KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1TdWNjZXNzb3JzKGJsb2NrKTsgaS0tOykKKyAg
ICAgICAgICAgIGZpeFBoaXMoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIGkp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIDIpIEtpbGwgdGhlIGJsb2NrCisgICAgICAgIG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgTm9kZUlu
ZGV4IGZpbmRPcGVyYW5kU291cmNlKGNvbnN0IE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4
VHJhaXRzPiYgdmFyaWFibGVzLCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSB2YXJpYWJsZXMub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgaWYgKG5v
ZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICBp
ZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgPT0gU2V0TG9jYWwpCisgICAgICAgICAgICByZXR1
cm4gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgIHJldHVybiBu
b2RlSW5kZXg7CisgICAgfQorICAgIAorICAgIHZvaWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Js
b2NrKiBibG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX2dyYXBoLmlzQ2FwdHVyZWQob3BlcmFuZCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBmaW5kT3BlcmFuZFNvdXJjZShibG9j
ay0+dmFyaWFibGVzQXRUYWlsLCBvcGVyYW5kKTsKKyAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBO
b05vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5k
ZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VS
VChtX2dyYXBoW25vZGVJbmRleF0ub3AoKSAhPSBTZXRMb2NhbCk7CisgICAgICAgIE5vZGVJbmRl
eCBwaGFudG9tTm9kZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgIE5vZGUgcGhhbnRv
bShQaGFudG9tLCBjb2RlT3JpZ2luLCBub2RlSW5kZXgpOworICAgICAgICBtX2dyYXBoLmFwcGVu
ZChwaGFudG9tKTsKKyAgICAgICAgbV9ncmFwaC5yZWYocGhhbnRvbU5vZGVJbmRleCk7CisgICAg
ICAgIGJsb2NrLT5hcHBlbmQocGhhbnRvbU5vZGVJbmRleCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZml4UG9zc2libGVHZXRMb2NhbChCYXNpY0Jsb2NrKiBibG9jaywgRWRnZSYgZWRnZSkKKyAg
ICB7CisgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtlZGdlXTsKKyAgICAgICAgaWYgKGNo
aWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICht
X2dyYXBoLmlzQ2FwdHVyZWQoY2hpbGQubG9jYWwoKSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIE5vZGVJbmRleCBvcmlnaW5hbE5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChjaGlsZC5sb2NhbCgpKTsKKyAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZUlu
ZGV4ICE9IE5vTm9kZSk7CisgICAgICAgIE5vZGUqIG9yaWdpbmFsTm9kZSA9ICZtX2dyYXBoW29y
aWdpbmFsTm9kZUluZGV4XTsKKyAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSk7CisgICAgICAgIC8vIFBvc3NpYmlsaXRpZXM6CisgICAgICAgIC8vIFNldExvY2Fs
IC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhpbmcgdGhh
dCBpcyBpbW1lZGlhdGVseQorICAgICAgICAvLyAgICAgYXZhaWxhYmxlIGluIHRoZSBmaXJzdCBi
bG9jayB3aXRoIGEga25vd24gTm9kZUluZGV4LgorICAgICAgICAvLyBHZXRMb2NhbCAtPiB0aGUg
c2Vjb25kQmxvY2sgaXMgZ2V0dGluZyB0aGUgdmFsdWUgb2Ygc29tZXRoaW5nIHRoYXQgdGhlIGZp
cnN0CisgICAgICAgIC8vICAgICBibG9jayBhbHNvIGdldHMuCisgICAgICAgIC8vIFBoaSAtPiB0
aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9wZXJhbmQgdGhh
dCB0aGUgZmlyc3QgYmxvY2sKKyAgICAgICAgLy8gICAgIHdhcyBhbHNvIGFza2luZyBmb3Iga2Vl
cC1hbGl2ZSBvbi4KKyAgICAgICAgLy8gU2V0QXJndW1lbnQgLT4gdGhlIHNlY29uZEJsb2NrIGlz
IGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlCisgICAgICAgIC8v
ICAgICBmaXJzdCBibG9jayB3YXMga2VlcGluZyBhbGl2ZSBieSB2aXJ0dWUgb2YgdGhlIGZpcnN0
QmxvY2sgYmVpbmcgdGhlIHJvb3QgYW5kCisgICAgICAgIC8vICAgICB0aGUgb3BlcmFuZCBiZWlu
ZyBhbiBhcmd1bWVudC4KKyAgICAgICAgLy8gRmx1c2ggLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFz
a2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlIGZpcnN0CisgICAgICAg
IC8vICAgICBibG9jayB3YXMgZm9yY2luZyB0byBiZSBhbGl2ZSwgc28gdGhlIHNlY29uZCBibG9j
ayBzaG91bGQgcmVmZXIgY2hpbGQgb2YKKyAgICAgICAgLy8gICAgIHRoZSBmbHVzaC4KKyAgICAg
ICAgaWYgKG9yaWdpbmFsTm9kZS0+b3AoKSA9PSBGbHVzaCkgeworICAgICAgICAgICAgb3JpZ2lu
YWxOb2RlSW5kZXggPSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAg
ICBvcmlnaW5hbE5vZGUgPSAmbV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRleF07CisgICAgICAgIH0K
KyAgICAgICAgc3dpdGNoIChvcmlnaW5hbE5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBTZXRM
b2NhbDogeworICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChlZGdlLCBvcmlnaW5hbE5v
ZGUtPmNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChl
ZGdlLCBvcmlnaW5hbE5vZGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogeworICAgICAgICAg
ICAgLy8gS2VlcCB0aGUgR2V0TG9jYWwhCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGpldHRpc29u
QmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0lu
ZGV4LCBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAg
ICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNv
bmVkQmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCk7ICsraSkKKyAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGJvdW5kYXJ5Q29k
ZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7
ICsraSkKKyAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGJvdW5kYXJ5Q29kZU9y
aWdpbiwgaSk7CisgICAgICAgIAorICAgICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGJs
b2NrSW5kZXgsIGpldHRpc29uZWRCbG9ja0luZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBm
aXhQaGlzKEJsb2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgQmxvY2tJbmRleCBkZXN0aW5hdGlv
bkJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jayA9IG1f
Z3JhcGgubV9ibG9ja3Nbc291cmNlQmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGRlc3RpbmF0aW9uQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Rlc3RpbmF0aW9uQmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVzdGluYXRpb25C
bG9jay0+cGhpcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZUluZGV4IHBoaU5vZGVJ
bmRleCA9IGRlc3RpbmF0aW9uQmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBOb2RlJiBwaGlO
b2RlID0gbV9ncmFwaFtwaGlOb2RlSW5kZXhdOworICAgICAgICAgICAgTm9kZUluZGV4IG15Tm9k
ZUluZGV4ID0gc291cmNlQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHBoaU5vZGUubG9j
YWwoKSk7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAg
ICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgcmVtb3ZpbmcgcmVmZXJlbmNlIGZyb20gcGhpIEAl
dSB0byBAJXUgb24gbG9jYWwgciVkOiIsCisgICAgICAgICAgICAgICAgICAgIHBoaU5vZGVJbmRl
eCwgbXlOb2RlSW5kZXgsIHBoaU5vZGUubG9jYWwoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGlm
IChteU5vZGVJbmRleCA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwg
aGFwcGVuIGlmIHRoZXJlIGlzIGEgcGhpIGluIHRoZSBkZXN0aW5hdGlvbiB0aGF0IHJlZmVycyBp
bnRvCisgICAgICAgICAgICAgICAgLy8gdGhlIGRlc3RpbmF0aW9uIGl0c2VsZi4KKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE5vZGUmIG15Tm9k
ZSA9IG1fZ3JhcGhbbXlOb2RlSW5kZXhdOworICAgICAgICAgICAgaWYgKG15Tm9kZS5vcCgpID09
IEdldExvY2FsKQorICAgICAgICAgICAgICAgIG15Tm9kZUluZGV4ID0gbXlOb2RlLmNoaWxkMSgp
LmluZGV4KCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgQWRqYWNlbmN5
TGlzdFNpemU7ICsraikKKyAgICAgICAgICAgICAgICByZW1vdmVQb3RlbnRpYWxseURlYWRQaGlS
ZWZlcmVuY2UobXlOb2RlSW5kZXgsIHBoaU5vZGUsIGopOworI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisjZW5kaWYK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeEpldHRpc29uZWRQcmVkZWNlc3Nv
cnMoQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4
KQorICAgIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAg
ICAgIGRhdGFMb2coIkZpeGluZyBwcmVkZWNlc3NvcnMgYW5kIHBoaXMgZHVlIHRvIGpldHRpc29u
IG9mIEJsb2NrICMldSBmcm9tIEJsb2NrICMldS5cbiIsCisgICAgICAgICAgICAgICAgamV0dGlz
b25lZEJsb2NrSW5kZXgsIGJsb2NrSW5kZXgpOworI2VuZGlmCisgICAgICAgIEJhc2ljQmxvY2sq
IGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhd
LmdldCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2Nr
LT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGpldHRpc29u
ZWRCbG9jay0+bV9wcmVkZWNlc3NvcnNbaV0gIT0gYmxvY2tJbmRleCkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnNb
aV0gPSBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgICAg
IGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZpeFBoaXMoYmxvY2tJbmRl
eCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZVBv
dGVudGlhbGx5RGVhZFBoaVJlZmVyZW5jZShOb2RlSW5kZXggbXlOb2RlSW5kZXgsIE5vZGUmIHBo
aU5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCkKKyAgICB7CisgICAgICAgIGlmIChwaGlOb2RlLmNo
aWxkcmVuLmNoaWxkKGVkZ2VJbmRleCkuaW5kZXhVbmNoZWNrZWQoKSAhPSBteU5vZGVJbmRleCkK
KyAgICAgICAgICAgIHJldHVybjsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCisgICAgICAgIGRhdGFMb2coIiBSZW1vdmluZyByZWZlcmVuY2UgYXQgY2hpbGQgJXUu
IiwgZWRnZUluZGV4KTsKKyNlbmRpZgorICAgICAgICBtX2dyYXBoLmRlcmVmKG15Tm9kZUluZGV4
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZWRnZUluZGV4OyBpIDwgQWRqYWNlbmN5TGlz
dFNpemUgLSAxOyArK2kpCisgICAgICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLnNldENoaWxkKGks
IHBoaU5vZGUuY2hpbGRyZW4uY2hpbGQoaSArIDEpKTsKKyAgICAgICAgcGhpTm9kZS5jaGlsZHJl
bi5zZXRDaGlsZChBZGphY2VuY3lMaXN0U2l6ZSAtIDEsIEVkZ2UoKSk7CisgICAgfQorICAgIAor
ICAgIHN0cnVjdCBPcGVyYW5kU3Vic3RpdHV0aW9uIHsKKyAgICAgICAgT3BlcmFuZFN1YnN0aXR1
dGlvbigpCisgICAgICAgICAgICA6IG9sZENoaWxkKE5vTm9kZSkKKyAgICAgICAgICAgICwgbmV3
Q2hpbGQoTm9Ob2RlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE9w
ZXJhbmRTdWJzdGl0dXRpb24oTm9kZUluZGV4IG9sZENoaWxkLCBOb2RlSW5kZXggbmV3Q2hpbGQp
CisgICAgICAgICAgICA6IG9sZENoaWxkKG9sZENoaWxkKQorICAgICAgICAgICAgLCBuZXdDaGls
ZChuZXdDaGlsZCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKChvbGRDaGlsZCA9PSBO
b05vZGUpID09IChuZXdDaGlsZCA9PSBOb05vZGUpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9s
ZENoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIi0iKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIkAldSAtPiBAJXUi
LCBvbGRDaGlsZCwgbmV3Q2hpbGQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2Rl
SW5kZXggb2xkQ2hpbGQ7CisgICAgICAgIE5vZGVJbmRleCBuZXdDaGlsZDsKKyAgICB9OworICAg
IAorICAgIE5vZGVJbmRleCBza2lwR2V0TG9jYWwoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7
CisgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgIGlmIChu
b2RlLm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5p
bmRleCgpOworICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgIH0KKyAgICAKKyAgICB2b2lk
IGZpeFRhaWxPcGVyYW5kKEJhc2ljQmxvY2sqIGZpcnN0QmxvY2ssIEJhc2ljQmxvY2sqIHNlY29u
ZEJsb2NrLCBpbnQgb3BlcmFuZCwgT3BlcmFuZHM8T3BlcmFuZFN1YnN0aXR1dGlvbj4mIHN1YnN0
aXR1dGlvbnMpCisgICAgeworICAgICAgICBOb2RlSW5kZXggYXRTZWNvbmRUYWlsID0gc2Vjb25k
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAg
ICAgaWYgKG1fZ3JhcGguaXNDYXB0dXJlZChvcGVyYW5kKSkgeworICAgICAgICAgICAgLy8gVGhl
IHNlY29uZCBibG9jayBkaWQgc29tZXRoaW5nIHRvIGEgdmFyaWFibGUgdGhhdCBpcyBjYXB0dXJl
ZCwgc28gcmVmbGVjdCB0aGlzLgorICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQob3BlcmFuZCkgPSBhdFNlY29uZFRhaWw7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChhdFNlY29uZFRhaWwgPT0gTm9Ob2Rl
KSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgdmFyaWFibGUgaXMgZGVhZCBhdCB0aGUgZW5kIG9m
IHRoZSBzZWNvbmQgYmxvY2ssIHRoZW4gZG8gbm90aGluZzsgZXNzZW50aWFsbHkKKyAgICAgICAg
ICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRoZSB0YWlsIHN0YXRlIHRvIHJlZmxlY3Qg
d2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGRpZC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTm9kZSYgc2Vjb25kTm9kZSA9IG1fZ3JhcGhbYXRTZWNv
bmRUYWlsXTsKKyAgICAgICAgc3dpdGNoIChzZWNvbmROb2RlLm9wKCkpIHsKKyAgICAgICAgY2Fz
ZSBTZXRMb2NhbDoKKyAgICAgICAgY2FzZSBGbHVzaDogeworICAgICAgICAgICAgLy8gVGhlIHNl
Y29uZCBibG9jayBkaWQgaW50ZXJlc3RpbmcgdGhpbmdzIHRvIHRoZSB2YXJpYWJsZXMsIHNvIHVw
ZGF0ZSB0aGUgdGFpbAorICAgICAgICAgICAgLy8gYWNjb3JkaW5nbHkuCisgICAgICAgICAgICBm
aXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IGF0U2Vjb25kVGFp
bDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBQaGk6IHsKKyAgICAgICAgICAgIC8vIEtlZXAgd2hhdCB3YXMgaW4gdGhlIGZpcnN0IGJs
b2NrLgorICAgICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKG9wZXJhbmQpICE9IE5vTm9kZSk7CisgICAgICAgICAgICBzdWJzdGl0dXRpb25zLm9wZXJh
bmQob3BlcmFuZCkgPSBPcGVyYW5kU3Vic3RpdHV0aW9uKGF0U2Vjb25kVGFpbCwgc2tpcEdldExv
Y2FsKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAg
ICAgICAgICAgIC8vIEtlZXAgd2hhdCB3YXMgaW4gdGhlIGZpcnN0IGJsb2NrLCBhbmQgYWRqdXN0
IHRoZSBzdWJzdGl0dXRpb24gdG8gYWNjb3VudCBmb3IKKyAgICAgICAgICAgIC8vIHRoZSBmYWN0
IHRoYXQgc3VjY2Vzc29ycyB3aWxsIHJlZmVyIHRvIHRoZSBjaGlsZCBvZiB0aGUgR2V0TG9jYWwu
CisgICAgICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCkgIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFuZChv
cGVyYW5kKSA9IE9wZXJhbmRTdWJzdGl0dXRpb24oc2Vjb25kTm9kZS5jaGlsZDEoKS5pbmRleCgp
LCBza2lwR2V0TG9jYWwoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFu
ZCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHZvaWQgbWVyZ2VCbG9ja3MoCisgICAgICAgIEJsb2NrSW5kZXgg
Zmlyc3RCbG9ja0luZGV4LCBCbG9ja0luZGV4IHNlY29uZEJsb2NrSW5kZXgsIEJsb2NrSW5kZXgg
amV0dGlzb25lZEJsb2NrSW5kZXgpCisgICAgeworICAgICAgICAvLyBUaGlzIHdpbGwgYWRkIGFs
bCBvZiB0aGUgbm9kZXMgaW4gc2Vjb25kQmxvY2sgdG8gZmlyc3RCbG9jaywgYnV0IGluIHNvIGRv
aW5nCisgICAgICAgIC8vIGl0IHdpbGwgYWxzbyBlbnN1cmUgdGhhdCBhbnkgR2V0TG9jYWxzIGZy
b20gdGhlIHNlY29uZCBibG9jayB0aGF0IHJlZmVyIHRvCisgICAgICAgIC8vIFNldExvY2FscyBp
biB0aGUgZmlyc3QgYmxvY2sgYXJlIHJlbGlua2VkLiBJZiBqZXR0aXNvbmVkQmxvY2sgaXMgbm90
IE5vQmxvY2ssCisgICAgICAgIC8vIHRoZW4gUGhhbnRvbXMgYXJlIGluc2VydGVkIGZvciBhbnl0
aGluZyB0aGF0IHRoZSBqZXR0aXNvbmVkQmxvY2sgd291bGQgaGF2ZQorICAgICAgICAvLyBrZXB0
IGFsaXZlLgorICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbZmlyc3RCbG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgQmFzaWNCbG9jayog
c2Vjb25kQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3NlY29uZEJsb2NrSW5kZXhdLmdldCgpOwor
ICAgICAgICAKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJsb2NrIHNp
bmNlIHdlIGRvbid0IG5lZWQgaXQgYW55bW9yZS4gV2VsbCwgd2UgZG9uJ3QKKyAgICAgICAgLy8g
cmVhbGx5IHJlbW92ZSBpdDsgd2UgYWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRvbS4KKyAg
ICAgICAgQVNTRVJUKG1fZ3JhcGhbZmlyc3RCbG9jay0+bGFzdCgpXS5pc1Rlcm1pbmFsKCkpOwor
ICAgICAgICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IG1fZ3JhcGhbZmlyc3RCbG9j
ay0+bGFzdCgpXS5jb2RlT3JpZ2luOworICAgICAgICBtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3Qo
KV0uc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIEFTU0VSVChtX2dyYXBo
W2ZpcnN0QmxvY2stPmxhc3QoKV0ucmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChqZXR0aXNvbmVkQmxvY2tJbmRleCAhPSBOb0Jsb2NrKSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGltZSB0byBpbnNl
cnQgZ2hvc3RpZXMgZm9yIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUga2VwdCBhbGl2ZSBpbiBjYXNl
IHdlIE9TUgorICAgICAgICAgICAgLy8gZXhpdCBwcmlvciB0byBoaXR0aW5nIHRoZSBmaXJzdEJs
b2NrJ3MgdGVybWluYWwsIGFuZCBlbmQgdXAgZ29pbmcgZG93biBhCisgICAgICAgICAgICAvLyBk
aWZmZXJlbnQgcGF0aCB0aGFuIHNlY29uZEJsb2NrLgorICAgICAgICAgICAgCisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFs
aXZlKGZpcnN0QmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkp
OworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAgICAgICAgICAga2Vl
cE9wZXJhbmRBbGl2ZShmaXJzdEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2Nr
LT5waGlzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgZmlyc3RCbG9jay0+cGhpcy5hcHBlbmQo
c2Vjb25kQmxvY2stPnBoaXNbaV0pOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzZWNvbmRCbG9jay0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBzZWNvbmRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJh
dGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUGhhbnRvbSAmJiAhIW5v
ZGUuY2hpbGQxKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgcG9zc2libGVMb2NhbE9w
ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3Np
YmxlTG9jYWxPcC5oYXNMb2NhbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggc2V0TG9jYWxJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocG9zc2libGVMb2NhbE9wLmxvY2FsKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSYgc2V0TG9jYWwgPSBtX2dyYXBoW3NldExvY2FsSW5k
ZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsLm9wKCkgPT0gU2V0TG9j
YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlIG5ld0VkZ2UgPSBzZXRMb2Nh
bC5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlIG9sZEVkZ2UgPSBu
b2RlLmNoaWxkMSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5l
d0VkZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRn
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5zZXRDaGlsZDEo
bmV3RWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIGNoaWxkIGlzIGEgR2V0TG9jYWwsIHRoZW4gd2UgbWlnaHQgbGlrZSB0byBmaXgg
aXQuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7
CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0
Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RD
aGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICsr
Y2hpbGRJZHgpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZp
cnN0QmxvY2ssIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoISFub2RlLmNoaWxkMSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghIW5vZGUuY2hpbGQyKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS5jaGlsZHJl
bi5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFub2RlLmNoaWxkMygp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RC
bG9jaywgbm9kZS5jaGlsZHJlbi5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXJzdEJsb2NrLT5h
cHBlbmQobm9kZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRml4IHRo
ZSBwcmVkZWNlc3NvcnMgb2YgbXkgbmV3IHN1Y2Nlc3NvcnMuIFRoaXMgaXMgdHJpY2t5LCBzaW5j
ZSB3ZSBhcmUgZ29pbmcgdG8gcmVzZXQKKyAgICAgICAgLy8gYWxsIHByZWRlY2Vzc29ycyBhbnl3
YXkgZHVlIHRvIHJlYWNoYWJpbGl0eSBhbmFseXNpcy4gQnV0IHdlIG5lZWQgdG8gZml4IHRoZQor
ICAgICAgICAvLyBwcmVkZWNlc3NvcnMgZWFnZXJseSB0byBlbnN1cmUgdGhhdCB3ZSBrbm93IHdo
YXQgdGhleSBhcmUgaW4gY2FzZSB0aGUgbmV4dCBibG9jayB3ZQorICAgICAgICAvLyBjb25zaWRl
ciBpbiB0aGlzIHBoYXNlIHdpc2hlcyB0byBxdWVyeSB0aGUgcHJlZGVjZXNzb3JzIG9mIG9uZSBv
ZiB0aGUgYmxvY2tzIHdlCisgICAgICAgIC8vIGFmZmVjdGVkLgorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGktLTspIHsKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5z
dWNjZXNzb3IoZmlyc3RCbG9jaywgaSldLmdldCgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2opIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29yc1tqXSA9PSBzZWNvbmRC
bG9ja0luZGV4KQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3Jz
W2pdID0gZmlyc3RCbG9ja0luZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBGaXggdGhlIHByZWRlY2Vzc29ycyBvZiBteSBmb3JtZXIgc3VjY2Vzc29y
cy4gQWdhaW4sIHdlJ2QgcmF0aGVyIG5vdCBkbyB0aGlzLCBidXQgaXQncworICAgICAgICAvLyBh
biB1bmZvcnR1bmF0ZSBuZWNlc3NpdHkuIFNlZSBhYm92ZSBjb21tZW50LgorICAgICAgICBpZiAo
amV0dGlzb25lZEJsb2NrSW5kZXggIT0gTm9CbG9jaykKKyAgICAgICAgICAgIGZpeEpldHRpc29u
ZWRQcmVkZWNlc3NvcnMoZmlyc3RCbG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBGaXggdXAgdGhlIHZhcmlhYmxlcyBhdCB0YWlsLgorICAgICAg
ICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiBzdWJzdGl0dXRpb25zKAorICAgICAgICAg
ICAgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAorICAg
ICAgICAgICAgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgIGZpeFRhaWxPcGVyYW5k
KGZpcnN0QmxvY2ssIHNlY29uZEJsb2NrLCBhcmd1bWVudFRvT3BlcmFuZChpKSwgc3Vic3RpdHV0
aW9ucyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAgICAgICBmaXhUYWlsT3Bl
cmFuZChmaXJzdEJsb2NrLCBzZWNvbmRCbG9jaywgaSwgc3Vic3RpdHV0aW9ucyk7CisgICAgICAg
IAorICAgICAgICAvLyBGaXggdXAgdGhlIHJlZmVyZW5jZXMgZnJvbSBvdXIgbmV3IHN1Y2Nlc3Nv
cnMuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhmaXJz
dEJsb2NrKTsgaS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9n
cmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihmaXJzdEJsb2NrLCBpKV0uZ2V0KCk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3VjY2Vzc29yLT5waGlzLnNpemUo
KTsgKytqKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHBoaU5vZGVJbmRleCA9IHN1Y2Nl
c3Nvci0+cGhpc1tqXTsKKyAgICAgICAgICAgICAgICBOb2RlJiBwaGlOb2RlID0gbV9ncmFwaFtw
aGlOb2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBPcGVy
YW5kU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMub3BlcmFuZChwaGlO
b2RlLmxvY2FsKCkpOworICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5jaGlsZDEoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgc3Vi
c3RpdHV0aW9uLm5ld0NoaWxkKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUuY2hpbGQy
KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChw
aGlOb2RlLmNoaWxkMigpLmluZGV4KCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxkKQorICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUluZGV4KHBoaU5vZGUuY2hpbGRyZW4uY2hpbGQy
KCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCk7CisgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2Rl
LmNoaWxkMygpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBpZiAocGhpTm9kZS5jaGlsZDMoKS5pbmRleCgpID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChwaGlOb2RlLmNoaWxkcmVu
LmNoaWxkMygpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmaXJzdEJsb2NrLT52YWx1ZXNBdFRhaWwgPSBzZWNvbmRC
bG9jay0+dmFsdWVzQXRUYWlsOworICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tz
ZWNvbmRCbG9ja0luZGV4XS5jbGVhcigpOworICAgIH0KK307CisKK2Jvb2wgcGVyZm9ybUNGR1Np
bXBsaWZpY2F0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICByZXR1cm4gcnVuUGhhc2U8Q0ZHU2lt
cGxpZmljYXRpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25Q
aGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ0ZHU2ltcGxpZmljYXRpb25Q
aGFzZV9oCisjZGVmaW5lIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ0ZHIHNpbXBsaWZpY2F0aW9u
OgorLy8KKy8vIGp1bXAgdG8gc2luZ2xlIHByZWRlY2Vzc29yIC0+IG1lcmdlIGJsb2NrcworLy8g
YnJhbmNoIG9uIGNvbnN0YW50IC0+IGp1bXAKKy8vIGJyYW5jaCB0byBzYW1lIGJsb2NrcyAtPiBq
dW1wCisvLyBqdW1wLW9ubHkgYmxvY2sgLT4gcmVtb3ZlCisvLyBraWxsIGRlYWQgY29kZQorCiti
b29sIHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtX3JlcGxhY2VtZW50c1tpXSA9IE5vTm9kZTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyAr
K2Jsb2NrKQotICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKCptX2dyYXBoLm1fYmxvY2tzW2Js
b2NrXSk7CisgICAgICAgICAgICBwZXJmb3JtQmxvY2tDU0UobV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a10uZ2V0KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTWF5YmUgd2UnbGwgbmVlZCB0byBt
YWtlIHRoaXMgcmVhc29uIGFib3V0IHdoZXRoZXIgaXQgY2hhbmdlZCB0aGUgZ3JhcGggaW4gYW4g
YWN0aW9uYWJsZSB3YXk/CiAgICAgfQogICAgIAogcHJpdmF0ZToKQEAgLTEzOSw1MiArMTQwLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAgICAgCi0gICAgYm9v
bCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgUHJlZGlj
dGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7Ci0gICAg
ICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rp
b24oKTsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJl
clByZWRpY3Rpb24ocmlnaHQpOwotICAgIH0KLSAgICAKLSAgICBib29sIGxvZ2ljYWxOb3RJc1B1
cmUoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICByZXR1cm4gaXNC
b29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSB8fCAhcHJlZGljdGlvbjsKLSAgICB9Ci0gICAg
Ci0gICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAg
ICAgICAmJiAoKG5vZGUub3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLm9wKCkgPT0gUHV0QnlWYWxB
bGlhcykKLSAgICAgICAgICAgICAgICA/IGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVByZWRpY3Rp
b24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICAgICAg
OiBpc0FjdGlvbmFibGVBcnJheVByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVk
aWN0aW9uKCkpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGVJbmRl
eCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5k
ZXhdOwotICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUNsb2JiZXJzV29ybGQpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEobm9kZS5mbGFncygpICYgTm9kZU1p
Z2h0Q2xvYmJlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN3aXRjaCAo
bm9kZS5vcCgpKSB7Ci0gICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3M6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgY2FzZSBDb21wYXJl
R3JlYXRlcjoKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBjYXNlIENv
bXBhcmVFcToKLSAgICAgICAgICAgIHJldHVybiAhaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSk7
Ci0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgICAgIHJldHVybiAhbG9naWNhbE5v
dElzUHVyZShub2RlKTsKLSAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAgICAgIHJldHVy
biAhYnlWYWxJc1B1cmUobm9kZSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJZiBieSBzb21l
IG9kZGl0eSB3ZSBoaXQgdGhpcyBjYXNlIGluIHJlbGVhc2UgYnVpbGQgaXQncyBzYWZlciB0byBo
YXZlIENTRSBhc3N1bWUgdGhlIHdvcnN0LgotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIE5v
ZGVJbmRleCBpbXB1cmVDU0UoTm9kZSYgbm9kZSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCBj
aGlsZDEgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEoKSk7CkBAIC0yMTUsNyArMTcwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb05vZGU7CkBAIC0yMzgsNyArMTkzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisg
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMjU0LDE0
ICsyMDksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2lu
ZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNl
IEdldEJ5VmFsOgotICAgICAgICAgICAgICAgIGlmICghYnlWYWxJc1B1cmUobm9kZSkpCisgICAg
ICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgp
ID09IGNoaWxkMSAmJiBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXpl
KGNoaWxkMikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKCFieVZhbElzUHVyZShub2RlKSkK
KyAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hp
bGQxKCkgPT0gY2hpbGQxICYmIGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmlj
YWxpemUoY2hpbGQyKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCku
aW5kZXgoKTsKQEAgLTI4MCw3ICsyMzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8v
IEEgcHVzaCBjYW5ub3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3RpbmcgZWxlbWVudHMgaW4gdGhl
IGFycmF5LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0z
MzEsNyArMjg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAg
ICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguYnlWYWxJc1B1cmUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlW
YWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAg
ICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9y
IGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4K
QEAgLTM0MCw3ICsyOTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LmNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zNzcsNyArMzMyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6
CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgICAgICAgICAgICAgaWYgKGJ5
VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1
cmUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRl
cyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KICAgICAgICAgICAgICAgICAg
ICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNl
IGEgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KQEAgLTM4Niw3ICsz
NDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjbG9i
YmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTQxNiw3ICszNzEsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUo
bm9kZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBJZiBQdXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQn
cyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgogICAgICAgICAgICAgICAgICAgICAvLyBpbnRl
Z2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1
cmUKICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlLgpAQCAtNDI1LDcgKzM4MCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQo
aW5kZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQpAQCAtNDYxLDEyICs0MTYsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWw6Ci0gICAgICAgICAgICAgICAgaWYgKGlzRml4ZWRJbmRleGVkU3RvcmFnZU9iamVjdFBy
ZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpICYmIGJ5VmFsSXNQ
dXJlKG5vZGUpKQorICAgICAgICAgICAgICAgIGlmIChpc0ZpeGVkSW5kZXhlZFN0b3JhZ2VPYmpl
Y3RQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSAmJiBtX2dy
YXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTYxMCw2
ICs1NjUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElzU3RyaW5nOgogICAgICAgICBjYXNl
IElzT2JqZWN0OgogICAgICAgICBjYXNlIElzRnVuY3Rpb246CisgICAgICAgIGNhc2UgTG9naWNh
bE5vdDoKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHB1cmVDU0Uobm9kZSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTYzNSwxOCArNTkxLDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRl
ckVxOgogICAgICAgICBjYXNlIENvbXBhcmVFcTogewotICAgICAgICAgICAgaWYgKGlzUHJlZGlj
dGVkTnVtZXJpY2FsKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2Vt
ZW50SW5kZXggPSBwdXJlQ1NFKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVu
dEluZGV4ICE9IE5vTm9kZSAmJiBpc1ByZWRpY3RlZE51bWVyaWNhbChtX2dyYXBoW3JlcGxhY2Vt
ZW50SW5kZXhdKSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1l
bnRJbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTG9naWNhbE5vdDogewotICAgICAgICAgICAgaWYg
KGxvZ2ljYWxOb3RJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzUHJl
ZGljdGVkTnVtZXJpY2FsKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxh
Y2VtZW50SW5kZXggPSBwdXJlQ1NFKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChyZXBsYWNl
bWVudEluZGV4ICE9IE5vTm9kZSAmJiBsb2dpY2FsTm90SXNQdXJlKG1fZ3JhcGhbcmVwbGFjZW1l
bnRJbmRleF0pKQorICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudEluZGV4ICE9IE5vTm9k
ZSAmJiBtX2dyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG1fZ3JhcGhbcmVwbGFjZW1lbnRJbmRl
eF0pKQogICAgICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChyZXBsYWNlbWVudEluZGV4
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjU5LDEyICs2MDYsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkpCisgICAgICAg
ICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCks
IG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShu
b2RlKSAmJiBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
YnlWYWxJc1B1cmUobm9kZSkgJiYgZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEo
KS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCkpICE9IE5vTm9kZSkKICAgICAgICAgICAg
ICAgICBub2RlLnNldE9wKFB1dEJ5VmFsQWxpYXMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKQEAgLTcwNCwxNCArNjUxLDE5IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBwZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9jayYgYmxvY2spCisgICAgdm9p
ZCBwZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBtX2N1
cnJlbnRCbG9jayA9ICZibG9jazsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGFzdE5vZGVUeXBlOyArK2kpCiAgICAgICAgICAgICBt
X2xhc3RTZWVuW2ldID0gVUlOVF9NQVg7CiAKLSAgICAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9
IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0g
ICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrW21faW5kZXhJbkJsb2NrXTsKKyAgICAg
ICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUo
KTsgKyttX2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBibG9j
ay0+YXQobV9pbmRleEluQmxvY2spOwogICAgICAgICAgICAgcGVyZm9ybU5vZGVDU0UobV9ncmFw
aFttX2NvbXBpbGVJbmRleF0pOwogICAgICAgICB9CiAgICAgfQpAQCAtNzIzLDkgKzY3NSw5IEBA
IHByaXZhdGU6CiAgICAgRml4ZWRBcnJheTx1bnNpZ25lZCwgTGFzdE5vZGVUeXBlPiBtX2xhc3RT
ZWVuOwogfTsKIAotdm9pZCBwZXJmb3JtQ1NFKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUNT
RShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKKyAgICBy
ZXR1cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkocmV2
aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIEdyYXBoOwogLy8gYSB3aWRl
IHJhbmdlIG9mIHN1YmV4cHJlc3Npb24gc2ltaWxhcml0aWVzLiBJdCdzIGtub3duIHRvIHByb2R1
Y2UgYmlnIHdpbnMKIC8vIG9uIGEgZmV3IGJlbmNobWFya3MsIGFuZCBpcyByZWxhdGl2ZWx5IGNo
ZWFwIHRvIHJ1bi4KIAotdm9pZCBwZXJmb3JtQ1NFKEdyYXBoJik7Citib29sIHBlcmZvcm1DU0Uo
R3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEy
IEBACiAjZWxzZQogI2RlZmluZSBERkdfRU5BQkxFX0pJVF9BU1NFUlQgMAogI2VuZGlmCisvLyBF
bmFibGUgdmFsaWRhdGlvbiBvZiB0aGUgZ3JhcGguCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorI2Rl
ZmluZSBERkdfRU5BQkxFX1ZBTElEQVRJT04gMQorI2Vsc2UKKyNkZWZpbmUgREZHX0VOQUJMRV9W
QUxJREFUSU9OIDAKKyNlbmRpZgogLy8gQ29uc2lzdGVuY3kgY2hlY2sgY29udGVudHMgY29tcGls
ZXIgZGF0YSBzdHJ1Y3R1cmVzLgogI2RlZmluZSBERkdfRU5BQkxFX0NPTlNJU1RFTkNZX0NIRUNL
IDAKIC8vIEVtaXQgYSBicmVha3BvaW50IGludG8gdGhlIGhlYWQgb2YgZXZlcnkgZ2VuZXJhdGVk
IGZ1bmN0aW9uLCB0byBhaWQgZGVidWdnaW5nIGluIEdEQi4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZp
c2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTMgKzQzLDE3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAg
eworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIEFic3Ry
YWN0U3RhdGUgc3RhdGUobV9ncmFwaCk7CiAgICAgICAgIEluc2VydGlvblNldDxOb2RlSW5kZXg+
IGluc2VydGlvblNldDsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIWJsb2NrLT5jZmFGb3VuZENvbnN0YW50cykK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN0YXRlLmJlZ2luQmFzaWNC
bG9jayhibG9jayk7CkBAIC02MCwyOSArNjQsNTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKICAgICAgICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwogICAgICAgICAgICAgICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIHx8IChub2Rl
LmZsYWdzKCkgJiAoTm9kZUNsb2JiZXJzV29ybGQgfCBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAg
ICAgICAgICAgICAgICAgfHwgbV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpCiAgICAgICAgICAg
ICAgICAgICAgIHx8IG5vZGUuaGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YXRlLmZvck5vZGUobm9k
ZUluZGV4KS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5v
ZGUgcGhhbnRvbShQaGFudG9tLCBub2RlLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ub3AoKSA9PSBQaGkpOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzUmVzdWx0
KCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vZGVJbmRleCk7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNJblBoaXMobm9kZS5jaGlsZDEo
KS5pbmRleCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
b3BlcmFuZChub2RlLmxvY2FsKCkpID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IHRhaWxOb2RlSW5kZXgg
PSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRhaWxOb2RlSW5kZXggPT0gbm9kZUluZGV4KQorICAgICAgICAgICAg
ICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwoKSkg
PSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdGFpbE5vZGVJbmRleF0ub3AoKSA9
PSBGbHVzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbdGFpbE5v
ZGVJbmRleF0ub3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgcGhhbnRvbS5j
aGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47CiAgICAgICAgICAgICAgICAgcGhhbnRvbS5yZWYoKTsK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0
YW50KG5vZGVJbmRleCwgdmFsdWUpOwogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwaGFudG9t
Tm9kZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBl
bmQocGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleElu
QmxvY2ssIHBoYW50b21Ob2RlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUucmVz
ZXQoKTsKICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCpibG9jayk7CisgICAgICAg
ICAgICBzdGF0ZS5yZXNldCgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4g
Y2hhbmdlZDsKICAgICB9CiB9OwogCi12b2lkIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoR3JhcGgm
IGdyYXBoKQorYm9vbCBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKEdyYXBoJiBncmFwaCkKIHsKLSAg
ICBydW5QaGFzZTxDb25zdGFudEZvbGRpbmdQaGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5Q
aGFzZTxDb25zdGFudEZvbGRpbmdQaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDcgKzM4LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBpbmZlcnJlZCBjb25zdGFudHMsIGFuZCBy
ZXBsYWNlcyB0aG9zZSBub2RlcyB3aXRoIGNvbnN0YW50cyB3aGlsc3QgaW5qZWN0aW5nCiAvLyBQ
aGFudG9tIG5vZGVzIHRvIGtlZXAgdGhlIGNoaWxkcmVuIGFsaXZlICh3aGljaCBpcyBuZWNlc3Nh
cnkgZm9yIE9TUiBleGl0KS4KIAotdm9pZCBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKEdyYXBoJik7
Citib29sIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3Bw
CShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEyICszMCwxNCBAQAogCiAjaW5jbHVkZSAiREZHQnl0
ZUNvZGVQYXJzZXIuaCIKICNpbmNsdWRlICJERkdDRkFQaGFzZS5oIgorI2luY2x1ZGUgIkRGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1
ZGUgIkRGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5o
IgogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBo
YXNlLmgiCisjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNpbmNsdWRlICJERkdWaXJ0dWFsUmVn
aXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewpAQCAtNTksMTMgKzYxLDI2IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29t
cGlsZU0KICAgICAKICAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQogICAg
ICAgICBkZmcucHJlZGljdEFyZ3VtZW50VHlwZXMoKTsKLQotICAgIHBlcmZvcm1SZWR1bmRhbnRQ
aGlFbGltaW5hdGlvbihkZmcpOworICAgIAorICAgIHZhbGlkYXRlKGRmZyk7CiAgICAgcGVyZm9y
bVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOwotICAg
IHBlcmZvcm1DRkEoZGZnKTsKLSAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7Ci0gICAg
cGVyZm9ybUNTRShkZmcpOworICAgIHVuc2lnbmVkIGNudCA9IDE7CisgICAgZm9yICg7OyArK2Nu
dCkgeworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygiREZH
IGJlZ2lubmluZyBvcHRpbWl6YXRpb24gZml4cG9pbnQgaXRlcmF0aW9uICMldS5cbiIsIGNudCk7
CisjZW5kaWYKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIHBlcmZvcm1D
RkEoZGZnKTsKKyAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7
CisgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKGRmZyk7CisgICAg
ICAgIHBlcmZvcm1DU0UoZGZnKTsKKyAgICAgICAgaWYgKCFjaGFuZ2VkKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBkYXRhTG9n
KCJERkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBpbiAldSBpdGVyYXRpb25zLlxu
IiwgY250KTsKKyNlbmRpZgogICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRm
Zyk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDEwIEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4VW5j
aGVja2VkKCkgIT0gTm9Ob2RlOyB9CisgICAgCisgICAgLy8gTkIuIEl0J3Mgc3VwZXIgdGVtcHRp
bmcgdG8gaGF2ZSBhIG9wZXJhdG9yIGJvb2wuIEJ1dCB0aGF0IHdvdWxkIG1lYW4gdGhhdCBpZiB5
b3UgYWNjaWRlbnRhbGx5CisgICAgLy8gdXNlIGFuIEVkZ2Ugd2hlcmUgeW91IG1lYW50IHRvIHVz
ZSBFZGdlOjppbmRleCgpLCB5b3Ugd2lsbCBpbnN0ZWFkIGdldCBFZGdlOjppc1NldCgpLiBHcm9z
cyEKKyAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9
CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KEVkZ2Ugb3RoZXIpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDE1ICs0MSwxOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAK
LSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKICAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkKICAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5tX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogcHJp
dmF0ZToKICAgICB2b2lkIGZpeHVwQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgeworICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQoYmxv
Y2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5k
ZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAgICAgICAg
ICAgbV9jb21waWxlSW5kZXggPSBibG9jay0+YXQobV9pbmRleEluQmxvY2spOwogICAgICAgICAg
ICAgZml4dXBOb2RlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKQEAgLTM1OSw5ICszNjMsOSBA
QCBwcml2YXRlOgogICAgIEluc2VydGlvblNldDxOb2RlSW5kZXg+IG1faW5zZXJ0aW9uU2V0Owog
fTsKICAgICAKLXZvaWQgcGVyZm9ybUZpeHVwKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUZp
eHVwKEdyYXBoJiBncmFwaCkKIHsKLSAgICBydW5QaGFzZTxGaXh1cFBoYXNlPihncmFwaCk7Cisg
ICAgcmV0dXJuIHJ1blBoYXNlPEZpeHVwUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIEdyYXBo
OwogLy8gRml4IHBvcnRpb25zIG9mIHRoZSBncmFwaCB0aGF0IGFyZSBpbmVmZmljaWVudCBnaXZl
biB0aGUgcHJlZGljdGlvbnMgdGhhdAogLy8gd2UgaGF2ZS4gVGhpcyBzaG91bGQgcnVuIGFmdGVy
IHByZWRpY3Rpb24gcHJvcGFnYXRpb24gYnV0IGJlZm9yZSBDU0UuCiAKLXZvaWQgcGVyZm9ybUZp
eHVwKEdyYXBoJik7Citib29sIHBlcmZvcm1GaXh1cChHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHOjpQaGFzZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiwxMCArMTI2LDggQEAgdm9pZCBHcmFw
aDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHVuc2lnbmVkIHJlZkNvdW50ID0gbm9k
ZS5yZWZDb3VudCgpOwogICAgIGJvb2wgc2tpcHBlZCA9ICFyZWZDb3VudDsKICAgICBib29sIG11
c3RHZW5lcmF0ZSA9IG5vZGUubXVzdEdlbmVyYXRlKCk7Ci0gICAgaWYgKG11c3RHZW5lcmF0ZSkg
ewotICAgICAgICBBU1NFUlQocmVmQ291bnQpOworICAgIGlmIChtdXN0R2VuZXJhdGUpCiAgICAg
ICAgIC0tcmVmQ291bnQ7Ci0gICAgfQogICAgIAogICAgIHByaW50V2hpdGVTcGFjZSgobm9kZS5j
b2RlT3JpZ2luLmlubGluZURlcHRoKCkgLSAxKSAqIDIpOwogCkBAIC0yNzUsMTUgKzI3MywyOSBA
QCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgpCiAKIHZvaWQgR3JhcGg6OmR1
bXAoKQogeworICAgIGJvb2wgZHVtcEFsbCA9IGZhbHNlOworI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICBkdW1wQWxsID0gdHJ1ZTsKKyNlbmRpZgorCiAgICAg
Tm9kZUluZGV4IGxhc3ROb2RlSW5kZXggPSBOb05vZGU7CiAgICAgZm9yIChzaXplX3QgYiA9IDA7
IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fYmxvY2tzW2JdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIGRhdGFMb2coIkJsb2NrICMldSAoYmMjJXUpOiAlcyVzXG4iLCAoaW50
KWIsIGJsb2NrLT5ieXRlY29kZUJlZ2luLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIgKHNr
aXBwZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIpOworICAg
ICAgICBkYXRhTG9nKCIgIFByZWRlY2Vzc29yczoiKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBibG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBk
YXRhTG9nKCIgIyV1IiwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldKTsKKyAgICAgICAgZGF0YUxv
ZygiXG4iKTsKICAgICAgICAgZGF0YUxvZygiICBQaGkgTm9kZXM6XG4iKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgLy8gRHVtcGluZyB0aGUgZGVhZCBQaGkgbm9kZXMgaXMganVzdCBhbm5veWluZyEKLSAgICAg
ICAgICAgIGlmIChhdChibG9jay0+cGhpc1tpXSkucmVmQ291bnQoKSkKKyAgICAgICAgICAgIGlm
IChkdW1wQWxsIHx8IGF0KGJsb2NrLT5waGlzW2ldKS5yZWZDb3VudCgpKSB7CisgICAgICAgICAg
ICAgICAgZHVtcENvZGVPcmlnaW4obGFzdE5vZGVJbmRleCwgYmxvY2stPnBoaXNbaV0pOwogICAg
ICAgICAgICAgICAgIGR1bXAoYmxvY2stPnBoaXNbaV0pOworICAgICAgICAgICAgICAgIGxhc3RO
b2RlSW5kZXggPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBkYXRhTG9nKCIgIHZhcnMgYmVmb3JlOiAiKTsKICAgICAgICAgaWYgKGJsb2NrLT5jZmFI
YXNWaXNpdGVkKQpAQCAtMzA1LDYgKzMxNyw5IEBAIHZvaWQgR3JhcGg6OmR1bXAoKQogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBkYXRhTG9nKCI8ZW1wdHk+Iik7CiAgICAgICAgIGRhdGFMb2co
IlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgdmFyIGxpbmtzOiAiKTsKKyAgICAgICAgZHVtcE9w
ZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAg
IGRhdGFMb2coIlxuIik7CiAgICAgfQogfQogCkBAIC0zNjIsNiArMzc3LDU0IEBAIHZvaWQgR3Jh
cGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKCkKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGg6OmhhbmRs
ZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBi
bG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KQoreworICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvciA9IG1fYmxvY2tzW3N1Y2Nlc3NvckluZGV4XS5nZXQoKTsKKyAgICBpZiAoIXN1
Y2Nlc3Nvci0+aXNSZWFjaGFibGUpIHsKKyAgICAgICAgc3VjY2Vzc29yLT5pc1JlYWNoYWJsZSA9
IHRydWU7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChzdWNjZXNzb3JJbmRleCk7CisgICAgfQor
ICAgIAorICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOwor
fQorCit2b2lkIEdyYXBoOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQoreworICAgIFZlY3RvcjxC
bG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7CisgICAgd29ya2xpc3QuYXBwZW5kKDApOworICAgIG1f
YmxvY2tzWzBdLT5pc1JlYWNoYWJsZSA9IHRydWU7CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgQmxvY2tJbmRleCBpbmRleCA9IHdvcmtsaXN0Lmxhc3QoKTsKKyAg
ICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOworICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7CisgICAgICAgIEFTU0VSVChibG9jay0+
aXNMaW5rZWQpOworICAgICAgICAKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KGJsb2NrLT5sYXN0
KCkpOworICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOworICAgICAgICAKKyAgICAg
ICAgaWYgKG5vZGUuaXNKdW1wKCkpCisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xp
c3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZWxzZSBpZiAobm9k
ZS5pc0JyYW5jaCgpKSB7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGlu
ZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nv
cih3b3JrbGlzdCwgaW5kZXgsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCit7CisgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBi
bG9jay0+aXNSZWFjaGFibGUgPSBmYWxzZTsKKyAgICAgICAgYmxvY2stPm1fcHJlZGVjZXNzb3Jz
LmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOworfQor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDggQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgZGVyZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7
CisgICAgICAgIGlmICghYXQobm9kZUluZGV4KS5yZWZDb3VudCgpKQorICAgICAgICAgICAgZHVt
cCgpOwogICAgICAgICBpZiAoYXQobm9kZUluZGV4KS5kZXJlZigpKQogICAgICAgICAgICAgZGVy
ZWZDaGlsZHJlbihub2RlSW5kZXgpOwogICAgIH0KQEAgLTExMyw2ICsxMTUsMTMgQEAgcHVibGlj
OgogICAgICAgICBkZXJlZihub2RlVXNlLmluZGV4KCkpOwogICAgIH0KICAgICAKKyAgICB2b2lk
IGNoYW5nZUluZGV4KEVkZ2UmIGVkZ2UsIE5vZGVJbmRleCBuZXdJbmRleCkKKyAgICB7CisgICAg
ICAgIHJlZihuZXdJbmRleCk7CisgICAgICAgIGRlcmVmKGVkZ2UuaW5kZXgoKSk7CisgICAgICAg
IGVkZ2Uuc2V0SW5kZXgobmV3SW5kZXgpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNsZWFyQW5k
RGVyZWZDaGlsZDEoTm9kZSYgbm9kZSkKICAgICB7CiAgICAgICAgIGlmICghbm9kZS5jaGlsZDEo
KSkKQEAgLTM0Niw2ICszNTUsNzggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaXNDYXB0dXJl
ZChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlcikpOwogICAgIH0KICAgICAKKyAgICB1
bnNpZ25lZCBudW1TdWNjZXNzb3JzKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGF0KGJsb2NrLT5sYXN0KCkpLm51bVN1Y2Nlc3NvcnMoKTsKKyAgICB9CisgICAgQmxv
Y2tJbmRleCBzdWNjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGF0KGJsb2NrLT5sYXN0KCkpLnN1Y2Nlc3NvcihpbmRleCk7Cisg
ICAgfQorICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sqIGJs
b2NrLCBib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhdChibG9jay0+bGFz
dCgpKS5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgUHJl
ZGljdGVkVHlwZSBsZWZ0ID0gYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpOworICAgICAg
ICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gYXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigpOwor
ICAgICAgICByZXR1cm4gaXNOdW1iZXJQcmVkaWN0aW9uKGxlZnQpICYmIGlzTnVtYmVyUHJlZGlj
dGlvbihyaWdodCk7CisgICAgfQorICAgIAorICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9k
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkKKyAgICAgICAgICAgICYmICgobm9kZS5vcCgpID09IFB1dEJ5VmFsIHx8IG5v
ZGUub3AoKSA9PSBQdXRCeVZhbEFsaWFzKQorICAgICAgICAgICAgICAgID8gaXNBY3Rpb25hYmxl
TXV0YWJsZUFycmF5UHJlZGljdGlvbihhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkpCisg
ICAgICAgICAgICAgICAgOiBpc0FjdGlvbmFibGVBcnJheVByZWRpY3Rpb24oYXQobm9kZS5jaGls
ZDEoKSkucHJlZGljdGlvbigpKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgY2xvYmJlcnNXb3Js
ZChOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVDbG9i
YmVyc1dvcmxkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghKG5vZGUu
ZmxhZ3MoKSAmIE5vZGVNaWdodENsb2JiZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAg
ICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAg
ICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToK
KyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgICAgICByZXR1cm4gIWlzUHJlZGljdGVk
TnVtZXJpY2FsKG5vZGUpOworICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgcmV0
dXJuICFieVZhbElzUHVyZShub2RlKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIElmIGJ5IHNv
bWUgb2RkaXR5IHdlIGhpdCB0aGlzIGNhc2UgaW4gcmVsZWFzZSBidWlsZCBpdCdzIHNhZmVyIHRv
IGhhdmUgQ1NFIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Ym9vbCBjbG9iYmVyc1dvcmxkKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBy
ZXR1cm4gY2xvYmJlcnNXb3JsZChhdChub2RlSW5kZXgpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKKyAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7
CisgICAgCisgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB7CisgICAg
ICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKKyAgICAgICAgICAgIHJldHVy
biBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIHJldHVybiBBZGphY2VuY3lMaXN0U2l6ZTsK
KyAgICB9CisgICAgCisgICAgRWRnZSBjaGlsZChOb2RlJiBub2RlLCB1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKKyAgICAg
ICAgICAgIHJldHVybiBtX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgaW5kZXhd
OworICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5jaGlsZChpbmRleCk7CisgICAgfQorICAg
IAogICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2Rl
QmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CkBAIC0zNjQsNiArNDQ1LDgg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CiBwcml2YXRlOgogICAg
IAorICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmts
aXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpOwor
ICAgIAogICAgIGJvb2wgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBh
ZGQsIE5vZGUmIHZhcmlhYmxlLCBOb2RlJiBpbW1lZGlhdGUpCiAgICAgewogICAgICAgICBBU1NF
UlQoaW1tZWRpYXRlLmhhc0NvbnN0YW50KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHN0cnVjdCBPcEluZm8g
ewogLy8gTm9kZSByZXByZXNlbnRzIGEgc2luZ2xlIG9wZXJhdGlvbiBpbiB0aGUgZGF0YSBmbG93
IGdyYXBoLgogc3RydWN0IE5vZGUgewogICAgIGVudW0gVmFyQXJnVGFnIHsgVmFyQXJnIH07Ci0K
KyAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8g
aW1tZWRpYXRlIHZhbHVlLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVP
cmlnaW4pCkBAIC0yMDIsNyArMjAyLDggQEAgc3RydWN0IE5vZGUgewogICAgICAgICBtX29wID0g
SlNDb25zdGFudDsKICAgICAgICAgaWYgKG1fZmxhZ3MgJiBOb2RlTXVzdEdlbmVyYXRlKQogICAg
ICAgICAgICAgbV9yZWZDb3VudC0tOwotICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlTXVzdEdlbmVy
YXRlOworICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUNsb2JiZXJzV29ybGQpKTsKKyAg
ICAgICAgbV9mbGFncyAmPSB+KE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKTsK
ICAgICAgICAgbV9vcEluZm8gPSBjb25zdGFudE51bWJlcjsKICAgICAgICAgY2hpbGRyZW4ucmVz
ZXQoKTsKICAgICB9CkBAIC00NjgsNiArNDY5LDM3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
cmV0dXJuIG1fb3BJbmZvMjsKICAgICB9CiAgICAgCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29y
cygpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBKdW1wOgor
ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICAgICAg
cmV0dXJuIDI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBCbG9ja0luZGV4IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRl
eCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaW5kZXgpIHsKKyAgICAgICAgY2FzZSAwOgorICAg
ICAgICAgICAgcmV0dXJuIHRha2VuQmxvY2tJbmRleCgpOworICAgICAgICBjYXNlIDE6CisgICAg
ICAgICAgICByZXR1cm4gbm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBOb0Js
b2NrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9y
Q29uZGl0aW9uKGJvb2wgY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQnJhbmNo
KCkpOworICAgICAgICByZXR1cm4gY29uZGl0aW9uID8gdGFrZW5CbG9ja0luZGV4KCkgOiBub3RU
YWtlbkJsb2NrSW5kZXgoKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNIZWFwUHJlZGljdGlv
bigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3
Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhJc1N0cmlu
ZywgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJc09iamVjdCwgTm9kZVJlc3VsdEJv
b2xlYW4pIFwKICAgICBtYWNybyhJc0Z1bmN0aW9uLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAotICAg
IG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU1pZ2h0Q2xvYmJlcikg
XAorICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8o
VG9QcmltaXRpdmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJl
cnNXb3JsZCkgXAogICAgIG1hY3JvKFN0ckNhdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTE0
NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0
ZSogZXhlYywgQwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFT
U0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpC
YXNlbGluZUpJVCk7CiAgICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7Ci0gICAg
QVNTRVJUKGNvZGVCbG9jay0+bnVtYmVyT2ZERkdPU1JFbnRyaWVzKCkpOwogCiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKICAgICBkYXRhTG9nKCJPU1IgaW4gJXAoJXApIGZyb20gYmMjJXVc
biIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBieXRlY29kZUluZGV4KTsK
QEAgLTUxLDYgKzUwLDEzIEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMs
IEMKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwog
ICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmRmZ09TUkVudHJ5RGF0YUZvckJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCisgICAgaWYgKCFlbnRyeSkgeworI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVk
IGJlY2F1c2UgdGhlIGVudHJ5cG9pbnQgd2FzIG9wdGltaXplZCBvdXQuXG4iKTsKKyNlbmRpZgor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCiAgICAgQVNTRVJUKGVudHJ5LT5tX2J5dGVj
b2RlSW5kZXggPT0gYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgLy8gVGhlIGNvZGUgYmVsb3cg
Y2hlY2tzIGlmIGl0IGlzIHNhZmUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEl0IG1heSBmaW5kCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMjEsNyArMTEyMSw3IEBAIHNpemVfdCBERkdfT1BFUkFU
SU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3ApLnRvQm9vbGVhbihleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cCkudG9Cb29sZWFuKCk7CiB9CiAKICNpZiBERkdfRU5BQkxFKFZFUkJPU0VfU1BFQ1VMQVRJT05f
RkFJTFVSRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCShyZXZp
c2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
KyNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC00MCw2
ICs0Miw3IEBAIHZvaWQgUGhhc2U6OmJlZ2luUGhhc2UoKQogCiB2b2lkIFBoYXNlOjplbmRQaGFz
ZSgpCiB7CisgICAgdmFsaWRhdGUobV9ncmFwaCwgRHVtcEdyYXBoKTsKIH0KICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTczLDEwICs3MywxMCBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgUGhhc2VU
eXBlPgotdm9pZCBydW5QaGFzZShHcmFwaCYgZ3JhcGgpCitib29sIHJ1blBoYXNlKEdyYXBoJiBn
cmFwaCkKIHsKICAgICBQaGFzZVR5cGUgcGhhc2UoZ3JhcGgpOwotICAgIHBoYXNlLnJ1bigpOwor
ICAgIHJldHVybiBwaGFzZS5ydW4oKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgbV9jb3VudCA9IDA7CkBAIC03Nyw2ICs3
Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRvUm91bmRPZkRvdWJsZVZvdGluZygpOwogICAg
ICAgICAgICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2Vk
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKIHByaXZhdGU6
CkBAIC04MzEsOSArODMzLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKICAgICAKLXZvaWQgcGVy
Zm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1QcmVk
aWN0aW9uUHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNlPFByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPFByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGFyaXRobWV0aWMgbm9k
ZXMpIGRvIG5vdCBxdWFsaWZ5IGZvciBhbnkgb2YgdGhlc2UgY2F0ZWdvcmllcy4gQnV0IGFmdGVy
IHJ1bm5pbmcKIC8vIHRoaXMgcGhhc2UsIHdlJ2xsIGhhdmUgZnVsbCBpbmZvcm1hdGlvbiBmb3Ig
dGhlIGV4cGVjdGVkIHR5cGUgb2YgZWFjaCBub2RlLgogCi12b2lkIHBlcmZvcm1QcmVkaWN0aW9u
UHJvcGFnYXRpb24oR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihH
cmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHOjpQaGFzZQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhp
RWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9
IGZhbHNlOwogICAgICAgICBkbyB7CkBAIC02Myw3ICs2Myw4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCisgICAgICAgIAorICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNjYsOSArMTY3LDkgQEAg
cHJpdmF0ZToKIAogfTsKIAotdm9pZCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24oR3Jh
cGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24oR3JhcGgmIGdy
YXBoKQogewotICAgIHJ1blBoYXNlPFJlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2U+KGdyYXBo
KTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZT4oZ3Jh
cGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9u
UGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcg
KzM5LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBXZSBpbnNlcnRlZCBtYW55IGNhbi1iZS1yZWR1bmRh
bnQgUGhpIG5vZGVzIHdoZW4gYnVpbGRpbmcgdGhlIGdyYXBoLgogLy8gVGhpcyBwaGFzZSB3aWxs
IGp1c3QgcmVtb3ZlIHRoZW0uCiAKLXZvaWQgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0aW9u
KEdyYXBoJik7Citib29sIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbihHcmFwaCYpOwog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2NvcmVCb2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2NvcmVCb2FyZC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDEyICsx
MjAsMjUgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHVzZSBjb3VudCAmIGFk
ZCB0byB0aGUgZnJlZSBsaXN0LgogICAgICAgICAgICAgbV91c2VkW2luZGV4XSA9IDA7CiAgICAg
ICAgICAgICBtX2ZyZWUuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICBkYXRhTG9nKCIg
VmlydHVhbCByZWdpc3RlciAldSBpcyBhdCAldS8ldSB1c2VzLiIsIGluZGV4LCBtX3VzZWRbaW5k
ZXhdLCBub2RlLnJlZkNvdW50KCkpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAgICAgdm9p
ZCB1c2UoRWRnZSBjaGlsZCkKICAgICB7CiAgICAgICAgIHVzZShjaGlsZC5pbmRleFVuY2hlY2tl
ZCgpKTsKICAgICB9CisgICAgCisgICAgdm9pZCB1c2VJZkhhc1Jlc3VsdChFZGdlIGNoaWxkKQor
ICAgIHsKKyAgICAgICAgaWYgKCFjaGlsZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKCFtX2dyYXBoW2NoaWxkXS5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdXNlKGNoaWxkKTsKKyAgICB9CiAKICAgICB1bnNpZ25lZCBoaWdoV2F0ZXJtYXJrKCkK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0NSw3ICs2NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
CiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CiAg
ICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7
CiAgICAgCi0gICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICBpZiAodGFrZW4g
PT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKICAgICAgICAgQmxv
Y2tJbmRleCB0bXAgPSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKQEAgLTcxNCw3
ICs3MTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAKICAg
ICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9j
ay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAm
IGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgotICAg
IGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAgaWYgKHRha2VuID09IG5leHRCbG9j
aygpKSB7CiAgICAgICAgIGNvbmQgPSBKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpOwogICAgICAg
ICBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Olplcm87CiAgICAgICAgIEJsb2Nr
SW5kZXggdG1wID0gdGFrZW47CkBAIC04NjYsNyArODY2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3
aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwg
c3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24g
c28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KLSAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkg
eworICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52
ZXJ0OwogICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5v
dFRha2VuOwpAQCAtMTc3NCw3ICsxNzc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJy
YW5jaChOb2RlJiBubwogICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlv
biBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKIAotICAgICAgICBpZiAodGFr
ZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkp
IHsKICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpaZXJvOwogICAgICAg
ICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgIHRha2VuID0gbm90VGFr
ZW47CkBAIC0xNzkzLDcgKzE3OTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNo
KE5vZGUmIG5vCiAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAgICAgICAg
ICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgICAgICAgICBpbnZlcnQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgICAg
ICAgICAgdGFrZW4gPSBub3RUYWtlbjsKQEAgLTI4NjAsNyArMjg2MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybzsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRha2VuID09IChtX2Js
b2NrICsgMSkpIHsKKyAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAg
ICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpaZXJvOwogICAgICAgICAg
ICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgICAgICAgICAgdGFrZW4gPSBu
b3RUYWtlbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA0LDcg
KzYwNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICBC
bG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKICAgICBCbG9j
a0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAK
LSAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgIGlmICh0YWtlbiA9PSBuZXh0
QmxvY2soKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwogICAgICAgICBCbG9ja0luZGV4
IHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwpAQCAtNjcxLDcgKzY3MSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKIAogICAgIC8vIFRo
ZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAg
IC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0
IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCi0gICAgaWYgKHRh
a2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsK
ICAgICAgICAgY29uZCA9IEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCk7CiAgICAgICAgIGNhbGxS
ZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6WmVybzsKICAgICAgICAgQmxvY2tJbmRleCB0
bXAgPSB0YWtlbjsKQEAgLTgxMyw3ICs4MTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZVBlZXBoCiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJh
bmNoIHRvIHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2gg
dGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBj
YW4gZmFsbCB0aHJvdWdoLgotICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAg
aWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7CiAg
ICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47
CkBAIC0xODM4LDcgKzE4MzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5v
ZGUmIG5vCiAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAgICAgICAgICBp
ZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgICAgICAgICBpbnZlcnQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgICAgICAg
ICAgdGFrZW4gPSBub3RUYWtlbjsKQEAgLTE4NjYsNyArMTg2Niw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5QcmVk
aWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgICAgICAgICAgICAgIGlmICh0YWtlbiA9
PSBuZXh0QmxvY2soKSkgewogICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fz
c2VtYmxlcjo6WmVybzsKICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtl
bjsKICAgICAgICAgICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKQEAgLTI4NTIsNyArMjg1
Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRp
b24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgICAgIGlmICh0YWtlbiA9PSBu
ZXh0QmxvY2soKSkgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVy
OjpaZXJvOwogICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAg
ICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODI3LDcgKzgyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9s
ZU9iamUKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
biA9IE1hY3JvQXNzZW1ibGVyOjpFcXVhbDsKICAgICAKLSAgICBpZiAodGFrZW4gPT0gKG1fYmxv
Y2sgKyAxKSkgeworICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBjb25k
aXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWw7CiAgICAgICAgIEJsb2NrSW5kZXggdG1w
ID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CkBAIC04NTcsNyArODU3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZQogCiAgICAgLy8gVGhlIGJy
YW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8g
SWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhl
IGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KLSAgICBpZiAodGFrZW4g
PT0gKG1fYmxvY2sgKyAxKSkgeworICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAg
ICAgICBjb25kaXRpb24gPSBKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmRpdGlvbik7CiAgICAgICAg
IEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CkBAIC0x
MjgwLDggKzEyODAsMTEgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBHUFJJbmZvOjpyZWdUMCk7CiAKICAgICBBU1NF
UlQoIW1fY29tcGlsZUluZGV4KTsKLSAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9q
aXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrbV9ibG9jaykKLSAgICAgICAgY29tcGlsZSgq
bV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXSk7CisgICAgZm9yIChtX2Jsb2NrID0gMDsg
bV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spIHsKKyAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2td
LmdldCgpOworICAgICAgICBpZiAoYmxvY2spCisgICAgICAgICAgICBjb21waWxlKCpibG9jayk7
CisgICAgfQogICAgIGxpbmtCcmFuY2hlcygpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTI4
OSw4ICsxMjkyLDEwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcygpCiB7CiAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrJiBibG9jayA9ICptX2ppdC5ncmFw
aCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhdOwotICAgICAgICBpZiAoIWJsb2NrLmlzT1NSVGFyZ2V0
KQorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBuZWVkIHRvIGNyZWF0ZSBPU1IgZW50
cnkgdHJhbXBvbGluZXMgd2hlbiB1c2luZyBlZGdlIGNvZGUKQEAgLTEzMTIsOSArMTMxNywxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmllcyhMaW5rCiB7CiAgICAgdW5zaWdu
ZWQgb3NyRW50cnlJbmRleCA9IDA7CiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRl
eCkgewotICAgICAgICBCYXNpY0Jsb2NrJiBibG9jayA9ICptX2ppdC5ncmFwaCgpLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdOwotICAgICAgICBpZiAoYmxvY2suaXNPU1JUYXJnZXQpCi0gICAgICAgICAg
ICBtX2ppdC5ub3RpY2VPU1JFbnRyeShibG9jaywgbV9vc3JFbnRyeUhlYWRzW29zckVudHJ5SW5k
ZXgrK10sIGxpbmtCdWZmZXIpOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0Lmdy
YXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9qaXQubm90aWNlT1NSRW50cnkoKmJsb2Nr
LCBtX29zckVudHJ5SGVhZHNbb3NyRW50cnlJbmRleCsrXSwgbGlua0J1ZmZlcik7CiAgICAgfQog
ICAgIEFTU0VSVChvc3JFbnRyeUluZGV4ID09IG1fb3NyRW50cnlIZWFkcy5zaXplKCkpOwogfQpA
QCAtMjg1Niw3ICsyODY0LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVx
Rm9yQwogICAgICAgICAKICAgICAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJy
YW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3
aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNv
IHdlIGNhbiBmYWxsIHRocm91Z2guCi0gICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEp
KSB7CisgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICAgICAgY29u
ZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsOwogICAgICAgICAgICAgQmxvY2tJbmRl
eCB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47CkBAIC0zMTI2LDcg
KzMxMzQsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOCiAgICAg
QmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAg
ICAgCiAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKLSAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sg
KyAxKSkgeworICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBpbnZlcnQg
PSB0cnVlOwogICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9
IG5vdFRha2VuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNiArMTkyLDE2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7CiAgICAgfQogICAg
IAorICAgIEJsb2NrSW5kZXggbmV4dEJsb2NrKCkKKyAgICB7CisgICAgICAgIGZvciAoQmxvY2tJ
bmRleCByZXN1bHQgPSBtX2Jsb2NrICsgMTsgOyByZXN1bHQrKykgeworICAgICAgICAgICAgaWYg
KHJlc3VsdCA+PSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTm9CbG9jazsKKyAgICAgICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLm1fYmxvY2tz
W3Jlc3VsdF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKICAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiBy
ZXR1cm5Gb3JtYXQpOwogICAgIEZQUlJlZyBmaWxsRG91YmxlKE5vZGVJbmRleCk7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKQEAgLTMwNiw3ICszMTYsMTAgQEAgcHVibGljOgogICAgIC8vIENhbGxlZCBv
biBhbiBvcGVyYW5kIG9uY2UgaXQgaGFzIGJlZW4gY29uc3VtZWQgYnkgYSBwYXJlbnQgbm9kZS4K
ICAgICB2b2lkIHVzZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGF0KG5vZGVJbmRleCkudmlydHVhbFJlZ2lzdGVy
KCk7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICBpZiAoIW5v
ZGUuaGFzUmVzdWx0KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsK
IAogICAgICAgICAvLyB1c2UoKSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWUgYmVjb21lcyBk
ZWFkLCBhbmQgYW55CkBAIC0xODUyLDcgKzE4NjUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBpZiAoaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKICAgICAgICAgICAgIGVtaXRF
ZGdlQ29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvbiA9PSBtX2Jsb2Nr
ICsgMQorICAgICAgICBpZiAoZGVzdGluYXRpb24gPT0gbmV4dEJsb2NrKCkKICAgICAgICAgICAg
ICYmIGZhbGxUaHJvdWdoTW9kZSA9PSBBdEZhbGxUaHJvdWdoUG9pbnQpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdWYWxpZGF0ZS5o
IgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCisjaWYgREZHX0VOQUJMRShWQUxJREFUSU9OKQorCitjbGFzcyBWYWxpZGF0ZSB7Citw
dWJsaWM6CisgICAgVmFsaWRhdGUoR3JhcGgmIGdyYXBoLCBHcmFwaER1bXBNb2RlIGdyYXBoRHVt
cE1vZGUpCisgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2dyYXBoRHVtcE1v
ZGUoZ3JhcGhEdW1wTW9kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgICNkZWZpbmUgVkFMSURB
VEUoY29udGV4dCwgYXNzZXJ0aW9uKSBkbyB7IFwKKyAgICAgICAgaWYgKCEoYXNzZXJ0aW9uKSkg
eyBcCisgICAgICAgICAgICBkYXRhTG9nKCJcblxuXG5BdCAiKTsgXAorICAgICAgICAgICAgcmVw
b3J0VmFsaWRhdGlvbkNvbnRleHQgY29udGV4dDsgXAorICAgICAgICAgICAgZGF0YUxvZygiOiB2
YWxpZGF0aW9uICVzICglczolZCkgZmFpbGVkLlxuIiwgI2Fzc2VydGlvbiwgX19GSUxFX18sIF9f
TElORV9fKTsgXAorICAgICAgICAgICAgZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSgpOyBcCisgICAg
ICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RG
X1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICAgICAgICAgIENSQVNIKCk7IFwK
KyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoMCkKKyAgICAKKyAgICAjZGVmaW5lIFZfRVFVQUwo
Y29udGV4dCwgbGVmdCwgcmlnaHQpIGRvIHsgXAorICAgICAgICBpZiAobGVmdCAhPSByaWdodCkg
eyBcCisgICAgICAgICAgICBkYXRhTG9nKCJcblxuXG5BdCAiKTsgXAorICAgICAgICAgICAgcmVw
b3J0VmFsaWRhdGlvbkNvbnRleHQgY29udGV4dDsgXAorICAgICAgICAgICAgZGF0YUxvZygiOiB2
YWxpZGF0aW9uICglcyA9ICIsICNsZWZ0KTsgXAorICAgICAgICAgICAgZHVtcERhdGEobGVmdCk7
IFwKKyAgICAgICAgICAgIGRhdGFMb2coIikgPT0gKCVzID0gIiwgI3JpZ2h0KTsgXAorICAgICAg
ICAgICAgZHVtcERhdGEocmlnaHQpOyBcCisgICAgICAgICAgICBkYXRhTG9nKCIpICglczolZCkg
ZmFpbGVkLlxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorICAgICAgICAgICAgZHVtcEdyYXBo
SWZBcHByb3ByaWF0ZSgpOyBcCisgICAgICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJl
KF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2xlZnQgIiA9PSAiICNy
aWdodCk7IFwKKyAgICAgICAgICAgIENSQVNIKCk7IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGls
ZSAoMCkKKworICAgIHZvaWQgdmFsaWRhdGUoKQorICAgIHsKKyAgICAgICAgLy8gTkIuIFRoaXMg
Y29kZSBpcyBub3Qgd3JpdHRlbiBmb3IgcGVyZm9ybWFuY2UsIHNpbmNlIGl0IGlzIG5vdCBpbnRl
bmRlZCB0byBydW4KKyAgICAgICAgLy8gaW4gcmVsZWFzZSBidWlsZHMuCisgICAgICAgIAorICAg
ICAgICAvLyBWYWxpZGF0ZSByZWYgY291bnRzIGFuZCB1c2VzLgorICAgICAgICBWZWN0b3I8dW5z
aWduZWQ+IG15UmVmQ291bnRzOworICAgICAgICBteVJlZkNvdW50cy5maWxsKDAsIG1fZ3JhcGgu
c2l6ZSgpKTsKKyAgICAgICAgQml0VmVjdG9yIGFjY2VwdGFibGVOb2RlSW5kaWNlczsKKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICgh
YmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7Cisg
ICAgICAgICAgICAgICAgYWNjZXB0YWJsZU5vZGVJbmRpY2VzLnNldChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBo
Lm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdl
ID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdl
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBteVJlZkNvdW50c1tlZGdlLmluZGV4KCldKys7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgSSdtIGEgRmx1
c2gsIFBoYW50b20sIEdldExvY2FsLCBvciBQaGksIG15IGNoaWxkcmVuIHNob3VsZCBoYXNSZXN1
bHQoKS4KKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9t
OgorICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGVJ
bmRleCwgZWRnZSksIG1fZ3JhcGhbZWRnZV0uaGFzUmVzdWx0KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJ
bmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBCaXRWZWN0
b3IgcGhpc0luVGhpc0Jsb2NrOworICAgICAgICAgICAgQml0VmVjdG9yIG5vZGVzSW5UaGlzQmxv
Y2s7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxv
Y2stPm51bU5vZGVzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBibG9jay0+bm9kZUluZGV4KGkpOworICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG5v
ZGVzSW5UaGlzQmxvY2suc2V0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGJsb2Nr
LT5pc1BoaUluZGV4KGkpKQorICAgICAgICAgICAgICAgICAgICBwaGlzSW5UaGlzQmxvY2suc2V0
KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZUluZGV4KSwgbXlSZWZD
b3VudHNbbm9kZUluZGV4XSwgbm9kZS5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyAr
K2opIHsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2Rl
LCBqKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgs
IGVkZ2UpLCBhY2NlcHRhYmxlTm9kZUluZGljZXMuZ2V0KGVkZ2UuaW5kZXgoKSkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGlm
ICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmdldChub2RlSW5kZXgpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4KSwgbm9kZS5vcCgpID09IFBoaSk7
CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS5sb2NhbCgpOwor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxk
cmVuKG5vZGUpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFw
aC5jaGlsZChub2RlLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaFtlZGdlXS5vcCgpID09IFNldExvY2FsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1bWVudAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gRmx1
c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09
IFBoaSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocGhp
c0luVGhpc0Jsb2NrLmdldChlZGdlLmluZGV4KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZXNJblRoaXNCbG9jay5nZXQoZWRnZS5pbmRleCgpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwgZWRnZSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1bWVudAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgpID09
IEZsdXNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIG11c3QgZXhpc3QgYSBwcmVkZWNlc3NvciBi
bG9jayB0aGF0IGhhcyB0aGlzIG5vZGUgaW5kZXggaW4KKyAgICAgICAgICAgICAgICAgICAgLy8g
aXRzIHRhaWwgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+
bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIHByZXZCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2stPm1fcHJlZGVjZXNz
b3JzW2tdXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywg
YmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldkJs
b2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHJl
dk5vZGVJbmRleCA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCBy
ZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgorICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9ja0luZGV4LCBibG9jay0+bV9w
cmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZUluZGV4ICE9IE5vTm9kZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlJiBwcmV2Tm9kZSA9IG1fZ3JhcGhbcHJldk5vZGVJbmRleF07CisgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29y
c1trXSwgcHJldk5vZGVJbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmV2Tm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLm9wKCkgPT0gU2V0TG9jYWwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLm9wKCkgPT0gU2V0
QXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLm9w
KCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2Rl
Lm9wKCkgPT0gUGhpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9k
ZS5vcCgpID09IEdldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9k
ZUluZGV4ID09IGVkZ2UuaW5kZXgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZS5v
cCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlSW5k
ZXggPSBwcmV2Tm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXZOb2RlSW5kZXggPT0gZWRnZS5pbmRleCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QXQgdGhpcyBwb2ludCBpdCBjYW5ub3QgcmVmZXIgaW50byB0aGlzIGJsb2NrLgorICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10s
IHByZXZOb2RlSW5kZXgpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5pbmRleCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBmb3VuZCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGVzSW5UaGlzQmxvY2suZ2V0KG5vZGVJbmRleCkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlSW5kZXgpLCBub2RlLm9wKCkgIT0gUGhpKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsg
KytqKSB7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9k
ZSwgaik7CisgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4
LCBlZGdlKSwgbm9kZXNJblRoaXNCbG9jay5nZXQobm9kZUluZGV4KSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBHcmFwaCYgbV9ncmFwaDsKKyAgICBHcmFwaER1bXBNb2RlIG1fZ3JhcGhEdW1wTW9kZTsKKyAg
ICAKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGVJbmRleCBub2RlSW5kZXgp
CisgICAgeworICAgICAgICBkYXRhTG9nKCJAJXUiLCBub2RlSW5kZXgpOworICAgIH0KKyAgICAK
KyAgICBlbnVtIEJsb2NrVGFnIHsgQmxvY2sgfTsKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25D
b250ZXh0KEJsb2NrVGFnLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBk
YXRhTG9nKCJCbG9jayAjJXUiLCBibG9ja0luZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBy
ZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlSW5kZXggbm9kZUluZGV4LCBFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICBkYXRhTG9nKCJAJXUgLT4gJXNAJXUiLCBub2RlSW5kZXgsIHVzZUtpbmRU
b1N0cmluZyhlZGdlLnVzZUtpbmQoKSksIGVkZ2UuaW5kZXgoKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCwgQmxvY2tJbmRleCBzb3VyY2VCbG9ja0luZGV4LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9u
QmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIGRhdGFMb2coInIlZCBpbiBCbG9jayAjJXUgPC0g
IyV1IiwgbG9jYWwsIHNvdXJjZUJsb2NrSW5kZXgsIGRlc3RpbmF0aW9uQmxvY2tJbmRleCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCisgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAg
IGRhdGFMb2coIkAldSBpbiBCbG9jayAjJXUiLCBub2RlSW5kZXgsIGJsb2NrSW5kZXgpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAorICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGVJbmRleCBleHBlY3Rl
ZE5vZGVJbmRleCwgRWRnZSBpbmNvbWluZ0VkZ2UpCisgICAgeworICAgICAgICBkYXRhTG9nKCJA
JXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGVJbmRleCwg
YmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlSW5kZXgsIGluY29taW5nRWRnZS5pbmRleCgpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBkdW1wRGF0YSh1bnNpZ25lZCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGRhdGFMb2coIiV1IiwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBHcmFw
aElmQXBwcm9wcmlhdGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGhEdW1wTW9kZSA9PSBE
b250RHVtcEdyYXBoKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhTG9nKCJHcmFw
aCBhdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAg
fQorfTsKKwordm9pZCB2YWxpZGF0ZShHcmFwaCYgZ3JhcGgsIEdyYXBoRHVtcE1vZGUgZ3JhcGhE
dW1wTW9kZSkKK3sKKyAgICBWYWxpZGF0ZSB2YWxpZGF0aW9uT2JqZWN0KGdyYXBoLCBncmFwaER1
bXBNb2RlKTsKKyAgICB2YWxpZGF0aW9uT2JqZWN0LnZhbGlkYXRlKCk7Cit9CisKKyNlbmRpZiAv
LyBERkdfRU5BQkxFKFZBTElEQVRJT04pCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVmFsaWRhdGVf
aAorI2RlZmluZSBERkdWYWxpZGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIEdy
YXBoRHVtcE1vZGUgeyBEb250RHVtcEdyYXBoLCBEdW1wR3JhcGggfTsKKworI2lmIERGR19FTkFC
TEUoVkFMSURBVElPTikKK3ZvaWQgdmFsaWRhdGUoR3JhcGgmLCBHcmFwaER1bXBNb2RlID0gRHVt
cEdyYXBoKTsKKyNlbHNlCitpbmxpbmUgdm9pZCB2YWxpZGF0ZShHcmFwaCYsIEdyYXBoRHVtcE1v
ZGUgPSBEdW1wR3JhcGgpIHsgfQorI2VuZGlmCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUGhhc2VfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
aXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKCJQcmVzZXJ2ZWQgdmFyczog
Iik7CkBAIC01NCw2ICs1NCwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgZm9yIChzaXpl
X3QgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFi
bGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
bmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5C
bG9jaykgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQo
aW5kZXhJbkJsb2NrKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CkBAIC02NiwyMiArNzAsMjEgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSB8fCBub2RlLm9wKCkgPT0gUGhpIHx8IG5vZGUub3Ao
KSA9PSBGbHVzaCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5v
ZGVzIGluIHRoZSBncmFwaCwgcmVmZXJlbmNpbmcKLSAgICAgICAgICAgICAgICAvLyByZXN1bHRz
IGZyb20gcHJpb3IgYmxvY2tzLgotICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0gR2V0
TG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGNhbGwgdXNlIG9uIGFsbCBv
ZiB0aGUgY3VycmVudCBub2RlJ3MgY2hpbGRyZW4sIHRoZW4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gYWxsb2NhdGUgYSBWaXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8gc28gaW4g
dGhpcwotICAgICAgICAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMg
b24gaXRzIGxhc3QgdXNlLCBhbmQgYQotICAgICAgICAgICAgICAgICAgICAvLyBWaXJ0dWFsUmVn
aXN0ZXIgaXMgZnJlZWQsIHRoZW4gaXQgbWF5IGJlIHJldXNlZCBmb3Igbm9kZS4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxk
KCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNo
aWxkSWR4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UobV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxk
MSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQy
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzUmVzdWx0KCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBjYWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJl
bnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCisgICAgICAgICAgICAgICAgLy8gYWxsb2NhdGUgYSBW
aXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8gc28gaW4gdGhpcworICAgICAgICAg
ICAgICAgIC8vIG9yZGVyIHNvIHRoYXQgaWYgYSBjaGlsZCBpcyBvbiBpdHMgbGFzdCB1c2UsIGFu
ZCBhCisgICAgICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVkLCB0aGVuIGl0
IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3Mo
KSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQo
KSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2No
aWxkSWR4XSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
c2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMygpKTsKICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkp
CkBAIC0xMTQsMTIgKzExNywxNCBAQCBwdWJsaWM6CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJC
T1NFKQogICAgICAgICBkYXRhTG9nKCJOdW0gY2FsbGVlIHJlZ2lzdGVyczogJXVcbiIsIGNhbGxl
ZVJlZ2lzdGVycyk7CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIH07CiAKLXZvaWQgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgmIGdy
YXBoKQorYm9vbCBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYgZ3JhcGgp
CiB7Ci0gICAgcnVuUGhhc2U8VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlPihncmFwaCk7
CisgICAgcmV0dXJuIHJ1blBoYXNlPFZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZT4oZ3Jh
cGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2Nh
dGlvblBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBmb3IgbG9vay11cCB0YWJsZXMgZm9yIHRo
ZSBsaW5lYXIgc2NhbiByZWdpc3RlciBhbGxvY2F0b3IgdGhhdCB0aGUgYmFja2VuZAogLy8gdXNl
cy4KIAotdm9pZCBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYpOworYm9v
bCBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODU0LDcgKzg1NCw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2Vl
cFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBkb3VibGUgbGFzdEdDRW5kVGltZSA9IFdURjo6Y3VycmVu
dFRpbWUoKTsKICAgICBtX2xhc3RHQ0xlbmd0aCA9IGxhc3RHQ0VuZFRpbWUgLSBsYXN0R0NTdGFy
dFRpbWU7CiAgICAgSkFWQVNDUklQVENPUkVfR0NfRU5EKCk7Ci0KKyAgICAKICAgICAoKm1fYWN0
aXZpdHlDYWxsYmFjaykoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTg1LDcgKzI1ODUsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZShFeGVjCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5k
OwogICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc0Jvb2xlYW4oIWNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKS50b0Jvb2xlYW4o
Y2FsbEZyYW1lKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFjYWxsRnJh
bWUtPnIoc3JjKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpOwogICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7CiAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0Owog
CkBAIC0zOTA1LDcgKzM5MDUsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgKi8K
ICAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBpbnQgdGFyZ2V0
ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihjb25kKS5qc1Zh
bHVlKCkudG9Cb29sZWFuKGNhbGxGcmFtZSkpIHsKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihj
b25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7
CiAgICAgICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwogICAgICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwpAQCAtMzkyNSw3ICszOTI1LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAg
ICAgICAgICovCiAgICAgICAgIGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAg
aW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmICghY2FsbEZyYW1lLT5y
KGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAoIWNh
bGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQ
QyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwogICAgICAgICAg
ICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMzk0Miw3ICszOTQyLDcgQEAgc2tpcF9pZF9jdXN0
b21fc2VsZjoKICAgICAgICAgKi8KICAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5k
OwogICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKGNh
bGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNhbGxGcmFtZSkpIHsKKyAgICAg
ICAgaWYgKGNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAg
ICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAg
ICAgICAgIH0KQEAgLTM5NTgsNyArMzk1OCw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAg
ICAgICovCiAgICAgICAgIGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaW50
IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmICghY2FsbEZyYW1lLT5yKGNv
bmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAoIWNhbGxG
cmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyAr
PSB0YXJnZXQ7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjg1NSw5ICsyODU1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFs
dWUsIG9wXwogCiAgICAgSlNWYWx1ZSBzcmMgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgp
OwogCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLQot
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFzcmMudG9Cb29sZWFuKGNhbGxGcmFtZSkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFzcmMudG9Cb29sZWFuKCkpOwogICAg
IENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQpAQCAtMjg2OCw5ICsyODY2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04o
aW50LCBvcF9qdHJ1ZSkKIAogICAgIEpTVmFsdWUgc3JjMSA9IHN0YWNrRnJhbWUuYXJnc1swXS5q
c1ZhbHVlKCk7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZy
YW1lOwotCi0gICAgYm9vbCByZXN1bHQgPSBzcmMxLnRvQm9vbGVhbihjYWxsRnJhbWUpOworICAg
IGJvb2wgcmVzdWx0ID0gc3JjMS50b0Jvb2xlYW4oKTsKICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
X0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwNyw3ICs1MDcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
bmV3X3JlZ2V4CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbm90KQogewogICAgIExM
SU5UX0JFR0lOKCk7Ci0gICAgTExJTlRfUkVUVVJOKGpzQm9vbGVhbighTExJTlRfT1BfQygyKS5q
c1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKSk7CisgICAgTExJTlRfUkVUVVJOKGpzQm9vbGVhbigh
TExJTlRfT1BfQygyKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpKTsKIH0KIAogTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2VxKQpAQCAtMTExMCwxMyArMTExMCwxMyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfam1wX3Njb3BlCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfanRydWUpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBMTElOVF9CUkFOQ0gob3Bf
anRydWUsIExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7CisgICAgTExJ
TlRfQlJBTkNIKG9wX2p0cnVlLCBMTElOVF9PUF9DKDEpLmpzVmFsdWUoKS50b0Jvb2xlYW4oKSk7
CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qZmFsc2UpCiB7CiAgICAgTExJ
TlRfQkVHSU4oKTsKLSAgICBMTElOVF9CUkFOQ0gob3BfamZhbHNlLCAhTExJTlRfT1BfQygxKS5q
c1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBMTElOVF9CUkFOQ0gob3BfamZhbHNlLCAh
TExJTlRfT1BfQygxKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpOwogfQogCiBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfamxlc3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc5Nyw3ICs3OTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2Fs
bCgpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC50b0Jvb2xlYW4oZXhlYykpCisgICAgICAgICAg
ICBpZiAocmVzdWx0LnRvQm9vbGVhbigpKQogICAgICAgICAgICAgICAgIHJlc3VsdEFycmF5LT5w
dXREaXJlY3RJbmRleChleGVjLCBmaWx0ZXJJbmRleCsrLCB2KTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoayA9PSBsZW5ndGgpCkBAIC04MTgsNyArODE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlz
T2JqKTsKIAogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKTsKLSAgICAgICAgaWYg
KHJlc3VsdC50b0Jvb2xlYW4oZXhlYykpCisgICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFuKCkp
CiAgICAgICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgZmlsdGVySW5k
ZXgrKywgdik7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0QXJyYXkp
OwpAQCAtOTE3LDcgKzkxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykp
OwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgICAgICBp
ZiAoIXJlc3VsdC50b0Jvb2xlYW4oY2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpKQorICAg
ICAgICAgICAgaWYgKCFyZXN1bHQudG9Cb29sZWFuKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTkzNCw3ICs5MzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICAgICAgYm9vbCBwcmVkaWNhdGVS
ZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5VGhp
cywgZWFjaEFyZ3VtZW50cykudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBib29sIHByZWRpY2F0
ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlU
aGlzLCBlYWNoQXJndW1lbnRzKS50b0Jvb2xlYW4oKTsKICAgICAgICAgaWYgKCFwcmVkaWNhdGVS
ZXN1bHQpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihmYWxzZSk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTEwMjUsNyArMTAyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwg
anNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlz
T2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0g
ICAgICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbihjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShl
eGVjKSkpCisgICAgICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbigpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTEwNDIsNyArMTA0Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgICAgICBib29s
IHByZWRpY2F0ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJv
b2wgcHJlZGljYXRlUmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbigpOwogICAgICAgICBpZiAo
cHJlZGljYXRlUmVzdWx0KSB7CiAgICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4odHJ1ZSk7
CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCB2b2lkIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24oCiBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVh
bk9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4
ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7
Ci0gICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFu
KGFyZ3MuYXQoMCkudG9Cb29sZWFuKGV4ZWMpKSk7CisgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVl
KGV4ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFuKGFyZ3MuYXQoMCkudG9Cb29sZWFuKCkpKTsK
ICAgICByZXR1cm4gb2JqOwogfQogCkBAIC02OCw3ICs2OCw3IEBAIENvbnN0cnVjdFR5cGUgQm9v
bGVhbkNvbnN0cnVjdG9yOjpnZXRDb24KIC8vIEVDTUEgMTUuNi4xCiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihleGVjLT5hcmd1bWVu
dCgwKS50b0Jvb2xlYW4oZXhlYykpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oKSkpOwogfQogCiBDYWxsVHlwZSBCb29s
ZWFuQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtOTYsNyArOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQmFzaWMg
Y29udmVyc2lvbnMuCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdG9QcmltaXRp
dmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAgICAgICAgIGJv
b2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVl
JikgY29uc3Q7Ci0gICAgICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OworICAg
ICAgICBib29sIHRvQm9vbGVhbigpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBk
b3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMiwxMSArNDIyLDYgQEAgdm9pZCBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMo
ZXhlYywgb2JqZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJv
b2wgSlNPYmplY3Q6OnRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdAotewotICAgIHJldHVybiB0
cnVlOwotfQotCiBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKIHsKICAgICBKU1ZhbHVlIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51
bWJlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
IAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQcmlt
aXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25zdDsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNv
bnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZyogdG9TdHJpbmcoRXhlY1N0
YXRlKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNyBAQCBib29sIEpT
U3RyaW5nOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIEpTU3RyaW5nOjp0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QKK2Jvb2wgSlNTdHJp
bmc6OnRvQm9vbGVhbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGVuZ3RoOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1p
dGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CiAgICAgICAgIGJv
b2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVl
JikgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCopIGNvbnN0OwogICAgICAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29u
c3Q7CkBAIC00MzUsMjMgKzQzNSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBi
b29sIGlzSlNTdHJpbmcoSlNWYWx1ZSB2KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIHYuYXNDZWxs
KCktPmNsYXNzSW5mbygpID09ICZKU1N0cmluZzo6c19pbmZvOyB9CiAKLSAgICBpbmxpbmUgYm9v
bCBKU0NlbGw6OnRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgaW5saW5lIGJv
b2wgSlNDZWxsOjp0b0Jvb2xlYW4oKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzU3RyaW5n
KCkpIAotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhp
cyktPnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBKU1N0cmluZyo+KHRoaXMpLT50b0Jvb2xlYW4oKTsKICAgICAgICAgcmV0dXJuICFzdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAg
Ly8gLS0tIEpTVmFsdWUgaW5saW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAg
Ci0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjp0b0Jvb2xlYW4oKSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKGlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybiBhc0ludDMyKCk7CiAgICAg
ICAgIGlmIChpc0RvdWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGFzRG91YmxlKCkgPiAwLjAg
fHwgYXNEb3VibGUoKSA8IDAuMDsgLy8gZmFsc2UgZm9yIE5hTgogICAgICAgICBpZiAoaXNDZWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gYXNDZWxsKCktPnRvQm9vbGVhbihleGVjKTsKKyAgICAg
ICAgICAgIHJldHVybiBhc0NlbGwoKS0+dG9Cb29sZWFuKCk7CiAgICAgICAgIHJldHVybiBpc1Ry
dWUoKTsgLy8gZmFsc2UsIG51bGwsIGFuZCB1bmRlZmluZWQgYWxsIGNvbnZlcnQgdG8gZmFsc2Uu
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1i
ZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKTsKIAotICAgICAgICBib29s
IHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgYm9vbCB0b0Jvb2xlYW4oKSBj
b25zdDsKIAogICAgICAgICAvLyB0b051bWJlciBjb252ZXJzaW9uIGlzIGV4cGVjdGVkIHRvIGJl
IHNpZGUgZWZmZWN0IGZyZWUgaWYgYW4gZXhjZXB0aW9uIGhhcwogICAgICAgICAvLyBiZWVuIHNl
dCBpbiB0aGUgRXhlY1N0YXRlIGFscmVhZHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNCwxNCArMjE0LDE0IEBAIHN0YXRpYyBib29sIHRvUHJvcGVy
dHlEZXNjcmlwdG9yKEV4ZWNTdGEKIAogICAgIFByb3BlcnR5U2xvdCBlbnVtZXJhYmxlU2xvdChk
ZXNjcmlwdGlvbik7CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUsIGVudW1lcmFibGVTbG90KSkgewotICAg
ICAgICBkZXNjLnNldEVudW1lcmFibGUoZW51bWVyYWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAg
IGRlc2Muc2V0RW51bWVyYWJsZShlbnVtZXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSkudG9Cb29sZWFuKCkpOwogICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgUHJvcGVydHlTbG90IGNvbmZpZ3VyYWJsZVNsb3QoZGVzY3JpcHRpb24pOwogICAgIGlmIChk
ZXNjcmlwdGlvbi0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
b25maWd1cmFibGUsIGNvbmZpZ3VyYWJsZVNsb3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0Q29uZmln
dXJhYmxlKGNvbmZpZ3VyYWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmNvbmZpZ3VyYWJsZSkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgZGVzYy5zZXRDb25m
aWd1cmFibGUoY29uZmlndXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuY29uZmlndXJhYmxlKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yMzYsNyAr
MjM2LDcgQEAgc3RhdGljIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YQogCiAgICAg
UHJvcGVydHlTbG90IHdyaXRhYmxlU2xvdChkZXNjcmlwdGlvbik7CiAgICAgaWYgKGRlc2NyaXB0
aW9uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxl
LCB3cml0YWJsZVNsb3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0V3JpdGFibGUod3JpdGFibGVTbG90
LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSkudG9Cb29sZWFu
KGV4ZWMpKTsKKyAgICAgICAgZGVzYy5zZXRXcml0YWJsZSh3cml0YWJsZVNsb3QuZ2V0VmFsdWUo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKS50b0Jvb2xlYW4oKSk7CiAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
OSw5ICsyNDksOSBAQCB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlCiAg
ICAgYXNSZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0SW5wdXQoZXhlYywgdmFsdWUu
dG9TdHJpbmcoZXhlYykpOwogfQogCi12b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5l
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit2
b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGFzUmVnRXhwQ29uc3RydWN0b3IoYmFz
ZU9iamVjdCktPnNldE11bHRpbGluZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworICAgIGFzUmVn
RXhwQ29uc3RydWN0b3IoYmFzZU9iamVjdCktPnNldE11bHRpbGluZSh2YWx1ZS50b0Jvb2xlYW4o
KSk7CiB9CiAKIC8vIEVDTUEgMTUuMTAuNApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDcsMTEgKzE0NywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZ0V4cFByb3RvCiAKICAgICBjaGFyIHBvc3RmaXhbNV0gPSB7ICcvJywgMCwgMCwgMCwgMCB9
OwogICAgIGludCBpbmRleCA9IDE7Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHRoaXNP
YmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS50b0Jvb2xlYW4o
KSkKICAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICdnJzsKLSAgICBpZiAodGhpc09iamVjdC0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pZ25vcmVDYXNlKS50b0Jvb2xlYW4oZXhl
YykpCisgICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
aWdub3JlQ2FzZSkudG9Cb29sZWFuKCkpCiAgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAnaSc7
Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVs
dGlsaW5lKS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKS50b0Jvb2xlYW4oKSkKICAgICAgICAgcG9z
dGZpeFtpbmRleF0gPSAnbSc7CiAgICAgVVN0cmluZyBzb3VyY2UgPSB0aGlzT2JqZWN0LT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgIC8vIElmIHNvdXJjZSBpcyBlbXB0eSwgdXNlICIvKD86KS8iIHRvIGF2b2lk
IGNvbGxpZGluZyB3aXRoIGNvbW1lbnQgc3ludGF4Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139140</attachid>
            <date>2012-04-27 00:10:31 -0700</date>
            <delta_ts>2012-04-27 10:50:26 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cfgsimplify_patch_12.diff</filename>
            <type>text/plain</type>
            <size>169599</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE1Mzk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3MCBA
QAorMjAxMi0wNC0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTUzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNo
YW5nZSBnaXZlcyB0aGUgREZHIHRoZSBhYmlsaXR5IHRvIHNpbXBsaWZ5IHRoZSBjb250cm9sIGZs
b3cgZ3JhcGgKKyAgICAgICAgYXMgcGFydCBvZiBhbiBvcHRpbWl6YXRpb24gZml4cG9pbnQgdGhh
dCBpbmNsdWRlcyBDU0UsIENGQSwgYW5kIGNvbnN0YW50CisgICAgICAgIGZvbGRpbmcuIFRoaXMg
cmVxdWlyZWQgYSBudW1iZXIgb2YgaW50ZXJlc3RpbmcgY2hhbmdlcyBpbmNsdWRpbmc6CisgICAg
ICAgIAorICAgICAgICAtIFNvbGlkaWZ5aW5nIHRoZSBzZXQgb2YgaW52YXJpYW50cyB0aGF0IHRo
ZSBERkcgb2JleXMuIEZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgICBoZWFkIGFuZCB0YWlsIG9m
IGVhY2ggYmFzaWMgYmxvY2sgbXVzdCBhZHZlcnRpc2UgdGhlIHNldCBvZiBsaXZlIGxvY2Fscwor
ICAgICAgICAgIGFuZCB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsb2NhbHMsIHJlc3BlY3RpdmVseS4g
SXQgbXVzdCBkbyBzbyBieQorICAgICAgICAgIHJlZmVycmluZyB0byB0aGUgZmlyc3QgYWNjZXNz
IHRvIHRoZSBsb2NhbCBpbiB0aGUgYmxvY2sgKGZvciBoZWFkKSBhbmQKKyAgICAgICAgICB0aGUg
bGFzdCBvbmUgKGZvciB0YWlsKS4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBzdGFydCBvZiBh
CisgICAgICAgICAgdmFsaWRhdGlvbiBzdGVwIHRoYXQgbWF5IGJlIHR1cm5lZCBvbiBldmVuIHdp
dGggYXNzZXJ0cyBkaXNhYmxlZC4gVG8KKyAgICAgICAgICBlbnN1cmUgdGhhdCB0aGVzZSBpbnZh
cmlhbnRzIGFyZSBwcmVzZXJ2ZWQsIEkgaGFkIHRvIHJlbW92ZSB0aGUKKyAgICAgICAgICByZWR1
bmRhbnQgcGhpIGVsaW1pbmF0aW9uIHBoYXNlLiBGb3Igbm93IEkganVzdCByZW1vdmUgdGhlIGNh
bGwsIGJ1dCBpbgorICAgICAgICAgIHRoZSBmdXR1cmUgd2Ugd2lsbCBwcm9iYWJseSByZW1vdmUg
aXQgZW50aXJlbHkgdW5sZXNzIHdlIGZpbmQgYSB1c2UgZm9yCisgICAgICAgICAgaXQuCisgICAg
ICAgIAorICAgICAgICAtIE1ha2luZyBpdCBlYXNpZXIgdG8gZ2V0IHRoZSBib29sZWFuIHZlcnNp
b24gb2YgYSBKU1ZhbHVlLiBUaGlzIGlzIGEKKyAgICAgICAgICBwdXJlIG9wZXJhdGlvbiwgYnV0
IHdlIHByZXZpb3VzbHkgZGlkIG5vdCB0cmVhdCBpdCBhcyBzdWNoLgorICAgICAgICAKKyAgICAg
ICAgLSBGaXhpbmcgdGhlIG1lcmdpbmcgYW5kIGZpbHRlcmluZyBvZiBBYnN0cmFjdFZhbHVlcyB0
aGF0IGNvcnJlc3BvbmQgdG8KKyAgICAgICAgICBjb25jcmV0ZSBKU1ZhbHVlcy4gVGhpcyB3YXMg
cHJldmlvdXNseSBicm9rZW4gYW5kIHdhcyBsaW1pdGluZyB0aGUKKyAgICAgICAgICBlZmZlY3Qg
b2YgcnVubmluZyBjb25zdGFudCBmb2xkaW5nLiBGaXhpbmcgdGhpcyBtZWFudCB0aGF0IEkgaGFk
IHRvCisgICAgICAgICAgY2hhbmdlIGhvdyBjb25zdGFudCBmb2xkaW5nIGVsaW1pbmF0ZXMgR2V0
TG9jYWwgbm9kZXMsIHNvIGFzIHRvIGVuc3VyZQorICAgICAgICAgIHRoYXQgdGhlIHJlc3VsdGlu
ZyBncmFwaCBzdGlsbCBvYmV5cyBERkcgcnVsZXMuCisgICAgICAgIAorICAgICAgICAtIEludHJv
ZHVjaW5nIHNpbXBsaWZpZWQgZ2V0dGVycyBmb3Igc29tZSBvZiB0aGUgdGhpbmdzIHRoYXQgREZH
IHBoYXNlcworICAgICAgICAgIHdhbnQgdG8ga25vdyBhYm91dCwgbGlrZSB0aGUgTnRoIGNoaWxk
IG9mIGEgbm9kZSAobm93IGp1c3QKKyAgICAgICAgICBncmFwaC5jaGlsZCguLi4pIGlmIHlvdSBk
b24ndCBjYXJlIGFib3V0IHBlcmZvcm1hbmNlIHRvbyBtdWNoKSBvcgorICAgICAgICAgIGdldHRp
bmcgc3VjY2Vzc29ycyBvZiBhIGJhc2ljIGJsb2NrLgorICAgICAgICAKKyAgICAgICAgVGhlIGN1
cnJlbnQgQ0ZHIHNpbXBsaWZpZXIgY2FuIGhhbmRsZSBhbG1vc3QgYWxsIG9mIHRoZSBjYXNlcyB0
aGF0IGl0CisgICAgICAgIG91Z2h0IHRvIGhhbmRsZTsgdGhlIG5vdGV3b3J0aHkgb25lIHRoYXQg
aXMgbm90IHlldCBoYW5kbGVkIGlzIHJlbW92aW5nCisgICAgICAgIGJhc2ljIGJsb2NrcyB0aGF0
IGp1c3QgaGF2ZSBqdW1wcy4gVG8gZG8gdGhpcyByaWdodCB3ZSBuZWVkIHRvIGJlIGFibGUKKyAg
ICAgICAgdG8gcmVtb3ZlIGp1bXAtb25seSBibG9ja3MgdGhhdCBhbHNvIHBlcmZvcm0ga2VlcC1h
bGl2ZSBvbiBzb21lIHZhbHVlcy4KKyAgICAgICAgVG8gbWFrZSB0aGlzIHdvcmssIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byBob2lzdCB0aGUga2VlcC1hbGl2ZSBpbnRvIChvcgorICAgICAgICBqdXN0
IGFib3ZlKSBhIEJyYW5jaC4gVGhpcyBpcyBub3QgZnVuZGFtZW50YWxseSBkaWZmaWN1bHQgYnV0
IEkgb3B0ZWQgdG8KKyAgICAgICAgbGV0IHRoaXMgcGF0Y2ggb21pdCB0aGlzIG9wdGltaXphdGlv
bi4gV2UgY2FuIGhhbmRsZSB0aGlzIGxhdGVyLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBh
IGJpZyB3aW4gb24gcHJvZ3JhbXMgdGhhdCBpbmNsdWRlIGlubGluZSBmdW5jdGlvbnMgdGhhdCBh
cmUKKyAgICAgICAgb2Z0ZW4gY2FsbGVkIHdpdGggY29uc3RhbnQgYXJndW1lbnRzLiBPZiBjb3Vy
c2UsIFN1blNwaWRlciwgVjgsIGFuZAorICAgICAgICBLcmFrZW4gZG9uJ3QgY291bnQuIFRob3Nl
IGJlbmNobWFya3MgYXJlIGNvbXBsZXRlbHkgbmV1dHJhbCB3aXRoIHRoaXMKKyAgICAgICAgY2hh
bmdlLgorCisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNWYWx1ZVRv
Qm9vbGVhbik6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpkZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKiBieXRl
Y29kZS9PcGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2V0T3BlcmFuZEZpcnN0
VGltZSk6CisgICAgICAgIChPcGVyYW5kcyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzQ2xl
YXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFs
dWU6OnZhbGlkYXRlSWdub3JpbmdWYWx1ZSk6CisgICAgICAgIChBYnN0cmFjdFZhbHVlKToKKyAg
ICAgICAgKiBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoSlNDOjpERkc6OkFkamFj
ZW5jeUxpc3Q6OmNoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGphY2VuY3lMaXN0OjpzZXRD
aGlsZCk6CisgICAgICAgIChBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNC
bG9jay5oOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKToKKyAg
ICAgICAgKEJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Om51bU5v
ZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpub2RlSW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmlzUGhpSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OmlzSW5QaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpp
c0luQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQ
aGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtQ0ZBKToK
KyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICog
ZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6
CisgICAgICAgIChDRkdTaW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpD
RkdTaW1wbGlmaWNhdGlvblBoYXNlOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpE
Rkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmtpbGxVbnJlYWNoYWJsZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6ZmluZE9wZXJhbmRTb3VyY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmtlZXBPcGVyYW5kQWxpdmUp
OgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmZpeFBvc3NpYmxl
R2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6Ompl
dHRpc29uQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpeFBoaXMpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmZp
eEpldHRpc29uZWRQcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZp
Y2F0aW9uUGhhc2U6OnJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJlZmVyZW5jZSk6CisgICAgICAg
IChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6T3BlcmFuZFN1YnN0aXR1dGlvbjo6
T3BlcmFuZFN1YnN0aXR1dGlvbik6CisgICAgICAgIChPcGVyYW5kU3Vic3RpdHV0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpPcGVyYW5kU3Vic3RpdHV0
aW9uOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpz
a2lwR2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpeFRhaWxPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBo
YXNlOjptZXJnZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNGR1NpbXBsaWZp
Y2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oOiBBZGRl
ZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cnVuKToKKyAgICAgICAgKENTRVBoYXNlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6aW1wdXJlQ1NFKToKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6Z2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNT
RVBoYXNlOjpjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpDU0VQaGFzZTo6Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuaDoKKyAg
ICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRG
b2xkaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUNvbnN0YW50Rm9s
ZGluZyk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdFZGdlLmg6CisgICAgICAgIChFZGdlKToKKyAg
ICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQ
aGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cEJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtRml4dXApOgorICAgICAgICAqIGRmZy9ERkdGaXh1
cFBoYXNlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjpkZXJlZik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNoYW5n
ZUluZGV4KToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bnVt
U3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1Y2Nlc3NvckZvckNvbmRpdGlvbik6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmlzUHJlZGljdGVkTnVtZXJpY2FsKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6YnlWYWxJc1B1cmUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjbG9iYmVy
c1dvcmxkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bnVtQ2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpjaGlsZCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9Db25zdGFudCk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6bnVtU3VjY2Vzc29ycyk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN1Y2Nl
c3NvckZvckNvbmRpdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogZGZnL0RGR1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQaGFzZTo6ZW5k
UGhhc2UpOgorICAgICAgICAqIGRmZy9ERkdQaGFzZS5oOgorICAgICAgICAoSlNDOjpERkc6OnJ1
blBoYXNlKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24pOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oOgorICAgICAgICAoREZHKToK
KyAgICAgICAgKiBkZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZTo6cnVuKToKKyAgICAg
ICAgKEpTQzo6REZHOjpwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24pOgorICAgICAgICAq
IGRmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmg6CisgICAgICAgIChERkcpOgor
ICAgICAgICAqIGRmZy9ERkdTY29yZUJvYXJkLmg6CisgICAgICAgIChKU0M6OkRGRzo6U2NvcmVC
b2FyZDo6dXNlKToKKyAgICAgICAgKFNjb3JlQm9hcmQpOgorICAgICAgICAoSlNDOjpERkc6OlNj
b3JlQm9hcmQ6OnVzZUlmSGFzUmVzdWx0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y3Jl
YXRlT1NSRW50cmllcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmxpbmtP
U1JFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0
cmljdEVxRm9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUmVnRXhwRXhlYyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5leHRCbG9jayk6CisgICAgICAgIChT
cGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnVzZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Omp1bXApOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0
cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0
cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAq
IGRmZy9ERkdWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKFZh
bGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6VmFsaWRhdGUpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFs
aWRhdGU6OnJlcG9ydFZhbGlkYXRpb25Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWxp
ZGF0ZTo6ZHVtcERhdGEpOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjpkdW1wR3JhcGhJ
ZkFwcHJvcHJpYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjp2YWxpZGF0ZSk6CisgICAgICAgICog
ZGZnL0RGR1ZhbGlkYXRlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjp2YWxpZGF0ZSk6CisgICAgICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uKToKKyAgICAgICAgKiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBo
YXNlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAg
ICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElP
Tik6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAg
IChKU0M6OmFycmF5UHJvdG9GdW5jRXZlcnkpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1NvbWUpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0Qm9vbGVhbik6CisgICAgICAgIChKU0M6OmNhbGxCb29sZWFuQ29u
c3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6
CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNTdHJpbmcuaDoKKyAgICAgICAgKEpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjp0
b0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b0Jvb2xlYW4pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNWYWx1ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjp0b1Byb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0
cnVjdG9yTXVsdGlsaW5lKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKToKKwogMjAxMi0wNC0xNyAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaGF2
ZSBjb25zdGFudCBwcm9wYWdhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1ZhbHVlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmFsdWVSZWYuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTVmFsdWVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9v
bCBKU1ZhbHVlVG9Cb29sZWFuKEpTQ29udGV4dFJlZiBjdHgsIAogICAgIEFQSUVudHJ5U2hpbSBl
bnRyeVNoaW0oZXhlYyk7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVl
KTsKLSAgICByZXR1cm4ganNWYWx1ZS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJuIGpzVmFs
dWUudG9Cb29sZWFuKCk7CiB9CiAKIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0UmVm
IGN0eCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NCw2ICs5NCwxMCBAQAogCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAg
Ki87IH07CiAJCTBGM0IzQTFBMTUzRTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwICov
OyB9OwogCQkwRjNCM0ExQjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0Iz
QTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGM0IzQTI3MTU0NEM5
OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTI0MTU0NEM5OTEwMDNFRDBG
RiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEYzQjNBMjgxNTQ0
Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTI1MTU0NEM5OTEwMDNFRDBG
RiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0IzQTI5MTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAgKi87IH07CisJ
CTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZG
IC8qIERGR1ZhbGlkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2
MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZp
cnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2
MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1h
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03
NjgsNiArNzcyLDEwIEBACiAJCTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxv
Y2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8q
IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0Iz
QTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBwYXRo
ID0gZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNCM0EyNTE1NDRDOTkxMDAzRUQw
RkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNC
M0EyOTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsaWRhdGUuY3BwOyBwYXRoID0gZGZnL0RGR1ZhbGlk
YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzQjNBMkExNTQ3NEZGNDAw
M0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1ZhbGlkYXRlLmg7IHBhdGggPSBkZmcvREZHVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3Zlcnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmly
dHVhbFJlZ2lzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxS
ZWdpc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZC
MDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEYXRhRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDQ1LDYgKzIw
NTMsOCBAQAogCQkJCTBGN0IyOTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMu
aCAqLywKIAkJCQkwRkZGQzk0QjE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwICov
LAogCQkJCTBGRkZDOTRDMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oICovLAorCQkJ
CTBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cCAqLywKKwkJCQkwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFz
ZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmgg
Ki8sCiAJCQkJMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAg
Ki8sCkBAIC0yMTAxLDYgKzIxMTEsOCBAQAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAv
KiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0
NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyog
REZHVGh1bmtzLmggKi8sCisJCQkJMEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlk
YXRlLmNwcCAqLywKKwkJCQkwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUu
aCAqLywKIAkJCQkwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmggKi8sCiAJCQkJMEZGRkM5NTMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdp
c3RlckFsbG9jYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMy
IC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oICovLApAQCAtMjU4Myw2ICsy
NTk1LDggQEAKIAkJCQkwRjNCM0ExQjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAv
KiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNB
MjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGM0IzQTI4MTU0NEM5OTcwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZH
VmFsaWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzE0Nyw2ICszMTYxLDggQEAKIAkJCQk4NjQy
QzUxMjE1MUMwODNEMDA0NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNT
Mi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQjNBMjcxNTQ0
Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksNyArMjU5LDE3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSogZGZnT1NSRW50cnlEYXRhKHVuc2ln
bmVkIGkpIHsgcmV0dXJuICZtX2RmZ0RhdGEtPm9zckVudHJ5W2ldOyB9CiAgICAgICAgIERGRzo6
T1NSRW50cnlEYXRhKiBkZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBiaW5hcnlTZWFyY2g8
REZHOjpPU1JFbnRyeURhdGEsIHVuc2lnbmVkLCBERkc6OmdldE9TUkVudHJ5RGF0YUJ5dGVjb2Rl
SW5kZXg+KG1fZGZnRGF0YS0+b3NyRW50cnkuYmVnaW4oKSwgbV9kZmdEYXRhLT5vc3JFbnRyeS5z
aXplKCksIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFtX2RmZ0RhdGEpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAobV9kZmdEYXRhLT5vc3JFbnRy
eS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBERkc6
Ok9TUkVudHJ5RGF0YSogcmVzdWx0ID0gYmluYXJ5U2VhcmNoPAorICAgICAgICAgICAgICAgIERG
Rzo6T1NSRW50cnlEYXRhLCB1bnNpZ25lZCwgREZHOjpnZXRPU1JFbnRyeURhdGFCeXRlY29kZUlu
ZGV4PigKKyAgICAgICAgICAgICAgICAgICAgbV9kZmdEYXRhLT5vc3JFbnRyeS5iZWdpbigpLCBt
X2RmZ0RhdGEtPm9zckVudHJ5LnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJ
bmRleCwgV1RGOjpLZXlNdXN0Tm90QmVQcmVzZW50SW5BcnJheSk7CisgICAgICAgICAgICBpZiAo
cmVzdWx0LT5tX2J5dGVjb2RlSW5kZXggIT0gYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIHZvaWQgYXBwZW5kT1NSRXhpdChjb25zdCBERkc6Ok9TUkV4aXQmIG9zckV4
aXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2
aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsMTYgQEAgcHVibGljOgogICAgICAgICBz
ZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0T3BlcmFu
ZEZpcnN0VGltZShpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNldEFyZ3VtZW50
Rmlyc3RUaW1lKG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldExvY2FsRmlyc3RUaW1l
KG9wZXJhbmQsIHZhbHVlKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
CShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OSw2ICs5OSw4IEBAIHZvaWQgQWJzdHJhY3RT
dGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICBQUk9GSUxFKEZMQUdfRk9SX0JMT0NLX0lO
SVRJQUxJWkFUSU9OKTsKICAgICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGgubV9ibG9ja3NbMF0u
Z2V0KCk7CiAgICAgcm9vdC0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7CisgICAgcm9vdC0+Y2Zh
SGFzVmlzaXRlZCA9IGZhbHNlOworICAgIHJvb3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZB
cmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBncmFwaFtyb290LT52YXJp
YWJsZXNBdEhlYWQuYXJndW1lbnQoaSldOwogICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFNl
dEFyZ3VtZW50KTsKQEAgLTE0MywxMSArMTQ1LDMzIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZShHcmFwaCYgZ3IKICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVu
dChpKS5zZXQoUHJlZGljdEZsb2F0NjRBcnJheSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CisgICAgICAgIAorICAg
ICAgICByb290LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKICAgICB9CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMo
KTsgKytpKSB7Ci0gICAgICAgIGlmICghZ3JhcGgubG9jYWxJc0NhcHR1cmVkKGkpKQorICAgICAg
ICBpZiAoZ3JhcGgubG9jYWxJc0NhcHR1cmVkKGkpKQorICAgICAgICAgICAgcm9vdC0+dmFsdWVz
QXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcm9v
dC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CisgICAgICAgIHJvb3QtPnZhbHVlc0F0
VGFpbC5sb2NhbChpKS5jbGVhcigpOworICAgIH0KKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDEgOyBibG9ja0luZGV4IDwgZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgpOworICAgICAgICBp
ZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBi
bG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZhbHNlOworICAgICAgICBibG9jay0+Y2ZhSGFzVmlz
aXRlZCA9IGZhbHNlOworICAgICAgICBibG9jay0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRIZWFkLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5h
cmd1bWVudChpKS5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1
bWVudChpKS5jbGVhcigpOworICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAg
ICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgICAgIGJs
b2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaSkuY2xlYXIoKTsKKyAgICAgICAgfQogICAgIH0KIH0K
IApAQCAtNTI2LDggKzU1MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJ
bnQzMik7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9j
ayk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEJvb2xlYW4pOwogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0xMjg2LDcgKzEzMDgsOSBAQCBpbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgIC8vIFRoZSBibG9jayB0cmFuc2ZlcnMg
dGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgogICAgICAgICBzb3VyY2UgPSBpblZhcmlhYmxl
OwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0
YUxvZygiICAgICAgICAgIFRyYW5zZmVyaW5nIGZyb20gaGVhZCB0byB0YWlsLlxuIik7CisgICAg
ICAgIGRhdGFMb2coIiAgICAgICAgICBUcmFuc2ZlcmluZyAiKTsKKyAgICAgICAgc291cmNlLmR1
bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZGF0YUxvZygiIGZyb20gaGVhZCB0byB0YWls
LlxuIik7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEyOTQsNyAr
MTMxOCw5IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAg
ICAgLy8gVGhlIGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRpb25hbCBzcGVjdWxh
dGlvbnMuCiAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9kZUluZGV4KTsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coIiAgICAgICAg
ICBSZWZpbmluZy5cbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgUmVmaW5pbmcgdG8g
Iik7CisgICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFM
b2coIlxuIik7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEzMDYs
NyArMTMzMiw5IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2coIiAgICAgICAgICBTZXR0aW5nLlxuIik7CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgICBT
ZXR0aW5nIHRvICIpOworICAgICAgICBzb3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAg
ICAgICBkYXRhTG9nKCJcbiIpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAg
LTEzODIsMTIgKzE0MTAsMjUgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1
Y2NlcwogICAgIEFTU0VSVCh0ZXJtaW5hbC5pc1Rlcm1pbmFsKCkpOwogICAgIAogICAgIHN3aXRj
aCAodGVybWluYWwub3AoKSkgewotICAgIGNhc2UgSnVtcDoKKyAgICBjYXNlIEp1bXA6IHsKKyNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2co
IiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5k
ZXgoKSk7CisjZW5kaWYKICAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1f
YmxvY2tzW3Rlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgfQogICAgICAg
ICAKLSAgICBjYXNlIEJyYW5jaDoKLSAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdy
YXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSkKLSAgICAgICAg
ICAgIHwgbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5C
bG9ja0luZGV4KCldLmdldCgpKTsKKyAgICBjYXNlIEJyYW5jaDogeworICAgICAgICBib29sIGNo
YW5nZWQgPSBmYWxzZTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJt
aW5hbC50YWtlbkJsb2NrSW5kZXgoKSk7CisjZW5kaWYKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0u
Z2V0KCkpOworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAg
ICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLm5v
dFRha2VuQmxvY2tJbmRleCgpKTsKKyNlbmRpZgorICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJh
c2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpXS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBSZXR1cm46CiAgICAgY2FzZSBUaHJvdzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIz
LDcgKzMyMywxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgCiAgICAgYm9vbCBpc0Ns
ZWFyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgPT0gUHJlZGljdE5vbmUg
JiYgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpOworICAgICAgICBib29sIHJlc3VsdCA9IG1fdHlwZSA9
PSBQcmVkaWN0Tm9uZSAmJiBtX3N0cnVjdHVyZS5pc0NsZWFyKCk7CisgICAgICAgIGlmIChyZXN1
bHQpCisgICAgICAgICAgICBBU1NFUlQoIW1fdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAKICAgICB2b2lkIG1ha2VUb3AoKQpAQCAtNDE3LDE1ICs0MjAsMzAgQEAg
c3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUgPT0gb3Ro
ZXIubV9zdHJ1Y3R1cmUKICAgICAgICAgICAgICYmIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsK
ICAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KICAg
ICAKICAgICBib29sIG1lcmdlKGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKQogICAgIHsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIEFic3RyYWN0VmFsdWUgb2xkTWUgPSAqdGhpczsK
KyNlbmRpZgogICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICByZXN1bHQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG1fdHlwZSwgb3RoZXIubV90eXBlKTsKLSAgICAgICAgcmVzdWx0IHw9
IG1fc3RydWN0dXJlLmFkZEFsbChvdGhlci5tX3N0cnVjdHVyZSk7Ci0gICAgICAgIGlmIChtX3Zh
bHVlICE9IG90aGVyLm1fdmFsdWUpCi0gICAgICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwor
ICAgICAgICBpZiAoaXNDbGVhcigpKSB7CisgICAgICAgICAgICAqdGhpcyA9IG90aGVyOworICAg
ICAgICAgICAgcmVzdWx0ID0gIW90aGVyLmlzQ2xlYXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHJlc3VsdCB8PSBtZXJnZVByZWRpY3Rpb24obV90eXBlLCBvdGhlci5tX3R5cGUp
OworICAgICAgICAgICAgcmVzdWx0IHw9IG1fc3RydWN0dXJlLmFkZEFsbChvdGhlci5tX3N0cnVj
dHVyZSk7CisgICAgICAgICAgICBpZiAobV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0IHw9ICEhbV92YWx1ZTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
ID0gSlNWYWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSAoKnRoaXMgIT0gb2xkTWUpKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC00NTIsNyArNDcwLDcgQEAg
c3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICAvLyBpbnRvIHRoZSBpbmZvcm1hdGlvbiBn
bGVhbmVkIGZyb20gdGhlIFN0cnVjdHVyZVNldC4KICAgICAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVy
KG1fdHlwZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoISFtX3ZhbHVlICYmICF2YWxpZGF0ZSht
X3ZhbHVlKSkKKyAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiAhdmFsaWRhdGVJZ25vcmluZ1ZhbHVl
KG1fdmFsdWUpKQogICAgICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgCiAgICAgICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKQEAgLTQ3MCwxMiArNDg4LDM2IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVl
IHsKICAgICAgICAgLy8gdGhlIG5ldyB0eXBlIChOb25lKSByYXRoZXIgdGhhbiB0aGUgb25lIHBh
c3NlZCAoQXJyYXkpLgogICAgICAgICBtX3N0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKIAotICAg
ICAgICBpZiAoISFtX3ZhbHVlICYmICF2YWxpZGF0ZShtX3ZhbHVlKSkKKyAgICAgICAgaWYgKCEh
bV92YWx1ZSAmJiAhdmFsaWRhdGVJZ25vcmluZ1ZhbHVlKG1fdmFsdWUpKQogICAgICAgICAgICAg
Y2xlYXIoKTsKICAgICAgICAgCiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAg
ICAgCisgICAgYm9vbCB2YWxpZGF0ZUlnbm9yaW5nVmFsdWUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIAorICAgICAgICBpZiAobWVyZ2VQcmVkaWN0aW9ucyhtX3R5cGUsIHByZWRpY3Rpb25G
cm9tVmFsdWUodmFsdWUpKSAhPSBtX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NF
UlQobV90eXBlICYgUHJlZGljdEVtcHR5KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFs
dWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgJiBQcmVkaWN0Q2VsbCk7
CisgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuY29udGFpbnModmFsdWUuYXNDZWxsKCkt
PnN0cnVjdHVyZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAogICAgIGJvb2wgdmFsaWRhdGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAg
ICB7CiAgICAgICAgIGlmIChpc1RvcCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw5IEBAIHB1YmxpYzoKICAgICAgICAgRml4ZWQsCiAgICAgICAgIFZhcmlhYmxlCiAgICAg
fTsKLQorICAgIAorICAgICNkZWZpbmUgQWRqYWNlbmN5TGlzdFNpemUgMworICAgIAogICAgIEFk
amFjZW5jeUxpc3QoS2luZCBraW5kKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBt
X2tpbmQoa2luZCkKQEAgLTc0LDIxICs3NiwyMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3Qg
RWRnZSYgY2hpbGQodW5zaWduZWQgaSkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpIDwg
Myk7CisgICAgICAgIEFTU0VSVChpIDwgQWRqYWNlbmN5TGlzdFNpemUpOwogICAgICAgICBBU1NF
UlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CiAgICAgfSAg
ICAKICAgICAKICAgICBFZGdlJiBjaGlsZCh1bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKGkgPCAzKTsKKyAgICAgICAgQVNTRVJUKGkgPCBBZGphY2VuY3lMaXN0U2l6ZSk7CiAgICAg
ICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRDaGlsZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2Up
CiAgICAgewotICAgICAgICBBU1NFUlQoaSA8IDMwKTsKKyAgICAgICAgQVNTRVJUKGkgPCBBZGph
Y2VuY3lMaXN0U2l6ZSk7CiAgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAg
ICBtX3dvcmRzW2ldID0gbm9kZVVzZTsKICAgICB9CkBAIC0xNTAsNyArMTUyLDcgQEAgcHVibGlj
OgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgRWRnZSBtX3dvcmRzWzNdOworICAgIEVkZ2Ug
bV93b3Jkc1tBZGphY2VuY3lMaXN0U2l6ZV07CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIEtp
bmQgbV9raW5kOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDEwIEBAIHN0cnVj
dCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICAgICB7CiAgICAgfQogICAgIAor
ICAgIH5CYXNpY0Jsb2NrKCkKKyAgICB7CisgICAgfQorICAgIAogICAgIHZvaWQgZW5zdXJlTG9j
YWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKICAgICB7CiAgICAgICAgIHZhcmlhYmxlc0F0SGVh
ZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKQEAgLTYzLDYgKzY3LDMzIEBAIHN0cnVjdCBC
YXNpY0Jsb2NrIDogVmVjdG9yPE5vZGVJbmRleCwgOD4KICAgICAgICAgdmFsdWVzQXRIZWFkLmVu
c3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwogICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9j
YWxzKG5ld051bUxvY2Fscyk7CiAgICAgfQorICAgIAorICAgIHNpemVfdCBudW1Ob2RlcygpIGNv
bnN0IHsgcmV0dXJuIHBoaXMuc2l6ZSgpICsgc2l6ZSgpOyB9CisgICAgTm9kZUluZGV4IG5vZGVJ
bmRleChzaXplX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpIDwgcGhpcy5zaXplKCkp
CisgICAgICAgICAgICByZXR1cm4gcGhpc1tpXTsKKyAgICAgICAgcmV0dXJuIGF0KGkgLSBwaGlz
LnNpemUoKSk7CisgICAgfQorICAgIGJvb2wgaXNQaGlJbmRleChzaXplX3QgaSkgY29uc3QgeyBy
ZXR1cm4gaSA8IHBoaXMuc2l6ZSgpOyB9CisgICAgCisgICAgYm9vbCBpc0luUGhpcyhOb2RlSW5k
ZXggbm9kZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwaGlzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAocGhpc1tpXSA9PSBub2RlSW5k
ZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSW5CbG9jayhOb2RlSW5kZXggaW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU5vZGVz
KCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG5vZGVJbmRleChpKSA9PSBpbmRleCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogCiAgICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJsb2Nr
IGxpbmtpbmcgYW5kIE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5IG1lYW5pbmdsZXNzCiAgICAgLy8g
Zm9yIG90aGVyIHB1cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHByZXBhcmVU
b1BhcnNlQmxvY2soKTsKICAgICAvLyBQYXJzZSBhIHNpbmdsZSBiYXNpYyBibG9jayBvZiBieXRl
Y29kZSBpbnN0cnVjdGlvbnMuCiAgICAgYm9vbCBwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KTsK
LSAgICAvLyBGaW5kIHJlYWNoYWJsZSBjb2RlIGFuZCBzZXR1cCBwcmVkZWNlc3NvciBsaW5rcyBp
biB0aGUgZ3JhcGgncyBCYXNpY0Jsb2Nrcy4KLSAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0
eSgpOwotICAgIC8vIEVucXVldWUgYSBibG9jayBvbnRvIHRoZSB3b3JrbGlzdCwgaWYgbmVjZXNz
YXJ5LgotICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdv
cmtsaXN0LCBCbG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3Nvcik7CiAgICAgLy8gTGluayBi
bG9jayBzdWNjZXNzb3JzLgogICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8
QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3Rv
cjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9z
c2libGVUYXJnZXRzKTsKQEAgLTI1ODUsNDEgKzI1ODEsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpsaW5rQmxvY2tzKFZlY3RvcjxVCiAgICAgfQogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5k
ZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKLXsKLSAgICBCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgPSBtX2dyYXBoLm1fYmxvY2tzW3N1Y2Nlc3NvckluZGV4XS5nZXQoKTsK
LSAgICBpZiAoIXN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUpIHsKLSAgICAgICAgc3VjY2Vzc29yLT5p
c1JlYWNoYWJsZSA9IHRydWU7Ci0gICAgICAgIHdvcmtsaXN0LmFwcGVuZChzdWNjZXNzb3JJbmRl
eCk7Ci0gICAgfQotICAgIAotICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJs
b2NrSW5kZXgpOwotfQotCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxp
dHkoKQotewotICAgIFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7Ci0gICAgd29ya2xp
c3QuYXBwZW5kKDApOwotICAgIG1fZ3JhcGgubV9ibG9ja3NbMF0tPmlzUmVhY2hhYmxlID0gdHJ1
ZTsKLSAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBCbG9ja0luZGV4
IGluZGV4ID0gd29ya2xpc3QubGFzdCgpOwotICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7
Ci0gICAgICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
aW5kZXhdLmdldCgpOwotICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGlua2VkKTsKLSAgICAgICAg
Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5sYXN0KCldOwotICAgICAgICBB
U1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaXNK
dW1wKCkpCi0gICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2Rl
LnRha2VuQmxvY2tJbmRleCgpKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7
Ci0gICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2Vu
QmxvY2tJbmRleCgpKTsKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5k
ZXgsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpidWlsZE9wZXJhbmRNYXBzSWZOZWNlc3NhcnkoKQogewogICAg
IGlmIChtX2hhdmVCdWlsdE9wZXJhbmRNYXBzKQpAQCAtMjgzMSw3ICsyNzkyLDEzIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICBwYXJzZUNvZGVCbG9jaygpOwogCiAgICAgbGlu
a0Jsb2NrcyhpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MsIGlubGluZVN0YWNrRW50
cnkubV9ibG9ja0xpbmtpbmdUYXJnZXRzKTsKLSAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsK
KyAgICBtX2dyYXBoLmRldGVybWluZVJlYWNoYWJpbGl0eSgpOworICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyAr
K2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBBU1NFUlQoYmxvY2spOworICAgICAgICBp
ZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uY2xlYXIoKTsKKyAgICB9CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQogICAgIGRhdGFMb2coIlByb2Nlc3NpbmcgbG9jYWwgdmFyaWFibGUgcGhpcy5c
biIpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNl
LmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBtX2NvdW50
ID0gMDsKQEAgLTY1LDEyICs2NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2NoYW5nZWQg
PSBmYWxzZTsKICAgICAgICAgICAgIHBlcmZvcm1Gb3J3YXJkQ0ZBKCk7CiAgICAgICAgIH0gd2hp
bGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgCiBwcml2YXRlOgogICAgIHZvaWQgcGVyZm9ybUJsb2NrQ0ZBKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCkKICAgICB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCkKICAgICAgICAgICAg
IHJldHVybjsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0x
MjYsOSArMTMwLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotdm9pZCBwZXJmb3JtQ0ZBKEdy
YXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9ybUNGQShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhh
c2U8Q0ZBUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q0ZBUGhhc2U+KGdyYXBo
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZBUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3
IEBAIGNsYXNzIEdyYXBoOwogLy8gdGhlIGNvZGUgYmxvY2suIEl0J3MgYWxzbyByZXNwb25zaWJs
ZSBmb3IgaWRlbnRpZnlpbmcgZGVhZCBjb2RlLCBhbmQgaW4gdGhlCiAvLyBmdXR1cmUgc2hvdWxk
IGJlIHVzZWQgYXMgYSBob29rIGZvciBjb25zdGFudCBwcm9wYWdhdGlvbi4KIAotdm9pZCBwZXJm
b3JtQ0ZBKEdyYXBoJik7Citib29sIHBlcmZvcm1DRkEoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDYwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZH
UGhhc2UuaCIKKyNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIENGR1NpbXBsaWZpY2F0aW9uUGhhc2UgOiBwdWJsaWMgUGhh
c2UgeworcHVibGljOgorICAgIENGR1NpbXBsaWZpY2F0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQor
ICAgICAgICA6IFBoYXNlKGdyYXBoLCAiQ0ZHIHNpbXBsaWZpY2F0aW9uIikKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGJvb2wgb3V0ZXJDaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgIGJvb2wgaW5uZXJDaGFuZ2VkOworICAgICAgICAKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgc3dpdGNoIChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEp1bXA6IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3VjY2Vzc29yIHdpdGgg
b25lIHByZWRlY2Vzc29yIC0+IG1lcmdlLgorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCldLT5tX3ByZWRlY2Vzc29ycy5z
aXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9i
bG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnNbMF0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBibG9ja0luZGV4KTsKKyNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJDRkdTaW1wbGlmeTogSnVtcCBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1
LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFw
aC5zdWNjZXNzb3IoYmxvY2ssIDApKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAg
bWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApLCBOb0Js
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJOb3QganVtcCBtZXJnaW5nIG9uIEJs
b2NrICMldSB0byBCbG9jayAjJXUgYmVjYXVzZSBwcmVkZWNlc3NvcnMgPSAiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9j
aywgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNl
c3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiLCAiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIjJXUiLCBtX2dyYXBoLm1fYmxvY2tzW21fZ3Jh
cGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJlZGVjZXNzb3JzW2ldKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIi5cbiIpOwor
I2VuZGlmCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEJsb2NrIG9ubHkgaGFzIGEganVtcCAtPiByZW1vdmUuIFRo
aXMgaXMgdHJpY2t5IHRob3VnaCBiZWNhdXNlIG9mCisgICAgICAgICAgICAgICAgICAgIC8vIGxp
dmVuZXNzLiBXaGF0IHdlIHJlYWxseSB3YW50IGlzIHRvIHNsYW0gaW4gYSBwaGFudG9tIGF0IHRo
ZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrLCBhZnRlciB0aGUgdGVy
bWluYWwuIEJ1dCB3ZSBjYW4ndCByaWdodCBub3cuIDotKAorICAgICAgICAgICAgICAgICAgICAv
LyBJZGVhOiB3aGF0IGlmIEkgc2xhbSB0aGUgZ2hvc3RpZXMgaW50byBteSBzdWNjZXNzb3I/IE5v
cGUsIHRoYXQncworICAgICAgICAgICAgICAgICAgICAvLyBzdWJvcHRpbWFsLCBiZWNhdXNlIGlm
IG15IHN1Y2Nlc3NvciBoYXMgbXVsdGlwbGUgcHJlZGVjZXNzb3JzIHRoZW4gd2UnbGwKKyAgICAg
ICAgICAgICAgICAgICAgLy8gYmUga2VlcGluZyBhbGl2ZSB0aGluZ3Mgb24gb3RoZXIgcHJlZGVj
ZXNzb3IgZWRnZXMgdW5uZWNlc3NhcmlseS4KKyAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCB3
ZSByZWFsbHkgbmVlZCBpcyB0aGUgbm90aW9uIG9mIGVuZC1vZi1ibG9jayBnaG9zdGllcyEKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAgICAgICAgICAgICAg
IC8vIEJyYW5jaCBvbiBjb25zdGFudCAtPiBqZXR0aXNvbiB0aGUgbm90LXRha2VuIGJsb2NrIGFu
ZCBtZXJnZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbV9ncmFwaFtibG9jay0+
bGFzdCgpXS5jaGlsZDEoKV0uaGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBjb25kaXRpb24gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dmFsdWVPZkpTQ29uc3RhbnQobV9ncmFwaFtibG9jay0+bGFzdCgpXS5jaGlsZDEoKS5pbmRleCgp
KS50b0Jvb2xlYW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdl
dEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKV0uZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0QmxvY2stPm1fcHJlZGVjZXNzb3JzLnNp
emUoKSA9PSAxKSB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNGR1NpbXBsaWZ5OiBLbm93biBj
b25kaXRpb24gKCVzKSBicmFuY2ggbWVyZ2Ugb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldSwgamV0
dGlzb25pbmcgQmxvY2sgIyV1LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbmRpdGlvbiA/ICJ0cnVlIiA6ICJmYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihi
bG9jaywgY29uZGl0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisjZW5kaWYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDRkdTaW1wbGlmeTogS25vd24gY29uZGl0aW9uICgl
cykgYnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldSwgamV0
dGlzb25pbmcgQmxvY2sgIyV1LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbmRpdGlvbiA/ICJ0cnVlIiA6ICJmYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihi
bG9jaywgY29uZGl0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisjZW5kaWYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuQmxvY2tJbmRleCA9
IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW5CbG9ja0luZGV4ID0gbV9n
cmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssICFjb25kaXRpb24pOworICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3Jh
cGhbYmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IG1fZ3JhcGhbYmxvY2stPmxhc3Qo
KV0uY29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2Jsb2Nr
LT5sYXN0KCldLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW2Jsb2NrLT5sYXN0KCldLnJlZkNvdW50KCkgPT0g
MSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqZXR0aXNvbkJsb2NrKGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlD
b2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBqdW1wTm9kZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSBqdW1wKEp1bXAsIGJvdW5kYXJ5Q29kZU9yaWdp
biwgT3BJbmZvKHRha2VuQmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGp1bXAucmVmKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQo
anVtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZChqdW1wTm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSA9
PSBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMSkpIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDRkdT
aW1wbGlmeTogQnJhbmNoIG1lcmdlIG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUuXG4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3Nv
cihibG9jaywgMCkpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2Nr
cyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCksIE5vQmxvY2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTm90IGJyYW5jaCBzaW1wbGlmeWlu
ZyBvbiBCbG9jayAjJXUgYmVjYXVzZSB0aGUgc3VjY2Vzc29ycyBkaWZmZXIgYW5kIHRoZSBjb25k
aXRpb24gaXMgbm90IGtub3duLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9j
a0luZGV4KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAv
LyBCcmFuY2ggdG8gc2FtZSBkZXN0aW5hdGlvbiAtPiBqdW1wLgorICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogdGhpcyB3aWxsIGN1cnJlbnRseSBub3QgYmUgaGl0IGJlY2F1c2Ugb2YgdGhl
IGxhY2sgb2YganVtcC1vbmx5CisgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIHNpbXBsaWZp
Y2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubmVyQ2hhbmdlZCkg
eworICAgICAgICAgICAgICAgIC8vIEhlcmUncyB0aGUgcmVhc29uIGZvciB0aGlzIHBhc3M6Cisg
ICAgICAgICAgICAgICAgLy8gQmxvY2tzOiBBLCBCLCBDLCBELCBFLCBGCisgICAgICAgICAgICAg
ICAgLy8gQSAtPiBCLCBDCisgICAgICAgICAgICAgICAgLy8gQiAtPiBGCisgICAgICAgICAgICAg
ICAgLy8gQyAtPiBELCBFCisgICAgICAgICAgICAgICAgLy8gRCAtPiBGCisgICAgICAgICAgICAg
ICAgLy8gRSAtPiBGCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBBc3N1
bWUgdGhhdCBBJ3MgYnJhbmNoIGlzIGRldGVybWluZWQgdG8gZ28gdG8gQi4gVGhlbiB0aGUgcmVz
dCBvZiB0aGlzIHBoYXNlCisgICAgICAgICAgICAgICAgLy8gaXMgc21hcnQgZW5vdWdoIHRvIHNp
bXBsaWZ5IGRvd24gdG86CisgICAgICAgICAgICAgICAgLy8gQSAtPiBCCisgICAgICAgICAgICAg
ICAgLy8gQiAtPiBGCisgICAgICAgICAgICAgICAgLy8gQyAtPiBELCBFCisgICAgICAgICAgICAg
ICAgLy8gRCAtPiBGCisgICAgICAgICAgICAgICAgLy8gRSAtPiBGCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIGFsc28gbWVyZ2UgQSBhbmQgQi4gQnV0IHRo
ZW4gd2UgZG9uJ3QgaGF2ZSBhbnkgb3RoZXIgbWVjaGFuaXNtIHRvCisgICAgICAgICAgICAgICAg
Ly8gcmVtb3ZlIEQsIEUgYXMgcHJlZGVjZXNzb3JzIGZvciBGLiBXb3JzZSwgdGhlIHJlc3Qgb2Yg
dGhpcyBwaGFzZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIC8vIGtub3cgaG93IHRvIGZpeCB0
aGUgUGhpIGZ1bmN0aW9ucyBvZiBGIHRvIGVuc3VyZSB0aGF0IHRoZXkgbm8gbG9uZ2VyIHJlZmVy
CisgICAgICAgICAgICAgICAgLy8gdG8gdmFyaWFibGVzIGluIEQsIEUuIEluIGdlbmVyYWwsIHdl
IG5lZWQgYSB3YXkgdG8gaGFuZGxlIFBoaSBzaW1wbGlmaWNhdGlvbgorICAgICAgICAgICAgICAg
IC8vIHVwb246CisgICAgICAgICAgICAgICAgLy8gMSkgUmVtb3ZhbCBvZiBhIHByZWRlY2Vzc29y
IGR1ZSB0byBicmFuY2ggc2ltcGxpZmljYXRpb24uIFRoZSBicmFuY2gKKyAgICAgICAgICAgICAg
ICAvLyAgICBzaW1wbGlmaWVyIGFscmVhZHkgZG9lcyB0aGF0LgorICAgICAgICAgICAgICAgIC8v
IDIpIEludmFsaWRhdGlvbiBvZiBhIHByZWRlY2Vzc29yIGJlY2F1c2Ugc2FpZCBwcmVkZWNlc3Nv
ciB3YXMgcmVuZGVyZWQKKyAgICAgICAgICAgICAgICAvLyAgICB1bnJlYWNoYWJsZS4gV2UgZG8g
dGhpcyBoZXJlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gVGhpcyBp
bXBsaWVzIHRoYXQgd2hlbiBhIGJsb2NrIGlzIHVucmVhY2hhYmxlLCB3ZSBtdXN0IGluc3BlY3Qg
aXRzCisgICAgICAgICAgICAgICAgLy8gc3VjY2Vzc29ycycgUGhpIGZ1bmN0aW9ucyB0byByZW1v
dmUgYW55IHJlZmVyZW5jZXMgZnJvbSB0aGVtIGludG8gdGhlCisgICAgICAgICAgICAgICAgLy8g
cmVtb3ZlZCBibG9jay4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBo
LnJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICBpZiAoYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBraWxs
VW5yZWFjaGFibGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICB2YWxpZGF0ZShtX2dyYXBoKTsKKyAgICAgICAg
fSB3aGlsZSAoaW5uZXJDaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBvdXRlckNo
YW5nZWQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQga2lsbFVucmVhY2hhYmxlKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VS
VChibG9jayk7CisgICAgICAgIEFTU0VSVCghYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAg
CisgICAgICAgIC8vIDEpIFJlbW92ZSByZWZlcmVuY2VzIGZyb20gb3RoZXIgYmxvY2tzIHRvIHRo
aXMgYmxvY2suCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29y
cyhibG9jayk7IGktLTspCisgICAgICAgICAgICBmaXhQaGlzKGJsb2NrSW5kZXgsIG1fZ3JhcGgu
c3VjY2Vzc29yKGJsb2NrLCBpKSk7CisgICAgICAgIAorICAgICAgICAvLyAyKSBLaWxsIHRoZSBi
bG9jaworICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7CisgICAg
fQorICAgIAorICAgIE5vZGVJbmRleCBmaW5kT3BlcmFuZFNvdXJjZShjb25zdCBPcGVyYW5kczxO
b2RlSW5kZXgsIE5vZGVJbmRleFRyYWl0cz4mIHZhcmlhYmxlcywgaW50IG9wZXJhbmQpCisgICAg
eworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gdmFyaWFibGVzLm9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCgpID09IFNldExvY2Fs
KQorICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKS5pbmRleCgp
OworICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgIH0KKyAgICAKKyAgICB2b2lkIGtlZXBP
cGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgaW50
IG9wZXJhbmQpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5pc0NhcHR1cmVkKG9wZXJhbmQp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZmlu
ZE9wZXJhbmRTb3VyY2UoYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgb3BlcmFuZCk7CisgICAgICAg
IGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAoIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBBU1NFUlQobV9ncmFwaFtub2RlSW5kZXhdLm9wKCkgIT0gU2V0TG9jYWwp
OworICAgICAgICBOb2RlSW5kZXggcGhhbnRvbU5vZGVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwor
ICAgICAgICBOb2RlIHBoYW50b20oUGhhbnRvbSwgY29kZU9yaWdpbiwgbm9kZUluZGV4KTsKKyAg
ICAgICAgbV9ncmFwaC5hcHBlbmQocGhhbnRvbSk7CisgICAgICAgIG1fZ3JhcGgucmVmKHBoYW50
b21Ob2RlSW5kZXgpOworICAgICAgICBibG9jay0+YXBwZW5kKHBoYW50b21Ob2RlSW5kZXgpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeFBvc3NpYmxlR2V0TG9jYWwoQmFzaWNCbG9jayogYmxv
Y2ssIEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbZWRn
ZV07CisgICAgICAgIGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAobV9ncmFwaC5pc0NhcHR1cmVkKGNoaWxkLmxvY2FsKCkpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBOb2RlSW5kZXggb3JpZ2luYWxOb2RlSW5kZXggPSBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQoY2hpbGQubG9jYWwoKSk7CisgICAgICAgIEFT
U0VSVChvcmlnaW5hbE5vZGVJbmRleCAhPSBOb05vZGUpOworICAgICAgICBOb2RlKiBvcmlnaW5h
bE5vZGUgPSAmbV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRleF07CisgICAgICAgIEFTU0VSVChvcmln
aW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAvLyBQb3NzaWJpbGl0aWVzOgor
ICAgICAgICAvLyBTZXRMb2NhbCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgZ2V0dGluZyB0aGUgdmFs
dWUgb2Ygc29tZXRoaW5nIHRoYXQgaXMgaW1tZWRpYXRlbHkKKyAgICAgICAgLy8gICAgIGF2YWls
YWJsZSBpbiB0aGUgZmlyc3QgYmxvY2sgd2l0aCBhIGtub3duIE5vZGVJbmRleC4KKyAgICAgICAg
Ly8gR2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZhbHVlIG9mIHNv
bWV0aGluZyB0aGF0IHRoZSBmaXJzdAorICAgICAgICAvLyAgICAgYmxvY2sgYWxzbyBnZXRzLgor
ICAgICAgICAvLyBQaGkgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2
ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlIGZpcnN0IGJsb2NrCisgICAgICAgIC8vICAgICB3YXMg
YWxzbyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24uCisgICAgICAgIC8vIFNldEFyZ3VtZW50IC0+
IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0
aGF0IHRoZQorICAgICAgICAvLyAgICAgZmlyc3QgYmxvY2sgd2FzIGtlZXBpbmcgYWxpdmUgYnkg
dmlydHVlIG9mIHRoZSBmaXJzdEJsb2NrIGJlaW5nIHRoZSByb290IGFuZAorICAgICAgICAvLyAg
ICAgdGhlIG9wZXJhbmQgYmVpbmcgYW4gYXJndW1lbnQuCisgICAgICAgIC8vIEZsdXNoIC0+IHRo
ZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0
IHRoZSBmaXJzdAorICAgICAgICAvLyAgICAgYmxvY2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxpdmUs
IHNvIHRoZSBzZWNvbmQgYmxvY2sgc2hvdWxkIHJlZmVyIGNoaWxkIG9mCisgICAgICAgIC8vICAg
ICB0aGUgZmx1c2guCisgICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpIHsK
KyAgICAgICAgICAgIG9yaWdpbmFsTm9kZUluZGV4ID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5p
bmRleCgpOworICAgICAgICAgICAgb3JpZ2luYWxOb2RlID0gJm1fZ3JhcGhbb3JpZ2luYWxOb2Rl
SW5kZXhdOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3JpZ2luYWxOb2RlLT5vcCgpKSB7
CisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5k
ZXgoZWRnZSwgb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgIG1f
Z3JhcGguY2hhbmdlSW5kZXgoZWRnZSwgb3JpZ2luYWxOb2RlSW5kZXgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAgIGNhc2UgU2V0QXJn
dW1lbnQ6IHsKKyAgICAgICAgICAgIC8vIEtlZXAgdGhlIEdldExvY2FsIQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgdm9pZCBqZXR0aXNvbkJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRl
eCBqZXR0aXNvbmVkQmxvY2tJbmRleCwgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4pCisg
ICAgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZl
KGJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJs
b2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGkpOworICAgICAgICAKKyAgICAgICAgZml4SmV0dGlz
b25lZFByZWRlY2Vzc29ycyhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZml4UGhpcyhCbG9ja0luZGV4IHNvdXJjZUJsb2NrSW5kZXgsIEJs
b2NrSW5kZXggZGVzdGluYXRpb25CbG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9j
ayogc291cmNlQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3NvdXJjZUJsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tkZXN0aW5hdGlvbkJsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGRlc3RpbmF0aW9uQmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IE5vZGVJbmRleCBwaGlOb2RlSW5kZXggPSBkZXN0aW5hdGlvbkJsb2NrLT5waGlzW2ldOworICAg
ICAgICAgICAgTm9kZSYgcGhpTm9kZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKKyAgICAgICAg
ICAgIE5vZGVJbmRleCBteU5vZGVJbmRleCA9IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChwaGlOb2RlLmxvY2FsKCkpOworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIHJlbW92aW5nIHJl
ZmVyZW5jZSBmcm9tIHBoaSBAJXUgdG8gQCV1IG9uIGxvY2FsIHIlZDoiLAorICAgICAgICAgICAg
ICAgICAgICBwaGlOb2RlSW5kZXgsIG15Tm9kZUluZGV4LCBwaGlOb2RlLmxvY2FsKCkpOworI2Vu
ZGlmCisgICAgICAgICAgICBpZiAobXlOb2RlSW5kZXggPT0gTm9Ob2RlKSB7CisgICAgICAgICAg
ICAgICAgLy8gVGhpcyB3aWxsIGhhcHBlbiBpZiB0aGVyZSBpcyBhIHBoaSBpbiB0aGUgZGVzdGlu
YXRpb24gdGhhdCByZWZlcnMgaW50bworICAgICAgICAgICAgICAgIC8vIHRoZSBkZXN0aW5hdGlv
biBpdHNlbGYuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBOb2RlJiBteU5vZGUgPSBtX2dyYXBoW215Tm9kZUluZGV4XTsKKyAgICAgICAgICAg
IGlmIChteU5vZGUub3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICBteU5vZGVJbmRl
eCA9IG15Tm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaiA8IEFkamFjZW5jeUxpc3RTaXplOyArK2opCisgICAgICAgICAgICAgICAgcmVtb3Zl
UG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKG15Tm9kZUluZGV4LCBwaGlOb2RlLCBqKTsKKyNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICBkYXRh
TG9nKCJcbiIpOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBmaXhK
ZXR0aXNvbmVkUHJlZGVjZXNzb3JzKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBq
ZXR0aXNvbmVkQmxvY2tJbmRleCkKKyAgICB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBw
aGlzIGR1ZSB0byBqZXR0aXNvbiBvZiBCbG9jayAjJXUgZnJvbSBCbG9jayAjJXUuXG4iLAorICAg
ICAgICAgICAgICAgIGpldHRpc29uZWRCbG9ja0luZGV4LCBibG9ja0luZGV4KTsKKyNlbmRpZgor
ICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pl
dHRpc29uZWRCbG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldICE9IGJsb2NrSW5k
ZXgpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBqZXR0aXNvbmVkQmxv
Y2stPm1fcHJlZGVjZXNzb3JzW2ldID0gamV0dGlzb25lZEJsb2NrLT5tX3ByZWRlY2Vzc29ycy5s
YXN0KCk7CisgICAgICAgICAgICBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzLnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBmaXhQaGlzKGJsb2NrSW5kZXgsIGpldHRpc29uZWRCbG9ja0luZGV4KTsKKyAgICB9CisgICAg
CisgICAgdm9pZCByZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UoTm9kZUluZGV4IG15
Tm9kZUluZGV4LCBOb2RlJiBwaGlOb2RlLCB1bnNpZ25lZCBlZGdlSW5kZXgpCisgICAgeworICAg
ICAgICBpZiAocGhpTm9kZS5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLmluZGV4VW5jaGVja2Vk
KCkgIT0gbXlOb2RlSW5kZXgpCisgICAgICAgICAgICByZXR1cm47CisjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRhTG9nKCIgUmVtb3ZpbmcgcmVm
ZXJlbmNlIGF0IGNoaWxkICV1LiIsIGVkZ2VJbmRleCk7CisjZW5kaWYKKyAgICAgICAgbV9ncmFw
aC5kZXJlZihteU5vZGVJbmRleCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVkZ2VJbmRl
eDsgaSA8IEFkamFjZW5jeUxpc3RTaXplIC0gMTsgKytpKQorICAgICAgICAgICAgcGhpTm9kZS5j
aGlsZHJlbi5zZXRDaGlsZChpLCBwaGlOb2RlLmNoaWxkcmVuLmNoaWxkKGkgKyAxKSk7CisgICAg
ICAgIHBoaU5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQoQWRqYWNlbmN5TGlzdFNpemUgLSAxLCBFZGdl
KCkpOworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgT3BlcmFuZFN1YnN0aXR1dGlvbiB7CisgICAg
ICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oKQorICAgICAgICAgICAgOiBvbGRDaGlsZChOb05vZGUp
CisgICAgICAgICAgICAsIG5ld0NoaWxkKE5vTm9kZSkKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBPcGVyYW5kU3Vic3RpdHV0aW9uKE5vZGVJbmRleCBvbGRDaGlsZCwg
Tm9kZUluZGV4IG5ld0NoaWxkKQorICAgICAgICAgICAgOiBvbGRDaGlsZChvbGRDaGlsZCkKKyAg
ICAgICAgICAgICwgbmV3Q2hpbGQobmV3Q2hpbGQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVCgob2xkQ2hpbGQgPT0gTm9Ob2RlKSA9PSAobmV3Q2hpbGQgPT0gTm9Ob2RlKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChvbGRDaGlsZCA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgZnBy
aW50ZihvdXQsICItIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnByaW50
ZihvdXQsICJAJXUgLT4gQCV1Iiwgb2xkQ2hpbGQsIG5ld0NoaWxkKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgTm9kZUluZGV4IG9sZENoaWxkOworICAgICAgICBOb2RlSW5kZXggbmV3
Q2hpbGQ7CisgICAgfTsKKyAgICAKKyAgICBOb2RlSW5kZXggc2tpcEdldExvY2FsKE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5k
ZXhdOworICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgcmV0
dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBmaXhUYWlsT3BlcmFuZChCYXNpY0Jsb2NrKiBmaXJzdEJsb2Nr
LCBCYXNpY0Jsb2NrKiBzZWNvbmRCbG9jaywgaW50IG9wZXJhbmQsIE9wZXJhbmRzPE9wZXJhbmRT
dWJzdGl0dXRpb24+JiBzdWJzdGl0dXRpb25zKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IGF0
U2Vjb25kVGFpbCA9IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmlzQ2FwdHVyZWQob3BlcmFuZCkpIHsK
KyAgICAgICAgICAgIC8vIFRoZSBzZWNvbmQgYmxvY2sgZGlkIHNvbWV0aGluZyB0byBhIHZhcmlh
YmxlIHRoYXQgaXMgY2FwdHVyZWQsIHNvIHJlZmxlY3QgdGhpcy4KKyAgICAgICAgICAgIGZpcnN0
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYXRT
ZWNvbmRUYWlsID09IE5vTm9kZSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlz
IGRlYWQgYXQgdGhlIGVuZCBvZiB0aGUgc2Vjb25kIGJsb2NrLCB0aGVuIGRvIG5vdGhpbmc7IGVz
c2VudGlhbGx5CisgICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgd2Ugd2FudCB0aGUgdGFp
bCBzdGF0ZSB0byByZWZsZWN0IHdoYXRldmVyIHRoZSBmaXJzdCBibG9jayBkaWQuCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGUmIHNlY29uZE5v
ZGUgPSBtX2dyYXBoW2F0U2Vjb25kVGFpbF07CisgICAgICAgIHN3aXRjaCAoc2Vjb25kTm9kZS5v
cCgpKSB7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgRmx1c2g6IHsKKyAg
ICAgICAgICAgIC8vIFRoZSBzZWNvbmQgYmxvY2sgZGlkIGludGVyZXN0aW5nIHRoaW5ncyB0byB0
aGUgdmFyaWFibGVzLCBzbyB1cGRhdGUgdGhlIHRhaWwKKyAgICAgICAgICAgIC8vIGFjY29yZGlu
Z2x5LgorICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3Bl
cmFuZCkgPSBhdFNlY29uZFRhaWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAvLyBLZWVwIHdoYXQg
d2FzIGluIHRoZSBmaXJzdCBibG9jay4KKyAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05vZGUpOworICAgICAgICAgICAg
c3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpID0KKyAgICAgICAgICAgICAgICBPcGVyYW5k
U3Vic3RpdHV0aW9uKAorICAgICAgICAgICAgICAgICAgICBhdFNlY29uZFRhaWwsIHNraXBHZXRM
b2NhbChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEdldExvY2FsOiB7Cisg
ICAgICAgICAgICAvLyBLZWVwIHdoYXQgd2FzIGluIHRoZSBmaXJzdCBibG9jaywgYW5kIGFkanVz
dCB0aGUgc3Vic3RpdHV0aW9uIHRvIGFjY291bnQgZm9yCisgICAgICAgICAgICAvLyB0aGUgZmFj
dCB0aGF0IHN1Y2Nlc3NvcnMgd2lsbCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhlIEdldExvY2Fs
LgorICAgICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KG9wZXJhbmQpICE9IE5vTm9kZSk7CisgICAgICAgICAgICBzdWJzdGl0dXRpb25zLm9wZXJhbmQo
b3BlcmFuZCkgPQorICAgICAgICAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oCisgICAgICAg
ICAgICAgICAgICAgIHNlY29uZE5vZGUuY2hpbGQxKCkuaW5kZXgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgc2tpcEdldExvY2FsKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIG1lcmdlQmxvY2tzKAorICAgICAgICBCbG9ja0lu
ZGV4IGZpcnN0QmxvY2tJbmRleCwgQmxvY2tJbmRleCBzZWNvbmRCbG9ja0luZGV4LCBCbG9ja0lu
ZGV4IGpldHRpc29uZWRCbG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFk
ZCBhbGwgb2YgdGhlIG5vZGVzIGluIHNlY29uZEJsb2NrIHRvIGZpcnN0QmxvY2ssIGJ1dCBpbiBz
byBkb2luZworICAgICAgICAvLyBpdCB3aWxsIGFsc28gZW5zdXJlIHRoYXQgYW55IEdldExvY2Fs
cyBmcm9tIHRoZSBzZWNvbmQgYmxvY2sgdGhhdCByZWZlciB0bworICAgICAgICAvLyBTZXRMb2Nh
bHMgaW4gdGhlIGZpcnN0IGJsb2NrIGFyZSByZWxpbmtlZC4gSWYgamV0dGlzb25lZEJsb2NrIGlz
IG5vdCBOb0Jsb2NrLAorICAgICAgICAvLyB0aGVuIFBoYW50b21zIGFyZSBpbnNlcnRlZCBmb3Ig
YW55dGhpbmcgdGhhdCB0aGUgamV0dGlzb25lZEJsb2NrIHdvdWxkIGhhdmUKKyAgICAgICAgLy8g
a2VwdCBhbGl2ZS4KKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIGZpcnN0QmxvY2sgPSBt
X2dyYXBoLm1fYmxvY2tzW2ZpcnN0QmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEJhc2ljQmxv
Y2sqIHNlY29uZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tzZWNvbmRCbG9ja0luZGV4XS5nZXQo
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFJlbW92ZSB0aGUgdGVybWluYWwgb2YgZmlyc3RCbG9j
ayBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0IGFueW1vcmUuIFdlbGwsIHdlIGRvbid0CisgICAgICAg
IC8vIHJlYWxseSByZW1vdmUgaXQ7IHdlIGFjdHVhbGx5IHR1cm4gaXQgaW50byBhIFBoYW50b20u
CisgICAgICAgIEFTU0VSVChtX2dyYXBoW2ZpcnN0QmxvY2stPmxhc3QoKV0uaXNUZXJtaW5hbCgp
KTsKKyAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBtX2dyYXBoW2ZpcnN0
QmxvY2stPmxhc3QoKV0uY29kZU9yaWdpbjsKKyAgICAgICAgbV9ncmFwaFtmaXJzdEJsb2NrLT5s
YXN0KCldLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICBBU1NFUlQobV9n
cmFwaFtmaXJzdEJsb2NrLT5sYXN0KCldLnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoamV0dGlzb25lZEJsb2NrSW5kZXggIT0gTm9CbG9jaykgeworICAgICAgICAgICAg
QmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVk
QmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRpbWUgdG8g
aW5zZXJ0IGdob3N0aWVzIGZvciB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGtlcHQgYWxpdmUgaW4g
Y2FzZSB3ZSBPU1IKKyAgICAgICAgICAgIC8vIGV4aXQgcHJpb3IgdG8gaGl0dGluZyB0aGUgZmly
c3RCbG9jaydzIHRlcm1pbmFsLCBhbmQgZW5kIHVwIGdvaW5nIGRvd24gYQorICAgICAgICAgICAg
Ly8gZGlmZmVyZW50IHBhdGggdGhhbiBzZWNvbmRCbG9jay4KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAgICAgICAgICAgICAga2VlcE9wZXJh
bmRBbGl2ZShmaXJzdEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGFyZ3VtZW50VG9PcGVyYW5k
KGkpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAgICAgICAgICAg
IGtlZXBPcGVyYW5kQWxpdmUoZmlyc3RCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRC
bG9jay0+cGhpcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGZpcnN0QmxvY2stPnBoaXMuYXBw
ZW5kKHNlY29uZEJsb2NrLT5waGlzW2ldKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gc2Vjb25kQmxvY2stPmF0KGkpOworICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
V2hpbGUgd2UncmUgYXQgaXQsIGNsZWFuIHVwIHRoZSBibG9jazsgZG9uJ3QgYWRkIG5vZGVzIHRo
YXQgYXJlIGRlYWQuCisgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5v
ZGUub3AoKSA9PSBQaGFudG9tICYmICEhbm9kZS5jaGlsZDEoKSkgeworICAgICAgICAgICAgICAg
IE5vZGUmIHBvc3NpYmxlTG9jYWxPcCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAg
ICAgICAgICAgaWYgKHBvc3NpYmxlTG9jYWxPcC5oYXNMb2NhbCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBzZXRMb2NhbEluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHBvc3NpYmxlTG9jYWxPcC5sb2Nh
bCgpKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgc2V0TG9jYWwgPSBtX2dyYXBoW3NldExv
Y2FsSW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWwub3AoKSA9PSBTZXRM
b2NhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNo
aWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgdGhlIGNo
aWxkIGlzIGEgR2V0TG9jYWwsIHRoZW4gd2UgbWlnaHQgbGlrZSB0byBmaXggaXQuCisgICAgICAg
ICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7CisgICAgICAgICAg
ICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJl
bigpOworICAgICAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkKKyAgICAgICAgICAgICAgICAg
ICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoISFub2RlLmNoaWxkMSgpKSB7
CisgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLmNo
aWxkcmVuLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpKSB7
CisgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9k
ZS5jaGlsZHJlbi5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghIW5vZGUuY2hp
bGQzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0
QmxvY2ssIG5vZGUuY2hpbGRyZW4uY2hpbGQzKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKG5vZGVJbmRleCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpeCB0aGUgcHJlZGVjZXNzb3JzIG9mIG15
IG5ldyBzdWNjZXNzb3JzLiBUaGlzIGlzIHRyaWNreSwgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHJl
c2V0CisgICAgICAgIC8vIGFsbCBwcmVkZWNlc3NvcnMgYW55d2F5IGR1ZSB0byByZWFjaGFiaWxp
dHkgYW5hbHlzaXMuIEJ1dCB3ZSBuZWVkIHRvIGZpeCB0aGUKKyAgICAgICAgLy8gcHJlZGVjZXNz
b3JzIGVhZ2VybHkgdG8gZW5zdXJlIHRoYXQgd2Uga25vdyB3aGF0IHRoZXkgYXJlIGluIGNhc2Ug
dGhlIG5leHQgYmxvY2sgd2UKKyAgICAgICAgLy8gY29uc2lkZXIgaW4gdGhpcyBwaGFzZSB3aXNo
ZXMgdG8gcXVlcnkgdGhlIHByZWRlY2Vzc29ycyBvZiBvbmUgb2YgdGhlIGJsb2NrcyB3ZQorICAg
ICAgICAvLyBhZmZlY3RlZC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1T
dWNjZXNzb3JzKGZpcnN0QmxvY2spOyBpLS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgPSBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGZpcnN0QmxvY2ss
IGkpXS5nZXQoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzdWNjZXNz
b3ItPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKHN1
Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnNbal0gPT0gc2Vjb25kQmxvY2tJbmRleCkKKyAgICAgICAg
ICAgICAgICAgICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29yc1tqXSA9IGZpcnN0QmxvY2tJbmRl
eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRml4IHRo
ZSBwcmVkZWNlc3NvcnMgb2YgbXkgZm9ybWVyIHN1Y2Nlc3NvcnMuIEFnYWluLCB3ZSdkIHJhdGhl
ciBub3QgZG8gdGhpcywgYnV0IGl0J3MKKyAgICAgICAgLy8gYW4gdW5mb3J0dW5hdGUgbmVjZXNz
aXR5LiBTZWUgYWJvdmUgY29tbWVudC4KKyAgICAgICAgaWYgKGpldHRpc29uZWRCbG9ja0luZGV4
ICE9IE5vQmxvY2spCisgICAgICAgICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGZpcnN0
QmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOworICAgICAgICAKKyAgICAgICAgLy8g
Rml4IHVwIHRoZSB2YXJpYWJsZXMgYXQgdGFpbC4KKyAgICAgICAgT3BlcmFuZHM8T3BlcmFuZFN1
YnN0aXR1dGlvbj4gc3Vic3RpdHV0aW9ucygKKyAgICAgICAgICAgIHNlY29uZEJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgICAgIHNlY29uZEJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50
cygpOyArK2kpCisgICAgICAgICAgICBmaXhUYWlsT3BlcmFuZChmaXJzdEJsb2NrLCBzZWNvbmRC
bG9jaywgYXJndW1lbnRUb09wZXJhbmQoaSksIHN1YnN0aXR1dGlvbnMpOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKTsgKytpKQorICAgICAgICAgICAgZml4VGFpbE9wZXJhbmQoZmlyc3RCbG9jaywgc2Vj
b25kQmxvY2ssIGksIHN1YnN0aXR1dGlvbnMpOworICAgICAgICAKKyAgICAgICAgLy8gRml4IHVw
IHRoZSByZWZlcmVuY2VzIGZyb20gb3VyIG5ldyBzdWNjZXNzb3JzLgorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGktLTspIHsKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFw
aC5zdWNjZXNzb3IoZmlyc3RCbG9jaywgaSldLmdldCgpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nvci0+cGhpcy5zaXplKCk7ICsraikgeworICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBwaGlOb2RlSW5kZXggPSBzdWNjZXNzb3ItPnBoaXNbal07CisgICAg
ICAgICAgICAgICAgTm9kZSYgcGhpTm9kZSA9IG1fZ3JhcGhbcGhpTm9kZUluZGV4XTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXBoaU5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlvbiBzdWJz
dGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLm9wZXJhbmQocGhpTm9kZS5sb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXBoaU5vZGUuY2hpbGQxKCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLmNoaWxkMSgpLmluZGV4KCkgPT0g
c3Vic3RpdHV0aW9uLm9sZENoaWxkKQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5n
ZUluZGV4KHBoaU5vZGUuY2hpbGRyZW4uY2hpbGQxKCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCk7
CisgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLmNoaWxkMigpKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS5jaGlsZDIoKS5pbmRl
eCgpID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5jaGFuZ2VJbmRleChwaGlOb2RlLmNoaWxkcmVuLmNoaWxkMigpLCBzdWJzdGl0dXRpb24ubmV3
Q2hpbGQpOworICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS5jaGlsZDMoKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUuY2hpbGQz
KCkuaW5kZXgoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCisgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguY2hhbmdlSW5kZXgocGhpTm9kZS5jaGlsZHJlbi5jaGlsZDMoKSwgc3Vic3RpdHV0
aW9uLm5ld0NoaWxkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgZmlyc3RCbG9jay0+dmFsdWVzQXRUYWlsID0gc2Vjb25kQmxvY2stPnZhbHVlc0F0VGFpbDsK
KyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbc2Vjb25kQmxvY2tJbmRleF0uY2xl
YXIoKTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihHcmFwaCYg
Z3JhcGgpCit7CisgICAgcmV0dXJuIHJ1blBoYXNlPENGR1NpbXBsaWZpY2F0aW9uUGhhc2U+KGdy
YXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1w
bGlmaWNhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2VfaAorI2RlZmluZSBERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgR3JhcGg7CisKKy8vIENGRyBzaW1wbGlmaWNhdGlvbjoKKy8vCisvLyBqdW1wIHRvIHNp
bmdsZSBwcmVkZWNlc3NvciAtPiBtZXJnZSBibG9ja3MKKy8vIGJyYW5jaCBvbiBjb25zdGFudCAt
PiBqdW1wCisvLyBicmFuY2ggdG8gc2FtZSBibG9ja3MgLT4ganVtcAorLy8ganVtcC1vbmx5IGJs
b2NrIC0+IHJlbW92ZQorLy8ga2lsbCBkZWFkIGNvZGUKKworYm9vbCBwZXJmb3JtQ0ZHU2ltcGxp
ZmljYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMCArNDUsMTEgQEAgcHVibGljOgogICAgICAgICAg
ICAgbV9yZXBsYWNlbWVudHNbaV0gPSBOb05vZGU7CiAgICAgfQogICAgIAotICAgIHZvaWQgcnVu
KCkKKyAgICBib29sIHJ1bigpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrID0g
MDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9jaykKLSAgICAgICAgICAg
IHBlcmZvcm1CbG9ja0NTRSgqbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja10pOworICAgICAgICAgICAg
cGVyZm9ybUJsb2NrQ1NFKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tdLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7IC8vIE1heWJlIHdlJ2xsIG5lZWQgdG8gbWFrZSB0aGlzIHJlYXNvbiBhYm91
dCB3aGV0aGVyIGl0IGNoYW5nZWQgdGhlIGdyYXBoIGluIGFuIGFjdGlvbmFibGUgd2F5PwogICAg
IH0KICAgICAKIHByaXZhdGU6CkBAIC0xMzksNTIgKzE0MCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmlj
YWwoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwotICAgICAgICBQcmVkaWN0ZWRUeXBlIHJp
Z2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIHJldHVy
biBpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KTsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBsb2dpY2FsTm90SXNQdXJlKE5vZGUmIG5vZGUpCi0gICAg
ewotICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuIGlzQm9vbGVhblByZWRpY3Rpb24ocHJl
ZGljdGlvbikgfHwgIXByZWRpY3Rpb247Ci0gICAgfQotICAgIAotICAgIGJvb2wgYnlWYWxJc1B1
cmUoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgJiYgKChub2RlLm9wKCkg
PT0gUHV0QnlWYWwgfHwgbm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpCi0gICAgICAgICAgICAg
ICAgPyBpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgIDogaXNBY3Rpb25hYmxlQXJyYXlQ
cmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSk7Ci0gICAgfQot
ICAgIAotICAgIGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsK
LSAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgaWYgKG5v
ZGUuZmxhZ3MoKSAmIE5vZGVDbG9iYmVyc1dvcmxkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGlmICghKG5vZGUuZmxhZ3MoKSAmIE5vZGVNaWdodENsb2JiZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAg
ICBjYXNlIFZhbHVlQWRkOgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAgICBjYXNl
IENvbXBhcmVMZXNzRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6Ci0gICAgICAgIGNh
c2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgICAg
ICByZXR1cm4gIWlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpOwotICAgICAgICBjYXNlIExvZ2lj
YWxOb3Q6Ci0gICAgICAgICAgICByZXR1cm4gIWxvZ2ljYWxOb3RJc1B1cmUobm9kZSk7Ci0gICAg
ICAgIGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgICAgICByZXR1cm4gIWJ5VmFsSXNQdXJlKG5vZGUp
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSWYgYnkgc29tZSBvZGRpdHkgd2UgaGl0IHRoaXMg
Y2FzZSBpbiByZWxlYXNlIGJ1aWxkIGl0J3Mgc2FmZXIgdG8gaGF2ZSBDU0UgYXNzdW1lIHRoZSB3
b3JzdC4KLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBOb2RlSW5kZXggaW1wdXJlQ1NFKE5v
ZGUmIG5vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2FsaXpl
KG5vZGUuY2hpbGQxKCkpOwpAQCAtMjE1LDcgKzE3MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9i
YmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMjM4LDcgKzE5Myw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTI1NCwxNCArMjA5LDE0IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgewogICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAgICAg
ICAgICAgICBpZiAoIWJ5VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAgICAgIGlmICghbV9n
cmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25p
Y2FsaXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAg
ICAgICAgICAgICAgIGlmICghYnlWYWxJc1B1cmUobm9kZSkpCisgICAgICAgICAgICAgICAgaWYg
KCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9Ob2RlOwogICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBj
YW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNoaWxkMikpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7CkBAIC0yODAsNyAr
MjM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBBIHB1c2ggY2Fubm90IGFmZmVj
dCBwcmV2aW91c2x5IGV4aXN0aW5nIGVsZW1lbnRzIGluIHRoZSBhcnJheS4KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNs
b2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJz
V29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzMxLDcgKzI4Niw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAg
ICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChieVZhbElzUHVy
ZShub2RlKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUp
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBp
dCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAgICAgICAgICAgIC8vIGlu
dGVnZXIgaW5kZXgsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVj
dHVyZQogICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCkBAIC0zNDAsNyArMjk1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxk
KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQpAQCAtMzc3LDcgKzMzMiw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbEFsaWFzOgotICAgICAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSkgewor
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2lu
ZyBhbiBhcnJheSB3aXRoIGFuCiAgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgs
IHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQogICAgICAg
ICAgICAgICAgICAgICAvLyBjaGFuZ2UuCkBAIC0zODYsNyArMzQxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkBAIC00MTYsNyArMzcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxp
YXM6Ci0gICAgICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgUHV0QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5
IHdpdGggYW4KICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdz
IGltcG9zc2libGUgZm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAg
ICAgIC8vIGNoYW5nZS4KQEAgLTQyNSw3ICszODAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTQ2MSwxMiArNDE2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAg
ICAgIGlmIChpc0ZpeGVkSW5kZXhlZFN0b3JhZ2VPYmplY3RQcmVkaWN0aW9uKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKSAmJiBieVZhbElzUHVyZShub2RlKSkKKyAgICAgICAg
ICAgICAgICBpZiAoaXNGaXhlZEluZGV4ZWRTdG9yYWdlT2JqZWN0UHJlZGljdGlvbihtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkgJiYgbV9ncmFwaC5ieVZhbElzUHVyZShub2Rl
KSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2xvYmJl
cnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3Js
ZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC02MTAsNiArNTY1LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBJc1N0cmluZzoKICAgICAgICAgY2FzZSBJc09iamVjdDoKICAgICAgICAg
Y2FzZSBJc0Z1bmN0aW9uOgorICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCkBAIC02MzUsMTggKzU5MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29tcGFy
ZUdyZWF0ZXI6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKICAgICAgICAgY2FzZSBD
b21wYXJlRXE6IHsKLSAgICAgICAgICAgIGlmIChpc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKSkg
ewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShu
b2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYg
aXNQcmVkaWN0ZWROdW1lcmljYWwobV9ncmFwaFtyZXBsYWNlbWVudEluZGV4XSkpCi0gICAgICAg
ICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHJlcGxhY2VtZW50SW5kZXgpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIExvZ2ljYWxOb3Q6IHsKLSAgICAgICAgICAgIGlmIChsb2dpY2FsTm90SXNQdXJlKG5v
ZGUpKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChub2Rl
KSkgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNT
RShub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUg
JiYgbG9naWNhbE5vdElzUHVyZShtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKKyAgICAgICAg
ICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgbV9ncmFwaC5pc1ByZWRp
Y3RlZE51bWVyaWNhbChtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKICAgICAgICAgICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJbmRleCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTY1OSwxMiArNjA2LDEyIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAg
ICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguYnlW
YWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxM
b2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0
QnlWYWw6Ci0gICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkgJiYgZ2V0QnlWYWxMb2Fk
RWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCkp
ICE9IE5vTm9kZSkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpICYm
IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5jaGls
ZDIoKS5pbmRleCgpKSAhPSBOb05vZGUpCiAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChQdXRC
eVZhbEFsaWFzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC03MDQsMTQg
KzY1MSwxOSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgfQogICAgIAotICAgIHZvaWQgcGVyZm9y
bUJsb2NrQ1NFKEJhc2ljQmxvY2smIGJsb2NrKQorICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJh
c2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAmYmxvY2s7
CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgh
YmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IExhc3ROb2RlVHlwZTsgKytpKQogICAgICAgICAgICAgbV9sYXN0U2VlbltpXSA9IFVJTlRf
TUFYOwogCi0gICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8
IGJsb2NrLnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAgbV9jb21waWxl
SW5kZXggPSBibG9ja1ttX2luZGV4SW5CbG9ja107CisgICAgICAgIGZvciAobV9pbmRleEluQmxv
Y2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2sp
IHsKKyAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgICAgIHBlcmZvcm1Ob2RlQ1NFKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTcyMyw5ICs2NzUsOSBAQCBwcml2YXRlOgogICAgIEZpeGVk
QXJyYXk8dW5zaWduZWQsIExhc3ROb2RlVHlwZT4gbV9sYXN0U2VlbjsKIH07CiAKLXZvaWQgcGVy
Zm9ybUNTRShHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoKQogewot
ICAgIHJ1blBoYXNlPENTRVBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPENTRVBo
YXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGEgd2lkZSByYW5nZSBvZiBzdWJleHByZXNz
aW9uIHNpbWlsYXJpdGllcy4gSXQncyBrbm93biB0byBwcm9kdWNlIGJpZyB3aW5zCiAvLyBvbiBh
IGZldyBiZW5jaG1hcmtzLCBhbmQgaXMgcmVsYXRpdmVseSBjaGVhcCB0byBydW4uCiAKLXZvaWQg
cGVyZm9ybUNTRShHcmFwaCYpOworYm9vbCBwZXJmb3JtQ1NFKEdyYXBoJik7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwxMiBAQAogI2Vsc2UKICNkZWZpbmUg
REZHX0VOQUJMRV9KSVRfQVNTRVJUIDAKICNlbmRpZgorLy8gRW5hYmxlIHZhbGlkYXRpb24gb2Yg
dGhlIGdyYXBoLgorI2lmICFBU1NFUlRfRElTQUJMRUQKKyNkZWZpbmUgREZHX0VOQUJMRV9WQUxJ
REFUSU9OIDEKKyNlbHNlCisjZGVmaW5lIERGR19FTkFCTEVfVkFMSURBVElPTiAwCisjZW5kaWYK
IC8vIENvbnNpc3RlbmN5IGNoZWNrIGNvbnRlbnRzIGNvbXBpbGVyIGRhdGEgc3RydWN0dXJlcy4K
ICNkZWZpbmUgREZHX0VOQUJMRV9DT05TSVNURU5DWV9DSEVDSyAwCiAvLyBFbWl0IGEgYnJlYWtw
b2ludCBpbnRvIHRoZSBoZWFkIG9mIGV2ZXJ5IGdlbmVyYXRlZCBmdW5jdGlvbiwgdG8gYWlkIGRl
YnVnZ2luZyBpbiBHREIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDEzICs0MywxNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAK
LSAgICB2b2lkIHJ1bigpCisgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgYm9vbCBjaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgIAogICAgICAgICBBYnN0cmFjdFN0YXRlIHN0YXRlKG1fZ3Jh
cGgpOwogICAgICAgICBJbnNlcnRpb25TZXQ8Tm9kZUluZGV4PiBpbnNlcnRpb25TZXQ7CiAgICAg
ICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Cisg
ICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgaWYgKCFibG9jay0+Y2ZhRm91bmRDb25zdGFudHMpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwpAQCAtNjAs
MjkgKzY0LDUzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbbm9kZUluZGV4XTsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKQotICAgICAgICAgICAgICAgICAgICB8fCAobm9kZS5mbGFncygpICYgKE5vZGVDbG9i
YmVyc1dvcmxkIHwgTm9kZU1pZ2h0Q2xvYmJlcikpCisgICAgICAgICAgICAgICAgICAgIHx8IG1f
Z3JhcGguY2xvYmJlcnNXb3JsZChub2RlKQogICAgICAgICAgICAgICAgICAgICB8fCBub2RlLmhh
c0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBzdGF0ZS5mb3JOb2RlKG5vZGVJbmRleCkudmFsdWUoKTsKICAg
ICAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBOb2RlIHBoYW50b20oUGhhbnRvbSwg
bm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9PSBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoYmxvY2stPmlzSW5QaGlzKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOworICAgICAg
ICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgp
KSA9IG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCB0YWlsTm9kZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKG5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0YWls
Tm9kZUluZGV4ID09IG5vZGVJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpID0gbm9kZS5jaGlsZDEoKS5pbmRl
eCgpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChtX2dyYXBoW3RhaWxOb2RlSW5kZXhdLm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW3RhaWxOb2RlSW5kZXhdLm9wKCkgPT0gU2V0
TG9jYWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIHBoYW50b20uY2hpbGRyZW4gPSBub2RlLmNoaWxk
cmVuOwogICAgICAgICAgICAgICAgIHBoYW50b20ucmVmKCk7CisgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlSW5kZXgsIHZhbHVl
KTsKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggcGhhbnRvbU5vZGVJbmRleCA9IG1fZ3JhcGgu
c2l6ZSgpOwogICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHBoYW50b20pOwogICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2NrLCBwaGFudG9tTm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLnJlc2V0KCk7CiAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuZXhlY3V0ZSgqYmxvY2spOworICAgICAgICAgICAgc3RhdGUucmVzZXQoKTsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogfTsK
IAotdm9pZCBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKEdyYXBoJiBncmFwaCkKK2Jvb2wgcGVyZm9y
bUNvbnN0YW50Rm9sZGluZyhHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgcnVuUGhhc2U8Q29uc3RhbnRG
b2xkaW5nUGhhc2U+KGdyYXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q29uc3RhbnRGb2xkaW5n
UGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
aAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNz
IEdyYXBoOwogLy8gaW5mZXJyZWQgY29uc3RhbnRzLCBhbmQgcmVwbGFjZXMgdGhvc2Ugbm9kZXMg
d2l0aCBjb25zdGFudHMgd2hpbHN0IGluamVjdGluZwogLy8gUGhhbnRvbSBub2RlcyB0byBrZWVw
IHRoZSBjaGlsZHJlbiBhbGl2ZSAod2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBPU1IgZXhpdCkuCiAK
LXZvaWQgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhHcmFwaCYpOworYm9vbCBwZXJmb3JtQ29uc3Rh
bnRGb2xkaW5nKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTE0NTU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMCwxMiArMzAsMTQgQEAKIAogI2luY2x1ZGUgIkRGR0J5dGVDb2RlUGFyc2VyLmgiCiAjaW5j
bHVkZSAiREZHQ0ZBUGhhc2UuaCIKKyNpbmNsdWRlICJERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKICNpbmNsdWRlICJERkdKSVRD
b21waWxlci5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRG
R1ZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNl
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTU5LDEzICs2MSwyNiBA
QCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgCiAgICAgaWYg
KGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbikKICAgICAgICAgZGZnLnByZWRpY3RBcmd1
bWVudFR5cGVzKCk7Ci0KLSAgICBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24oZGZnKTsK
KyAgICAKKyAgICB2YWxpZGF0ZShkZmcpOwogICAgIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRp
b24oZGZnKTsKICAgICBwZXJmb3JtRml4dXAoZGZnKTsKLSAgICBwZXJmb3JtQ0ZBKGRmZyk7Ci0g
ICAgcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwotICAgIHBlcmZvcm1DU0UoZGZnKTsKKyAg
ICB1bnNpZ25lZCBjbnQgPSAxOworICAgIGZvciAoOzsgKytjbnQpIHsKKyNpZiBERkdfRU5BQkxF
KERFQlVHX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2coIkRGRyBiZWdpbm5pbmcgb3B0aW1pemF0
aW9uIGZpeHBvaW50IGl0ZXJhdGlvbiAjJXUuXG4iLCBjbnQpOworI2VuZGlmCisgICAgICAgIGJv
b2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAgICAgIGNo
YW5nZWQgfD0gcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOworICAgICAgICBjaGFuZ2VkIHw9
IHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihkZmcpOworICAgICAgICBwZXJmb3JtQ1NFKGRmZyk7
CisgICAgICAgIGlmICghY2hhbmdlZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZGF0YUxvZygiREZHIG9wdGltaXphdGlvbiBm
aXhwb2ludCBjb252ZXJnZWQgaW4gJXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7CisjZW5kaWYKICAg
ICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwogCiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCwxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBpbmRleFVuY2hlY2tlZCgpICE9IE5vTm9kZTsg
fQorICAgIAorICAgIC8vIE5CLiBJdCdzIHN1cGVyIHRlbXB0aW5nIHRvIGhhdmUgYSBvcGVyYXRv
ciBib29sLiBCdXQgdGhhdCB3b3VsZCBtZWFuIHRoYXQgaWYgeW91IGFjY2lkZW50YWxseQorICAg
IC8vIHVzZSBhbiBFZGdlIHdoZXJlIHlvdSBtZWFudCB0byB1c2UgRWRnZTo6aW5kZXgoKSwgeW91
IHdpbGwgaW5zdGVhZCBnZXQgRWRnZTo6aXNTZXQoKS4gR3Jvc3MhCisgICAgCiAgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIAogICAgIGJvb2wgb3Bl
cmF0b3I9PShFZGdlIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNSAr
NDEsMTkgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAg
IGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAg
ICAgICAgICAgICBmaXh1cEJsb2NrKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBmaXh1
cEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKKyAgICAgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CiAg
ICAgICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5z
aXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKICAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0g
YmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBo
W21fY29tcGlsZUluZGV4XSk7CkBAIC0zNTksOSArMzYzLDkgQEAgcHJpdmF0ZToKICAgICBJbnNl
cnRpb25TZXQ8Tm9kZUluZGV4PiBtX2luc2VydGlvblNldDsKIH07CiAgICAgCi12b2lkIHBlcmZv
cm1GaXh1cChHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1GaXh1cChHcmFwaCYgZ3JhcGgpCiB7
Ci0gICAgcnVuUGhhc2U8Rml4dXBQaGFzZT4oZ3JhcGgpOworICAgIHJldHVybiBydW5QaGFzZTxG
aXh1cFBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5oCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBHcmFwaDsKIC8vIEZpeCBwb3J0aW9ucyBv
ZiB0aGUgZ3JhcGggdGhhdCBhcmUgaW5lZmZpY2llbnQgZ2l2ZW4gdGhlIHByZWRpY3Rpb25zIHRo
YXQKIC8vIHdlIGhhdmUuIFRoaXMgc2hvdWxkIHJ1biBhZnRlciBwcmVkaWN0aW9uIHByb3BhZ2F0
aW9uIGJ1dCBiZWZvcmUgQ1NFLgogCi12b2lkIHBlcmZvcm1GaXh1cChHcmFwaCYpOworYm9vbCBw
ZXJmb3JtRml4dXAoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRzo6UGhhc2UK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDEx
NDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjYsMTAgKzEyNiw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5v
ZGVJbmRleCkKICAgICB1bnNpZ25lZCByZWZDb3VudCA9IG5vZGUucmVmQ291bnQoKTsKICAgICBi
b29sIHNraXBwZWQgPSAhcmVmQ291bnQ7CiAgICAgYm9vbCBtdXN0R2VuZXJhdGUgPSBub2RlLm11
c3RHZW5lcmF0ZSgpOwotICAgIGlmIChtdXN0R2VuZXJhdGUpIHsKLSAgICAgICAgQVNTRVJUKHJl
ZkNvdW50KTsKKyAgICBpZiAobXVzdEdlbmVyYXRlKQogICAgICAgICAtLXJlZkNvdW50OwotICAg
IH0KICAgICAKICAgICBwcmludFdoaXRlU3BhY2UoKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVEZXB0
aCgpIC0gMSkgKiAyKTsKIApAQCAtMjc1LDE1ICsyNzMsMjkgQEAgdm9pZCBHcmFwaDo6ZHVtcChO
b2RlSW5kZXggbm9kZUluZGV4KQogCiB2b2lkIEdyYXBoOjpkdW1wKCkKIHsKKyAgICBib29sIGR1
bXBBbGwgPSBmYWxzZTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgZHVtcEFsbCA9IHRydWU7CisjZW5kaWYKKwogICAgIE5vZGVJbmRleCBsYXN0Tm9kZUlu
ZGV4ID0gTm9Ob2RlOwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgp
OyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsK
KyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBkYXRh
TG9nKCJCbG9jayAjJXUgKGJjIyV1KTogJXMlc1xuIiwgKGludCliLCBibG9jay0+Ynl0ZWNvZGVC
ZWdpbiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiIChza2lwcGVkKSIsIGJsb2NrLT5pc09T
UlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiKTsKKyAgICAgICAgZGF0YUxvZygiICBQcmVk
ZWNlc3NvcnM6Iik7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm1fcHJl
ZGVjZXNzb3JzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgZGF0YUxvZygiICMldSIsIGJsb2Nr
LT5tX3ByZWRlY2Vzc29yc1tpXSk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAgICAgIGRh
dGFMb2coIiAgUGhpIE5vZGVzOlxuIik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIC8vIER1bXBpbmcgdGhlIGRl
YWQgUGhpIG5vZGVzIGlzIGp1c3QgYW5ub3lpbmchCi0gICAgICAgICAgICBpZiAoYXQoYmxvY2st
PnBoaXNbaV0pLnJlZkNvdW50KCkpCisgICAgICAgICAgICBpZiAoZHVtcEFsbCB8fCBhdChibG9j
ay0+cGhpc1tpXSkucmVmQ291bnQoKSkgeworICAgICAgICAgICAgICAgIGR1bXBDb2RlT3JpZ2lu
KGxhc3ROb2RlSW5kZXgsIGJsb2NrLT5waGlzW2ldKTsKICAgICAgICAgICAgICAgICBkdW1wKGJs
b2NrLT5waGlzW2ldKTsKKyAgICAgICAgICAgICAgICBsYXN0Tm9kZUluZGV4ID0gYmxvY2stPnBo
aXNbaV07CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiICB2YXJz
IGJlZm9yZTogIik7CiAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKQEAgLTMwNSw2
ICszMTcsOSBAQCB2b2lkIEdyYXBoOjpkdW1wKCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ZGF0YUxvZygiPGVtcHR5PiIpOwogICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICBkYXRh
TG9nKCIgIHZhciBsaW5rczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFyaWFi
bGVzQXRUYWlsLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAg
IH0KIH0KIApAQCAtMzYyLDYgKzM3Nyw1NCBAQCB2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRU
eXBlcygpCiAgICAgfQogfQogCit2b2lkIEdyYXBoOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJs
b2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRl
eCBzdWNjZXNzb3JJbmRleCkKK3sKKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2Jsb2Nr
c1tzdWNjZXNzb3JJbmRleF0uZ2V0KCk7CisgICAgaWYgKCFzdWNjZXNzb3ItPmlzUmVhY2hhYmxl
KSB7CisgICAgICAgIHN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgICAgICB3b3Jr
bGlzdC5hcHBlbmQoc3VjY2Vzc29ySW5kZXgpOworICAgIH0KKyAgICAKKyAgICBzdWNjZXNzb3It
Pm1fcHJlZGVjZXNzb3JzLmFwcGVuZChibG9ja0luZGV4KTsKK30KKwordm9pZCBHcmFwaDo6ZGV0
ZXJtaW5lUmVhY2hhYmlsaXR5KCkKK3sKKyAgICBWZWN0b3I8QmxvY2tJbmRleCwgMTY+IHdvcmts
aXN0OworICAgIHdvcmtsaXN0LmFwcGVuZCgwKTsKKyAgICBtX2Jsb2Nrc1swXS0+aXNSZWFjaGFi
bGUgPSB0cnVlOworICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJs
b2NrSW5kZXggaW5kZXggPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIHdvcmtsaXN0LnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3Nb
aW5kZXhdLmdldCgpOworICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGlua2VkKTsKKyAgICAgICAg
CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChibG9jay0+bGFzdCgpKTsKKyAgICAgICAgQVNTRVJU
KG5vZGUuaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLmlzSnVtcCgp
KQorICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS50YWtl
bkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkgeworICAg
ICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS50YWtlbkJsb2Nr
SW5kZXgoKSk7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBu
b2RlLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBH
cmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQoreworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gbV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYmxvY2stPmlzUmVhY2hhYmxlID0g
ZmFsc2U7CisgICAgICAgIGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5jbGVhcigpOworICAgIH0KKyAg
ICAKKyAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIGRlcmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgeworICAgICAgICBpZiAoIWF0KG5v
ZGVJbmRleCkucmVmQ291bnQoKSkKKyAgICAgICAgICAgIGR1bXAoKTsKICAgICAgICAgaWYgKGF0
KG5vZGVJbmRleCkuZGVyZWYoKSkKICAgICAgICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZUluZGV4
KTsKICAgICB9CkBAIC0xMTMsNiArMTE1LDIwIEBAIHB1YmxpYzoKICAgICAgICAgZGVyZWYobm9k
ZVVzZS5pbmRleCgpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjaGFuZ2VJbmRleChFZGdlJiBl
ZGdlLCBOb2RlSW5kZXggbmV3SW5kZXgpCisgICAgeworICAgICAgICByZWYobmV3SW5kZXgpOwor
ICAgICAgICBkZXJlZihlZGdlLmluZGV4KCkpOworICAgICAgICBlZGdlLnNldEluZGV4KG5ld0lu
ZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjaGFuZ2VFZGdlKEVkZ2UmIGVkZ2UsIEVkZ2Ug
bmV3RWRnZSkKKyAgICB7CisgICAgICAgIHJlZihuZXdFZGdlKTsKKyAgICAgICAgZGVyZWYoZWRn
ZSk7CisgICAgICAgIGVkZ2UgPSBuZXdFZGdlOworICAgIH0KKyAgICAKICAgICB2b2lkIGNsZWFy
QW5kRGVyZWZDaGlsZDEoTm9kZSYgbm9kZSkKICAgICB7CiAgICAgICAgIGlmICghbm9kZS5jaGls
ZDEoKSkKQEAgLTM0Niw2ICszNjIsNzggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaXNDYXB0
dXJlZChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlcikpOwogICAgIH0KICAgICAKKyAg
ICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGF0KGJsb2NrLT5sYXN0KCkpLm51bVN1Y2Nlc3NvcnMoKTsKKyAgICB9CisgICAg
QmxvY2tJbmRleCBzdWNjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGJsb2NrLT5sYXN0KCkpLnN1Y2Nlc3NvcihpbmRleCk7
CisgICAgfQorICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sq
IGJsb2NrLCBib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhdChibG9jay0+
bGFzdCgpKS5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAg
UHJlZGljdGVkVHlwZSBsZWZ0ID0gYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpOworICAg
ICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gYXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigp
OworICAgICAgICByZXR1cm4gaXNOdW1iZXJQcmVkaWN0aW9uKGxlZnQpICYmIGlzTnVtYmVyUHJl
ZGljdGlvbihyaWdodCk7CisgICAgfQorICAgIAorICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYg
bm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkKKyAgICAgICAgICAgICYmICgobm9kZS5vcCgpID09IFB1dEJ5VmFsIHx8
IG5vZGUub3AoKSA9PSBQdXRCeVZhbEFsaWFzKQorICAgICAgICAgICAgICAgID8gaXNBY3Rpb25h
YmxlTXV0YWJsZUFycmF5UHJlZGljdGlvbihhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkp
CisgICAgICAgICAgICAgICAgOiBpc0FjdGlvbmFibGVBcnJheVByZWRpY3Rpb24oYXQobm9kZS5j
aGlsZDEoKSkucHJlZGljdGlvbigpKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgY2xvYmJlcnNX
b3JsZChOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVD
bG9iYmVyc1dvcmxkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghKG5v
ZGUuZmxhZ3MoKSAmIE5vZGVNaWdodENsb2JiZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICBjYXNlIFZhbHVlQWRkOgor
ICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Cisg
ICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJF
cToKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgICAgICByZXR1cm4gIWlzUHJlZGlj
dGVkTnVtZXJpY2FsKG5vZGUpOworICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAg
cmV0dXJuICFieVZhbElzUHVyZShub2RlKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIElmIGJ5
IHNvbWUgb2RkaXR5IHdlIGhpdCB0aGlzIGNhc2UgaW4gcmVsZWFzZSBidWlsZCBpdCdzIHNhZmVy
IHRvIGhhdmUgQ1NFIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gY2xvYmJlcnNXb3JsZChhdChub2RlSW5kZXgpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKKyAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5
KCk7CisgICAgCisgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oTm9kZSYgbm9kZSkKKyAgICB7Cisg
ICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKKyAgICAgICAgICAgIHJl
dHVybiBub2RlLm51bUNoaWxkcmVuKCk7CisgICAgICAgIHJldHVybiBBZGphY2VuY3lMaXN0U2l6
ZTsKKyAgICB9CisgICAgCisgICAgRWRnZSBjaGlsZChOb2RlJiBub2RlLCB1bnNpZ25lZCBpbmRl
eCkKKyAgICB7CisgICAgICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykKKyAg
ICAgICAgICAgIHJldHVybiBtX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgaW5k
ZXhdOworICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5jaGlsZChpbmRleCk7CisgICAgfQor
ICAgIAogICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CkBAIC0zNjQsNiArNDUy
LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CiBwcml2YXRlOgog
ICAgIAorICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdv
cmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgp
OworICAgIAogICAgIGJvb2wgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2Rl
JiBhZGQsIE5vZGUmIHZhcmlhYmxlLCBOb2RlJiBpbW1lZGlhdGUpCiAgICAgewogICAgICAgICBB
U1NFUlQoaW1tZWRpYXRlLmhhc0NvbnN0YW50KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHN0cnVjdCBPcElu
Zm8gewogLy8gTm9kZSByZXByZXNlbnRzIGEgc2luZ2xlIG9wZXJhdGlvbiBpbiB0aGUgZGF0YSBm
bG93IGdyYXBoLgogc3RydWN0IE5vZGUgewogICAgIGVudW0gVmFyQXJnVGFnIHsgVmFyQXJnIH07
Ci0KKyAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwg
bm8gaW1tZWRpYXRlIHZhbHVlLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pCkBAIC0yMDIsNyArMjAyLDggQEAgc3RydWN0IE5vZGUgewogICAgICAgICBtX29w
ID0gSlNDb25zdGFudDsKICAgICAgICAgaWYgKG1fZmxhZ3MgJiBOb2RlTXVzdEdlbmVyYXRlKQog
ICAgICAgICAgICAgbV9yZWZDb3VudC0tOwotICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlTXVzdEdl
bmVyYXRlOworICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUNsb2JiZXJzV29ybGQpKTsK
KyAgICAgICAgbV9mbGFncyAmPSB+KE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVy
KTsKICAgICAgICAgbV9vcEluZm8gPSBjb25zdGFudE51bWJlcjsKICAgICAgICAgY2hpbGRyZW4u
cmVzZXQoKTsKICAgICB9CkBAIC00NjgsNiArNDY5LDM3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgcmV0dXJuIG1fb3BJbmZvMjsKICAgICB9CiAgICAgCisgICAgdW5zaWduZWQgbnVtU3VjY2Vz
c29ycygpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBKdW1w
OgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICAg
ICAgcmV0dXJuIDI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBCbG9ja0luZGV4IHN1Y2Nlc3Nvcih1bnNpZ25lZCBp
bmRleCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaW5kZXgpIHsKKyAgICAgICAgY2FzZSAwOgor
ICAgICAgICAgICAgcmV0dXJuIHRha2VuQmxvY2tJbmRleCgpOworICAgICAgICBjYXNlIDE6Cisg
ICAgICAgICAgICByZXR1cm4gbm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBO
b0Jsb2NrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEJsb2NrSW5kZXggc3VjY2Vzc29y
Rm9yQ29uZGl0aW9uKGJvb2wgY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQnJh
bmNoKCkpOworICAgICAgICByZXR1cm4gY29uZGl0aW9uID8gdGFrZW5CbG9ja0luZGV4KCkgOiBu
b3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNIZWFwUHJlZGlj
dGlvbigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcg
KzE3Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhJc1N0
cmluZywgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJc09iamVjdCwgTm9kZVJlc3Vs
dEJvb2xlYW4pIFwKICAgICBtYWNybyhJc0Z1bmN0aW9uLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAot
ICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU1pZ2h0Q2xvYmJl
cikgXAorICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFj
cm8oVG9QcmltaXRpdmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xv
YmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKFN0ckNhdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24g
MTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNT
dGF0ZSogZXhlYywgQwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAg
IEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2Rl
OjpCYXNlbGluZUpJVCk7CiAgICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7Ci0g
ICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtYmVyT2ZERkdPU1JFbnRyaWVzKCkpOwogCiAjaWYgRU5B
QkxFKEpJVF9WRVJCT1NFX09TUikKICAgICBkYXRhTG9nKCJPU1IgaW4gJXAoJXApIGZyb20gYmMj
JXVcbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBieXRlY29kZUluZGV4
KTsKQEAgLTUxLDYgKzUwLDEzIEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4
ZWMsIEMKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwogICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmRmZ09TUkVudHJ5RGF0YUZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCisgICAgaWYgKCFlbnRyeSkgewor
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFp
bGVkIGJlY2F1c2UgdGhlIGVudHJ5cG9pbnQgd2FzIG9wdGltaXplZCBvdXQuXG4iKTsKKyNlbmRp
ZgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCiAgICAgQVNTRVJUKGVudHJ5LT5tX2J5
dGVjb2RlSW5kZXggPT0gYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgLy8gVGhlIGNvZGUgYmVs
b3cgY2hlY2tzIGlmIGl0IGlzIHNhZmUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEl0IG1heSBmaW5k
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMjEsNyArMTEyMSw3IEBAIHNpemVfdCBERkdfT1BF
UkFUSU9OIGRmZ0NvbnZlcnRKU1ZhbHVlVG8KICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Z2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3ApLnRvQm9vbGVhbihleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcCkudG9Cb29sZWFuKCk7CiB9CiAKICNpZiBERkdfRU5BQkxFKFZFUkJPU0VfU1BFQ1VMQVRJ
T05fRkFJTFVSRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKKyNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC00
MCw2ICs0Miw3IEBAIHZvaWQgUGhhc2U6OmJlZ2luUGhhc2UoKQogCiB2b2lkIFBoYXNlOjplbmRQ
aGFzZSgpCiB7CisgICAgdmFsaWRhdGUobV9ncmFwaCwgRHVtcEdyYXBoKTsKIH0KICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCShyZXZpc2lvbiAxMTQ1NTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTczLDEwICs3MywxMCBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgUGhh
c2VUeXBlPgotdm9pZCBydW5QaGFzZShHcmFwaCYgZ3JhcGgpCitib29sIHJ1blBoYXNlKEdyYXBo
JiBncmFwaCkKIHsKICAgICBQaGFzZVR5cGUgcGhhc2UoZ3JhcGgpOwotICAgIHBoYXNlLnJ1bigp
OworICAgIHJldHVybiBwaGFzZS5ydW4oKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcnVuKCkKKyAgICBib29sIHJ1bigpCiAgICAgewogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgbV9jb3VudCA9IDA7CkBAIC03Nyw2
ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRvUm91bmRPZkRvdWJsZVZvdGluZygpOwog
ICAgICAgICAgICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKICAgICAgICAgfSB3aGlsZSAobV9jaGFu
Z2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKIHByaXZh
dGU6CkBAIC04MzEsOSArODMzLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKICAgICAKLXZvaWQg
cGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZvcm1Q
cmVkaWN0aW9uUHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQogewotICAgIHJ1blBoYXNlPFByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPFByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBHcmFwaDsKIC8vIGFyaXRobWV0aWMg
bm9kZXMpIGRvIG5vdCBxdWFsaWZ5IGZvciBhbnkgb2YgdGhlc2UgY2F0ZWdvcmllcy4gQnV0IGFm
dGVyIHJ1bm5pbmcKIC8vIHRoaXMgcGhhc2UsIHdlJ2xsIGhhdmUgZnVsbCBpbmZvcm1hdGlvbiBm
b3IgdGhlIGV4cGVjdGVkIHR5cGUgb2YgZWFjaCBub2RlLgogCi12b2lkIHBlcmZvcm1QcmVkaWN0
aW9uUHJvcGFnYXRpb24oR3JhcGgmKTsKK2Jvb2wgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlv
bihHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHOjpQaGFzZQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50
UGhpRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOwogICAgICAgICBkbyB7CkBAIC02Myw3ICs2Myw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCisgICAgICAgIAor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNjYsOSArMTY3LDkg
QEAgcHJpdmF0ZToKIAogfTsKIAotdm9pZCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24o
R3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24oR3JhcGgm
IGdyYXBoKQogewotICAgIHJ1blBoYXNlPFJlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2U+KGdy
YXBoKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZT4o
Z3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0
aW9uUGhhc2UuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBXZSBpbnNlcnRlZCBtYW55IGNhbi1iZS1yZWR1
bmRhbnQgUGhpIG5vZGVzIHdoZW4gYnVpbGRpbmcgdGhlIGdyYXBoLgogLy8gVGhpcyBwaGFzZSB3
aWxsIGp1c3QgcmVtb3ZlIHRoZW0uCiAKLXZvaWQgcGVyZm9ybVJlZHVuZGFudFBoaUVsaW1pbmF0
aW9uKEdyYXBoJik7Citib29sIHBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbihHcmFwaCYp
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDEy
ICsxMjAsMjUgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHVzZSBjb3VudCAm
IGFkZCB0byB0aGUgZnJlZSBsaXN0LgogICAgICAgICAgICAgbV91c2VkW2luZGV4XSA9IDA7CiAg
ICAgICAgICAgICBtX2ZyZWUuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICBkYXRhTG9n
KCIgVmlydHVhbCByZWdpc3RlciAldSBpcyBhdCAldS8ldSB1c2VzLiIsIGluZGV4LCBtX3VzZWRb
aW5kZXhdLCBub2RlLnJlZkNvdW50KCkpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAgICAg
dm9pZCB1c2UoRWRnZSBjaGlsZCkKICAgICB7CiAgICAgICAgIHVzZShjaGlsZC5pbmRleFVuY2hl
Y2tlZCgpKTsKICAgICB9CisgICAgCisgICAgdm9pZCB1c2VJZkhhc1Jlc3VsdChFZGdlIGNoaWxk
KQorICAgIHsKKyAgICAgICAgaWYgKCFjaGlsZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgaWYgKCFtX2dyYXBoW2NoaWxkXS5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdXNlKGNoaWxkKTsKKyAgICB9CiAKICAgICB1bnNpZ25lZCBoaWdoV2F0ZXJtYXJr
KCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0NSw3ICs2NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBl
ZXBoCiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7
CiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4
KCk7CiAgICAgCi0gICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICBpZiAodGFr
ZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKICAgICAgICAg
QmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKQEAgLTcx
NCw3ICs3MTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAK
ICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBi
bG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtl
biAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgot
ICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAgaWYgKHRha2VuID09IG5leHRC
bG9jaygpKSB7CiAgICAgICAgIGNvbmQgPSBKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpOwogICAg
ICAgICBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Olplcm87CiAgICAgICAgIEJs
b2NrSW5kZXggdG1wID0gdGFrZW47CkBAIC04NjYsNyArODY2LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlv
biB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4
dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRp
b24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KLSAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAx
KSkgeworICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBpbnZlcnQgPSAh
aW52ZXJ0OwogICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9
IG5vdFRha2VuOwpAQCAtMTc3NCw3ICsxNzc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaChOb2RlJiBubwogICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRp
dGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKIAotICAgICAgICBpZiAo
dGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2Nr
KCkpIHsKICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpaZXJvOwogICAg
ICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgIHRha2VuID0gbm90
VGFrZW47CkBAIC0xNzkzLDcgKzE3OTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJh
bmNoKE5vZGUmIG5vCiAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAgICAg
ICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgICAgICAgICBpbnZlcnQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAg
ICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKQEAgLTI4NjAsNyArMjg2MCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRha2VuID09ICht
X2Jsb2NrICsgMSkpIHsKKyAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewog
ICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpaZXJvOwogICAgICAg
ICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgICAgICAgICAgdGFrZW4g
PSBub3RUYWtlbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA0
LDcgKzYwNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAg
ICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKICAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAg
ICAKLSAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgIGlmICh0YWtlbiA9PSBu
ZXh0QmxvY2soKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwogICAgICAgICBCbG9ja0lu
ZGV4IHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwpAQCAtNjcxLDcgKzY3
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKIAogICAgIC8v
IFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgog
ICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52
ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCi0gICAgaWYg
KHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkp
IHsKICAgICAgICAgY29uZCA9IEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCk7CiAgICAgICAgIGNh
bGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6WmVybzsKICAgICAgICAgQmxvY2tJbmRl
eCB0bXAgPSB0YWtlbjsKQEAgLTgxMyw3ICs4MTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVBlZXBoCiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwg
YnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0
Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3
ZSBjYW4gZmFsbCB0aHJvdWdoLgotICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7Cisg
ICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7
CiAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFr
ZW47CkBAIC0xODM4LDcgKzE4MzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNo
KE5vZGUmIG5vCiAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAgICAgICAg
ICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgICAgICAgICBpbnZlcnQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgICAg
ICAgICAgdGFrZW4gPSBub3RUYWtlbjsKQEAgLTE4NjYsNyArMTg2Niw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5Q
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgICAgICAgICAgICAgIGlmICh0YWtl
biA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNy
b0Fzc2VtYmxlcjo6WmVybzsKICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0
YWtlbjsKICAgICAgICAgICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKQEAgLTI4NTIsNyAr
Mjg1Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25k
aXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgICAgIGlmICh0YWtlbiA9
PSBuZXh0QmxvY2soKSkgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1i
bGVyOjpaZXJvOwogICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAg
ICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODI3LDcgKzgyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZU9iamUKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpFcXVhbDsKICAgICAKLSAgICBpZiAodGFrZW4gPT0gKG1f
YmxvY2sgKyAxKSkgeworICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBj
b25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWw7CiAgICAgICAgIEJsb2NrSW5kZXgg
dG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CkBAIC04NTcsNyArODU3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZQogCiAgICAgLy8gVGhl
IGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAg
Ly8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQg
dGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KLSAgICBpZiAodGFr
ZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewog
ICAgICAgICBjb25kaXRpb24gPSBKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmRpdGlvbik7CiAgICAg
ICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CkBA
IC0xMjgwLDggKzEyODAsMTEgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBHUFJJbmZvOjpyZWdUMCk7CiAKICAgICBB
U1NFUlQoIW1fY29tcGlsZUluZGV4KTsKLSAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwg
bV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrbV9ibG9jaykKLSAgICAgICAgY29tcGls
ZSgqbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXSk7CisgICAgZm9yIChtX2Jsb2NrID0g
MDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spIHsK
KyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxv
Y2tdLmdldCgpOworICAgICAgICBpZiAoYmxvY2spCisgICAgICAgICAgICBjb21waWxlKCpibG9j
ayk7CisgICAgfQogICAgIGxpbmtCcmFuY2hlcygpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MTI4OSw4ICsxMjkyLDEwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcygpCiB7CiAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrJiBibG9jayA9ICptX2ppdC5n
cmFwaCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhdOwotICAgICAgICBpZiAoIWJsb2NrLmlzT1NSVGFy
Z2V0KQorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBuZWVkIHRvIGNyZWF0ZSBPU1Ig
ZW50cnkgdHJhbXBvbGluZXMgd2hlbiB1c2luZyBlZGdlIGNvZGUKQEAgLTEzMTIsOSArMTMxNywx
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmllcyhMaW5rCiB7CiAgICAgdW5z
aWduZWQgb3NyRW50cnlJbmRleCA9IDA7CiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJ
bmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrJiBibG9jayA9ICptX2ppdC5ncmFwaCgpLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdOwotICAgICAgICBpZiAoYmxvY2suaXNPU1JUYXJnZXQpCi0gICAgICAg
ICAgICBtX2ppdC5ub3RpY2VPU1JFbnRyeShibG9jaywgbV9vc3JFbnRyeUhlYWRzW29zckVudHJ5
SW5kZXgrK10sIGxpbmtCdWZmZXIpOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0
LmdyYXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9qaXQubm90aWNlT1NSRW50cnkoKmJs
b2NrLCBtX29zckVudHJ5SGVhZHNbb3NyRW50cnlJbmRleCsrXSwgbGlua0J1ZmZlcik7CiAgICAg
fQogICAgIEFTU0VSVChvc3JFbnRyeUluZGV4ID09IG1fb3NyRW50cnlIZWFkcy5zaXplKCkpOwog
fQpAQCAtMjg1Niw3ICsyODY0LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmlj
dEVxRm9yQwogICAgICAgICAKICAgICAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxs
IGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgICAgIC8vIElmIHRha2VuIGlzIG5leHQs
IHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9u
IHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCi0gICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayAr
IDEpKSB7CisgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICAgICAg
Y29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsOwogICAgICAgICAgICAgQmxvY2tJ
bmRleCB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47CkBAIC0zMTI2
LDcgKzMxMzQsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOCiAg
ICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7
CiAgICAgCiAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKLSAgICBpZiAodGFrZW4gPT0gKG1fYmxv
Y2sgKyAxKSkgeworICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBpbnZl
cnQgPSB0cnVlOwogICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwogICAgICAgICB0YWtl
biA9IG5vdFRha2VuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNiArMTkyLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7CiAgICAgfQog
ICAgIAorICAgIEJsb2NrSW5kZXggbmV4dEJsb2NrKCkKKyAgICB7CisgICAgICAgIGZvciAoQmxv
Y2tJbmRleCByZXN1bHQgPSBtX2Jsb2NrICsgMTsgOyByZXN1bHQrKykgeworICAgICAgICAgICAg
aWYgKHJlc3VsdCA+PSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTm9CbG9jazsKKyAgICAgICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLm1fYmxv
Y2tzW3Jlc3VsdF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKICAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZUluZGV4LCBEYXRhRm9ybWF0
JiByZXR1cm5Gb3JtYXQpOwogICAgIEZQUlJlZyBmaWxsRG91YmxlKE5vZGVJbmRleCk7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKQEAgLTMwNiw3ICszMTYsMTAgQEAgcHVibGljOgogICAgIC8vIENhbGxl
ZCBvbiBhbiBvcGVyYW5kIG9uY2UgaXQgaGFzIGJlZW4gY29uc3VtZWQgYnkgYSBwYXJlbnQgbm9k
ZS4KICAgICB2b2lkIHVzZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGF0KG5vZGVJbmRleCkudmlydHVhbFJlZ2lz
dGVyKCk7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICBpZiAo
IW5vZGUuaGFzUmVzdWx0KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVy
XTsKIAogICAgICAgICAvLyB1c2UoKSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWUgYmVjb21l
cyBkZWFkLCBhbmQgYW55CkBAIC0xODUyLDcgKzE4NjUsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBpZiAoaGF2ZUVkZ2VDb2RlVG9FbWl0KGRlc3RpbmF0aW9uKSkKICAgICAgICAgICAgIGVt
aXRFZGdlQ29kZShkZXN0aW5hdGlvbik7Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvbiA9PSBtX2Js
b2NrICsgMQorICAgICAgICBpZiAoZGVzdGluYXRpb24gPT0gbmV4dEJsb2NrKCkKICAgICAgICAg
ICAgICYmIGZhbGxUaHJvdWdoTW9kZSA9PSBBdEZhbGxUaHJvdWdoUG9pbnQpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdWYWxpZGF0
ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCisjaWYgREZHX0VOQUJMRShWQUxJREFUSU9OKQorCitjbGFzcyBWYWxpZGF0ZSB7
CitwdWJsaWM6CisgICAgVmFsaWRhdGUoR3JhcGgmIGdyYXBoLCBHcmFwaER1bXBNb2RlIGdyYXBo
RHVtcE1vZGUpCisgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2dyYXBoRHVt
cE1vZGUoZ3JhcGhEdW1wTW9kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgICNkZWZpbmUgVkFM
SURBVEUoY29udGV4dCwgYXNzZXJ0aW9uKSBkbyB7IFwKKyAgICAgICAgaWYgKCEoYXNzZXJ0aW9u
KSkgeyBcCisgICAgICAgICAgICBkYXRhTG9nKCJcblxuXG5BdCAiKTsgXAorICAgICAgICAgICAg
cmVwb3J0VmFsaWRhdGlvbkNvbnRleHQgY29udGV4dDsgXAorICAgICAgICAgICAgZGF0YUxvZygi
OiB2YWxpZGF0aW9uICVzICglczolZCkgZmFpbGVkLlxuIiwgI2Fzc2VydGlvbiwgX19GSUxFX18s
IF9fTElORV9fKTsgXAorICAgICAgICAgICAgZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSgpOyBcCisg
ICAgICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywg
V1RGX1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICAgICAgICAgIENSQVNIKCk7
IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoMCkKKyAgICAKKyAgICAjZGVmaW5lIFZfRVFV
QUwoY29udGV4dCwgbGVmdCwgcmlnaHQpIGRvIHsgXAorICAgICAgICBpZiAobGVmdCAhPSByaWdo
dCkgeyBcCisgICAgICAgICAgICBkYXRhTG9nKCJcblxuXG5BdCAiKTsgXAorICAgICAgICAgICAg
cmVwb3J0VmFsaWRhdGlvbkNvbnRleHQgY29udGV4dDsgXAorICAgICAgICAgICAgZGF0YUxvZygi
OiB2YWxpZGF0aW9uICglcyA9ICIsICNsZWZ0KTsgXAorICAgICAgICAgICAgZHVtcERhdGEobGVm
dCk7IFwKKyAgICAgICAgICAgIGRhdGFMb2coIikgPT0gKCVzID0gIiwgI3JpZ2h0KTsgXAorICAg
ICAgICAgICAgZHVtcERhdGEocmlnaHQpOyBcCisgICAgICAgICAgICBkYXRhTG9nKCIpICglczol
ZCkgZmFpbGVkLlxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorICAgICAgICAgICAgZHVtcEdy
YXBoSWZBcHByb3ByaWF0ZSgpOyBcCisgICAgICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWls
dXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2xlZnQgIiA9PSAi
ICNyaWdodCk7IFwKKyAgICAgICAgICAgIENSQVNIKCk7IFwKKyAgICAgICAgfSBcCisgICAgfSB3
aGlsZSAoMCkKKworICAgIHZvaWQgdmFsaWRhdGUoKQorICAgIHsKKyAgICAgICAgLy8gTkIuIFRo
aXMgY29kZSBpcyBub3Qgd3JpdHRlbiBmb3IgcGVyZm9ybWFuY2UsIHNpbmNlIGl0IGlzIG5vdCBp
bnRlbmRlZCB0byBydW4KKyAgICAgICAgLy8gaW4gcmVsZWFzZSBidWlsZHMuCisgICAgICAgIAor
ICAgICAgICAvLyBWYWxpZGF0ZSByZWYgY291bnRzIGFuZCB1c2VzLgorICAgICAgICBWZWN0b3I8
dW5zaWduZWQ+IG15UmVmQ291bnRzOworICAgICAgICBteVJlZkNvdW50cy5maWxsKDAsIG1fZ3Jh
cGguc2l6ZSgpKTsKKyAgICAgICAgQml0VmVjdG9yIGFjY2VwdGFibGVOb2RlSW5kaWNlczsKKyAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAg
ICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5ub2RlSW5kZXgoaSk7
CisgICAgICAgICAgICAgICAgYWNjZXB0YWJsZU5vZGVJbmRpY2VzLnNldChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dy
YXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBl
ZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFl
ZGdlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBteVJlZkNvdW50c1tlZGdlLmluZGV4KCldKys7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgSSdtIGEg
Rmx1c2gsIFBoYW50b20sIEdldExvY2FsLCBvciBQaGksIG15IGNoaWxkcmVuIHNob3VsZCBoYXNS
ZXN1bHQoKS4KKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFu
dG9tOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAg
ICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5v
ZGVJbmRleCwgZWRnZSksIG1fZ3JhcGhbZWRnZV0uaGFzUmVzdWx0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBCaXRW
ZWN0b3IgcGhpc0luVGhpc0Jsb2NrOworICAgICAgICAgICAgQml0VmVjdG9yIG5vZGVzSW5UaGlz
QmxvY2s7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YmxvY2stPm51bU5vZGVzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBibG9jay0+bm9kZUluZGV4KGkpOworICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUg
PSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdl
bmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IG5vZGVzSW5UaGlzQmxvY2suc2V0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGJs
b2NrLT5pc1BoaUluZGV4KGkpKQorICAgICAgICAgICAgICAgICAgICBwaGlzSW5UaGlzQmxvY2su
c2V0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZUluZGV4KSwgbXlS
ZWZDb3VudHNbbm9kZUluZGV4XSwgbm9kZS5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUp
OyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChu
b2RlLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5k
ZXgsIGVkZ2UpLCBhY2NlcHRhYmxlTm9kZUluZGljZXMuZ2V0KGVkZ2UuaW5kZXgoKSkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmdldChub2RlSW5kZXgp
KTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4KSwgbm9kZS5vcCgpID09IFBo
aSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS5sb2NhbCgp
OworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNo
aWxkcmVuKG5vZGUpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9n
cmFwaC5jaGlsZChub2RlLCBqKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBlZGdlKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaFtlZGdlXS5vcCgpID09IFNldExvY2FsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1bWVu
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0g
Rmx1c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgp
ID09IFBoaSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
cGhpc0luVGhpc0Jsb2NrLmdldChlZGdlLmluZGV4KCkpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZXNJblRoaXNCbG9jay5nZXQoZWRnZS5pbmRleCgpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGVJbmRleCwgZWRnZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoW2VkZ2VdLm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGhbZWRnZV0ub3AoKSA9PSBTZXRBcmd1bWVu
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9ncmFwaFtlZGdlXS5vcCgp
ID09IEZsdXNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIG11c3QgZXhpc3QgYSBwcmVkZWNlc3Nv
ciBibG9jayB0aGF0IGhhcyB0aGlzIG5vZGUgaW5kZXggaW4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gaXRzIHRhaWwgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9j
ay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2stPm1fcHJlZGVj
ZXNzb3JzW2tdXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChCbG9j
aywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJl
dkJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
cHJldk5vZGVJbmRleCA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwp
OworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5v
dCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgorICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9ja0luZGV4LCBibG9jay0+
bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZUluZGV4ICE9IE5vTm9kZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlJiBwcmV2Tm9kZSA9IG1fZ3JhcGhbcHJldk5vZGVJbmRleF07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vz
c29yc1trXSwgcHJldk5vZGVJbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmV2Tm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZUluZGV4KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLm9wKCkgPT0gU2V0TG9j
YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLm9wKCkgPT0g
U2V0QXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2Rl
Lm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZO
b2RlLm9wKCkgPT0gUGhpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2
Tm9kZS5vcCgpID09IEdldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2
Tm9kZUluZGV4ID09IGVkZ2UuaW5kZXgoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9k
ZS5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2Rl
SW5kZXggPSBwcmV2Tm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHByZXZOb2RlSW5kZXggPT0gZWRnZS5pbmRleCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQXQgdGhpcyBwb2ludCBpdCBjYW5ub3QgcmVmZXIgaW50byB0aGlzIGJsb2NrLgorICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNb
a10sIHByZXZOb2RlSW5kZXgpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5pbmRleCgpKSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBmb3VuZCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hv
dWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG5vZGVzSW5UaGlzQmxvY2suZ2V0KG5vZGVJbmRleCkpOworICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgpLCBub2RlLm9wKCkgIT0gUGhpKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2Rl
KTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQo
bm9kZSwgaik7CisgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUlu
ZGV4LCBlZGdlKSwgbm9kZXNJblRoaXNCbG9jay5nZXQobm9kZUluZGV4KSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBHcmFwaER1bXBNb2RlIG1fZ3JhcGhEdW1wTW9kZTsK
KyAgICAKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgeworICAgICAgICBkYXRhTG9nKCJAJXUiLCBub2RlSW5kZXgpOworICAgIH0KKyAg
ICAKKyAgICBlbnVtIEJsb2NrVGFnIHsgQmxvY2sgfTsKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRp
b25Db250ZXh0KEJsb2NrVGFnLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAg
ICBkYXRhTG9nKCJCbG9jayAjJXUiLCBibG9ja0luZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlSW5kZXggbm9kZUluZGV4LCBFZGdlIGVkZ2Up
CisgICAgeworICAgICAgICBkYXRhTG9nKCJAJXUgLT4gJXNAJXUiLCBub2RlSW5kZXgsIHVzZUtp
bmRUb1N0cmluZyhlZGdlLnVzZUtpbmQoKSksIGVkZ2UuaW5kZXgoKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCwgQmxvY2tJbmRleCBzb3VyY2VCbG9ja0luZGV4LCBCbG9ja0luZGV4IGRlc3RpbmF0
aW9uQmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIGRhdGFMb2coInIlZCBpbiBCbG9jayAjJXUg
PC0gIyV1IiwgbG9jYWwsIHNvdXJjZUJsb2NrSW5kZXgsIGRlc3RpbmF0aW9uQmxvY2tJbmRleCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCisgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAg
ICAgIGRhdGFMb2coIkAldSBpbiBCbG9jayAjJXUiLCBub2RlSW5kZXgsIGJsb2NrSW5kZXgpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAorICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGVJbmRleCBleHBl
Y3RlZE5vZGVJbmRleCwgRWRnZSBpbmNvbWluZ0VkZ2UpCisgICAgeworICAgICAgICBkYXRhTG9n
KCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGVJbmRl
eCwgYmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlSW5kZXgsIGluY29taW5nRWRnZS5pbmRleCgpKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wRGF0YSh1bnNpZ25lZCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGRhdGFMb2coIiV1IiwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBH
cmFwaElmQXBwcm9wcmlhdGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGhEdW1wTW9kZSA9
PSBEb250RHVtcEdyYXBoKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhTG9nKCJH
cmFwaCBhdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKCk7Cisg
ICAgfQorfTsKKwordm9pZCB2YWxpZGF0ZShHcmFwaCYgZ3JhcGgsIEdyYXBoRHVtcE1vZGUgZ3Jh
cGhEdW1wTW9kZSkKK3sKKyAgICBWYWxpZGF0ZSB2YWxpZGF0aW9uT2JqZWN0KGdyYXBoLCBncmFw
aER1bXBNb2RlKTsKKyAgICB2YWxpZGF0aW9uT2JqZWN0LnZhbGlkYXRlKCk7Cit9CisKKyNlbmRp
ZiAvLyBERkdfRU5BQkxFKFZBTElEQVRJT04pCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVmFsaWRh
dGVfaAorI2RlZmluZSBERkdWYWxpZGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVt
IEdyYXBoRHVtcE1vZGUgeyBEb250RHVtcEdyYXBoLCBEdW1wR3JhcGggfTsKKworI2lmIERGR19F
TkFCTEUoVkFMSURBVElPTikKK3ZvaWQgdmFsaWRhdGUoR3JhcGgmLCBHcmFwaER1bXBNb2RlID0g
RHVtcEdyYXBoKTsKKyNlbHNlCitpbmxpbmUgdm9pZCB2YWxpZGF0ZShHcmFwaCYsIEdyYXBoRHVt
cE1vZGUgPSBEdW1wR3JhcGgpIHsgfQorI2VuZGlmCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUGhhc2VfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBydW4oKQorICAgIGJvb2wgcnVuKCkKICAgICB7CiAjaWYg
REZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKCJQcmVzZXJ2ZWQgdmFy
czogIik7CkBAIC01NCw2ICs1NCwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgZm9yIChz
aXplX3QgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFj
aGFibGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4
SW5CbG9jaykgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+
YXQoaW5kZXhJbkJsb2NrKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCkBAIC02NiwyMiArNzAsMjEgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSB8fCBub2RlLm9wKCkgPT0gUGhpIHx8IG5vZGUu
b3AoKSA9PSBGbHVzaCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhp
IG5vZGVzIGluIHRoZSBncmFwaCwgcmVmZXJlbmNpbmcKLSAgICAgICAgICAgICAgICAvLyByZXN1
bHRzIGZyb20gcHJpb3IgYmxvY2tzLgotICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0g
R2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGNhbGwgdXNlIG9uIGFs
bCBvZiB0aGUgY3VycmVudCBub2RlJ3MgY2hpbGRyZW4sIHRoZW4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gYWxsb2NhdGUgYSBWaXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8gc28g
aW4gdGhpcwotICAgICAgICAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQg
aXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQotICAgICAgICAgICAgICAgICAgICAvLyBWaXJ0dWFs
UmVnaXN0ZXIgaXMgZnJlZWQsIHRoZW4gaXQgbWF5IGJlIHJldXNlZCBmb3Igbm9kZS4KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENo
aWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7
IGNoaWxkSWR4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uo
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hp
bGQyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGls
ZDMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFzUmVzdWx0KCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBjYWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1
cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCisgICAgICAgICAgICAgICAgLy8gYWxsb2NhdGUg
YSBWaXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8gc28gaW4gdGhpcworICAgICAg
ICAgICAgICAgIC8vIG9yZGVyIHNvIHRoYXQgaWYgYSBjaGlsZCBpcyBvbiBpdHMgbGFzdCB1c2Us
IGFuZCBhCisgICAgICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVkLCB0aGVu
IGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUuZmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hp
bGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNjb3JlQm9hcmQudXNlSWZIYXNSZXN1bHQobV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMigpKTsKKyAgICAg
ICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2VJZkhhc1Jlc3VsdChub2RlLmNoaWxkMygpKTsK
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0
KCkpCkBAIC0xMTQsMTIgKzExNywxNCBAQCBwdWJsaWM6CiAjaWYgREZHX0VOQUJMRShERUJVR19W
RVJCT1NFKQogICAgICAgICBkYXRhTG9nKCJOdW0gY2FsbGVlIHJlZ2lzdGVyczogJXVcbiIsIGNh
bGxlZVJlZ2lzdGVycyk7CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIH07CiAKLXZvaWQgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oR3JhcGgm
IGdyYXBoKQorYm9vbCBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYgZ3Jh
cGgpCiB7Ci0gICAgcnVuUGhhc2U8VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlPihncmFw
aCk7CisgICAgcmV0dXJuIHJ1blBoYXNlPFZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZT4o
Z3JhcGgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmgJKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgR3JhcGg7CiAvLyBmb3IgbG9vay11cCB0YWJsZXMgZm9y
IHRoZSBsaW5lYXIgc2NhbiByZWdpc3RlciBhbGxvY2F0b3IgdGhhdCB0aGUgYmFja2VuZAogLy8g
dXNlcy4KIAotdm9pZCBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYpOwor
Ym9vbCBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFwaCYpOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODU0LDcgKzg1NCw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChT
d2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBkb3VibGUgbGFzdEdDRW5kVGltZSA9IFdURjo6Y3Vy
cmVudFRpbWUoKTsKICAgICBtX2xhc3RHQ0xlbmd0aCA9IGxhc3RHQ0VuZFRpbWUgLSBsYXN0R0NT
dGFydFRpbWU7CiAgICAgSkFWQVNDUklQVENPUkVfR0NfRU5EKCk7Ci0KKyAgICAKICAgICAoKm1f
YWN0aXZpdHlDYWxsYmFjaykoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTg1LDcgKzI1ODUsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRl
RXhlY3V0ZShFeGVjCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVy
YW5kOwogICAgICAgICBpbnQgc3JjID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc0Jvb2xlYW4oIWNhbGxGcmFtZS0+cihzcmMpLmpzVmFsdWUoKS50b0Jvb2xl
YW4oY2FsbEZyYW1lKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFjYWxs
RnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpOwogICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7CiAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gcmVzdWx0
OwogCkBAIC0zOTA1LDcgKzM5MDUsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAg
Ki8KICAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBpbnQgdGFy
Z2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihjb25kKS5q
c1ZhbHVlKCkudG9Cb29sZWFuKGNhbGxGcmFtZSkpIHsKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+
cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJn
ZXQ7CiAgICAgICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwogICAgICAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOwpAQCAtMzkyNSw3ICszOTI1LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoK
ICAgICAgICAgICovCiAgICAgICAgIGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAg
ICAgaW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmICghY2FsbEZyYW1l
LT5yKGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAo
IWNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAg
IHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwogICAgICAg
ICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMzk0Miw3ICszOTQyLDcgQEAgc2tpcF9pZF9j
dXN0b21fc2VsZjoKICAgICAgICAgKi8KICAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVy
YW5kOwogICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaWYg
KGNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGNhbGxGcmFtZSkpIHsKKyAg
ICAgICAgaWYgKGNhbGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAg
ICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
CiAgICAgICAgIH0KQEAgLTM5NTgsNyArMzk1OCw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAg
ICAgICAgICovCiAgICAgICAgIGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAg
aW50IHRhcmdldCA9IHZQQ1syXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGlmICghY2FsbEZyYW1lLT5y
KGNvbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICBpZiAoIWNh
bGxGcmFtZS0+cihjb25kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQ
QyArPSB0YXJnZXQ7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjg1NSw5ICsyODU1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wXwogCiAgICAgSlNWYWx1ZSBzcmMgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1
ZSgpOwogCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
LQotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFzcmMudG9Cb29sZWFuKGNhbGxGcmFt
ZSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKCFzcmMudG9Cb29sZWFuKCkpOwog
ICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQpAQCAtMjg2OCw5ICsyODY2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04oaW50LCBvcF9qdHJ1ZSkKIAogICAgIEpTVmFsdWUgc3JjMSA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2Fs
bEZyYW1lOwotCi0gICAgYm9vbCByZXN1bHQgPSBzcmMxLnRvQm9vbGVhbihjYWxsRnJhbWUpOwor
ICAgIGJvb2wgcmVzdWx0ID0gc3JjMS50b0Jvb2xlYW4oKTsKICAgICBDSEVDS19GT1JfRVhDRVBU
SU9OX0FUX0VORCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDExNDU1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwNyw3ICs1MDcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfbmV3X3JlZ2V4CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbm90KQogewogICAg
IExMSU5UX0JFR0lOKCk7Ci0gICAgTExJTlRfUkVUVVJOKGpzQm9vbGVhbighTExJTlRfT1BfQygy
KS5qc1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKSk7CisgICAgTExJTlRfUkVUVVJOKGpzQm9vbGVh
bighTExJTlRfT1BfQygyKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpKTsKIH0KIAogTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2VxKQpAQCAtMTExMCwxMyArMTExMCwxMyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfam1wX3Njb3BlCiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfanRydWUpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKLSAgICBMTElOVF9CUkFOQ0go
b3BfanRydWUsIExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7CisgICAg
TExJTlRfQlJBTkNIKG9wX2p0cnVlLCBMTElOVF9PUF9DKDEpLmpzVmFsdWUoKS50b0Jvb2xlYW4o
KSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qZmFsc2UpCiB7CiAgICAg
TExJTlRfQkVHSU4oKTsKLSAgICBMTElOVF9CUkFOQ0gob3BfamZhbHNlLCAhTExJTlRfT1BfQygx
KS5qc1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBMTElOVF9CUkFOQ0gob3BfamZhbHNl
LCAhTExJTlRfT1BfQygxKS5qc1ZhbHVlKCkudG9Cb29sZWFuKCkpOwogfQogCiBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfamxlc3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc5Nyw3ICs3OTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmop
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwu
Y2FsbCgpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC50b0Jvb2xlYW4oZXhlYykpCisgICAgICAg
ICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbigpKQogICAgICAgICAgICAgICAgIHJlc3VsdEFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCBmaWx0ZXJJbmRleCsrLCB2KTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoayA9PSBsZW5ndGgpCkBAIC04MTgsNyArODE4LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0
aGlzT2JqKTsKIAogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24s
IGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKTsKLSAgICAgICAg
aWYgKHJlc3VsdC50b0Jvb2xlYW4oZXhlYykpCisgICAgICAgIGlmIChyZXN1bHQudG9Cb29sZWFu
KCkpCiAgICAgICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgZmlsdGVy
SW5kZXgrKywgdik7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0QXJy
YXkpOwpAQCAtOTE3LDcgKzkxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIo
aykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAg
ICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgICAg
ICBpZiAoIXJlc3VsdC50b0Jvb2xlYW4oY2FjaGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpKQor
ICAgICAgICAgICAgaWYgKCFyZXN1bHQudG9Cb29sZWFuKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTkzNCw3ICs5MzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GCiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICAgICAgYm9vbCBwcmVkaWNh
dGVSZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFwcGx5
VGhpcywgZWFjaEFyZ3VtZW50cykudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBib29sIHByZWRp
Y2F0ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBw
bHlUaGlzLCBlYWNoQXJndW1lbnRzKS50b0Jvb2xlYW4oKTsKICAgICAgICAgaWYgKCFwcmVkaWNh
dGVSZXN1bHQpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihmYWxzZSk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTEwMjUsNyArMTAyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQo
MSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0
aGlzT2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7
Ci0gICAgICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbihjYWNoZWRDYWxsLm5ld0NhbGxGcmFt
ZShleGVjKSkpCisgICAgICAgICAgICBpZiAocmVzdWx0LnRvQm9vbGVhbigpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTEwNDIsNyArMTA0Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0YKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgICAgICBi
b29sIHByZWRpY2F0ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRzKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAg
IGJvb2wgcHJlZGljYXRlUmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbigpOwogICAgICAgICBp
ZiAocHJlZGljYXRlUmVzdWx0KSB7CiAgICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4odHJ1
ZSk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTE0NTU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCB2b2lkIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24oCiBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9v
bGVhbk9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9u
KGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUo
KSk7Ci0gICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNCb29s
ZWFuKGFyZ3MuYXQoMCkudG9Cb29sZWFuKGV4ZWMpKSk7CisgICAgb2JqLT5zZXRJbnRlcm5hbFZh
bHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFuKGFyZ3MuYXQoMCkudG9Cb29sZWFuKCkp
KTsKICAgICByZXR1cm4gb2JqOwogfQogCkBAIC02OCw3ICs2OCw3IEBAIENvbnN0cnVjdFR5cGUg
Qm9vbGVhbkNvbnN0cnVjdG9yOjpnZXRDb24KIC8vIEVDTUEgMTUuNi4xCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihleGVjLT5hcmd1
bWVudCgwKS50b0Jvb2xlYW4oZXhlYykpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oKSkpOwogfQogCiBDYWxsVHlwZSBC
b29sZWFuQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0
YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAx
MTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQmFz
aWMgY29udmVyc2lvbnMuCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdG9Qcmlt
aXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAgICAgICAg
IGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1Zh
bHVlJikgY29uc3Q7Ci0gICAgICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0Owor
ICAgICAgICBib29sIHRvQm9vbGVhbigpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNv
bnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMiwxMSArNDIyLDYgQEAgdm9pZCBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICBnZXRDbGFzc1Byb3BlcnR5TmFt
ZXMoZXhlYywgb2JqZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAK
LWJvb2wgSlNPYmplY3Q6OnRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdAotewotICAgIHJldHVy
biB0cnVlOwotfQotCiBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKIHsKICAgICBKU1ZhbHVlIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZl
ck51bWJlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQ
cmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25z
dDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSop
IGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZyogdG9TdHJpbmcoRXhl
Y1N0YXRlKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNyBAQCBib29s
IEpTU3RyaW5nOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIEpTU3RyaW5nOjp0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QKK2Jvb2wgSlNT
dHJpbmc6OnRvQm9vbGVhbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGVuZ3RoOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKICAgICAgICAgSlNWYWx1ZSB0b1By
aW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CiAgICAgICAg
IGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1Zh
bHVlJikgY29uc3Q7CiAgICAgICAgIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCopIGNvbnN0OwogICAgICAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikg
Y29uc3Q7CkBAIC00MzUsMjMgKzQzNSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGlu
ZSBib29sIGlzSlNTdHJpbmcoSlNWYWx1ZSB2KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIHYuYXND
ZWxsKCktPmNsYXNzSW5mbygpID09ICZKU1N0cmluZzo6c19pbmZvOyB9CiAKLSAgICBpbmxpbmUg
Ym9vbCBKU0NlbGw6OnRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgaW5saW5l
IGJvb2wgSlNDZWxsOjp0b0Jvb2xlYW4oKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzU3Ry
aW5nKCkpIAotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4o
dGhpcyktPnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBKU1N0cmluZyo+KHRoaXMpLT50b0Jvb2xlYW4oKTsKICAgICAgICAgcmV0dXJuICFzdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAg
ICAgLy8gLS0tIEpTVmFsdWUgaW5saW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg
ICAgCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjp0b0Jvb2xlYW4oKSBjb25zdAogICAgIHsK
ICAgICAgICAgaWYgKGlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybiBhc0ludDMyKCk7CiAg
ICAgICAgIGlmIChpc0RvdWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGFzRG91YmxlKCkgPiAw
LjAgfHwgYXNEb3VibGUoKSA8IDAuMDsgLy8gZmFsc2UgZm9yIE5hTgogICAgICAgICBpZiAoaXND
ZWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gYXNDZWxsKCktPnRvQm9vbGVhbihleGVjKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc0NlbGwoKS0+dG9Cb29sZWFuKCk7CiAgICAgICAgIHJldHVybiBp
c1RydWUoKTsgLy8gZmFsc2UsIG51bGwsIGFuZCB1bmRlZmluZWQgYWxsIGNvbnZlcnQgdG8gZmFs
c2UuCiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5o
CShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRp
dmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKICAgICAgICAgYm9vbCBnZXRQcmltaXRpdmVO
dW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKTsKIAotICAgICAgICBi
b29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgYm9vbCB0b0Jvb2xlYW4o
KSBjb25zdDsKIAogICAgICAgICAvLyB0b051bWJlciBjb252ZXJzaW9uIGlzIGV4cGVjdGVkIHRv
IGJlIHNpZGUgZWZmZWN0IGZyZWUgaWYgYW4gZXhjZXB0aW9uIGhhcwogICAgICAgICAvLyBiZWVu
IHNldCBpbiB0aGUgRXhlY1N0YXRlIGFscmVhZHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTQ1
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCwxNCArMjE0LDE0IEBAIHN0YXRpYyBib29sIHRvUHJv
cGVydHlEZXNjcmlwdG9yKEV4ZWNTdGEKIAogICAgIFByb3BlcnR5U2xvdCBlbnVtZXJhYmxlU2xv
dChkZXNjcmlwdGlvbik7CiAgICAgaWYgKGRlc2NyaXB0aW9uLT5nZXRQcm9wZXJ0eVNsb3QoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUsIGVudW1lcmFibGVTbG90KSkgewot
ICAgICAgICBkZXNjLnNldEVudW1lcmFibGUoZW51bWVyYWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpLnRvQm9vbGVhbihleGVjKSk7CisgICAg
ICAgIGRlc2Muc2V0RW51bWVyYWJsZShlbnVtZXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSkudG9Cb29sZWFuKCkpOwogICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CiAgICAgUHJvcGVydHlTbG90IGNvbmZpZ3VyYWJsZVNsb3QoZGVzY3JpcHRpb24pOwogICAgIGlm
IChkZXNjcmlwdGlvbi0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5jb25maWd1cmFibGUsIGNvbmZpZ3VyYWJsZVNsb3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0Q29u
ZmlndXJhYmxlKGNvbmZpZ3VyYWJsZVNsb3QuZ2V0VmFsdWUoZXhlYywgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmNvbmZpZ3VyYWJsZSkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgZGVzYy5zZXRD
b25maWd1cmFibGUoY29uZmlndXJhYmxlU2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29uZmlndXJhYmxlKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yMzYs
NyArMjM2LDcgQEAgc3RhdGljIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YQogCiAg
ICAgUHJvcGVydHlTbG90IHdyaXRhYmxlU2xvdChkZXNjcmlwdGlvbik7CiAgICAgaWYgKGRlc2Ny
aXB0aW9uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRh
YmxlLCB3cml0YWJsZVNsb3QpKSB7Ci0gICAgICAgIGRlc2Muc2V0V3JpdGFibGUod3JpdGFibGVT
bG90LmdldFZhbHVlKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSkudG9Cb29s
ZWFuKGV4ZWMpKTsKKyAgICAgICAgZGVzYy5zZXRXcml0YWJsZSh3cml0YWJsZVNsb3QuZ2V0VmFs
dWUoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKS50b0Jvb2xlYW4oKSk7CiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0OSw5ICsyNDksOSBAQCB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRl
CiAgICAgYXNSZWdFeHBDb25zdHJ1Y3RvcihiYXNlT2JqZWN0KS0+c2V0SW5wdXQoZXhlYywgdmFs
dWUudG9TdHJpbmcoZXhlYykpOwogfQogCi12b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGls
aW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Cit2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGFzUmVnRXhwQ29uc3RydWN0b3Io
YmFzZU9iamVjdCktPnNldE11bHRpbGluZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworICAgIGFz
UmVnRXhwQ29uc3RydWN0b3IoYmFzZU9iamVjdCktPnNldE11bHRpbGluZSh2YWx1ZS50b0Jvb2xl
YW4oKSk7CiB9CiAKIC8vIEVDTUEgMTUuMTAuNApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDcsMTEgKzE0NywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHJlZ0V4cFByb3RvCiAKICAgICBjaGFyIHBvc3RmaXhbNV0gPSB7ICcvJywgMCwgMCwgMCwg
MCB9OwogICAgIGludCBpbmRleCA9IDE7Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHRo
aXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS50b0Jvb2xl
YW4oKSkKICAgICAgICAgcG9zdGZpeFtpbmRleCsrXSA9ICdnJzsKLSAgICBpZiAodGhpc09iamVj
dC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pZ25vcmVDYXNlKS50b0Jvb2xlYW4o
ZXhlYykpCisgICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuaWdub3JlQ2FzZSkudG9Cb29sZWFuKCkpCiAgICAgICAgIHBvc3RmaXhbaW5kZXgrK10gPSAn
aSc7Ci0gICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bXVsdGlsaW5lKS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHRoaXNPYmplY3QtPmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKS50b0Jvb2xlYW4oKSkKICAgICAgICAg
cG9zdGZpeFtpbmRleF0gPSAnbSc7CiAgICAgVVN0cmluZyBzb3VyY2UgPSB0aGlzT2JqZWN0LT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZSkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwogICAgIC8vIElmIHNvdXJjZSBpcyBlbXB0eSwgdXNlICIvKD86KS8iIHRvIGF2
b2lkIGNvbGxpZGluZyB3aXRoIGNvbW1lbnQgc3ludGF4CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biAxMTU0MTApCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw1MyBAQAorMjAxMi0wNC0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmlj
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0
NTUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSlNW
YWx1ZTo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSopIC0+IEpTVmFsdWU6OnRvQm9vbGVhbigpCisgICAg
ICAgIAorICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2Ugbm8gbmV3IGJlaGF2aW9yLgorCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxl
RXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RhdGFWaWV3Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERh
dGFWaWV3TWVtYmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXRE
ZXZpY2VNb3Rpb25FdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEZXZpY2VPcmllbnRh
dGlvbkV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGV2aWNlT3JpZW50YXRp
b25FdmVudDo6aW5pdERldmljZU9yaWVudGF0aW9uRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRGljdGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnk6OmNv
bnZlcnRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaXJlY3RvcnlFbnRyeUN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RpcmVjdG9yeUVudHJ5OjpnZXRGaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRGlyZWN0b3J5RW50cnk6OmdldERpcmVjdG9yeSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNEaXJlY3RvcnlFbnRyeVN5bmNDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0RmxhZ3MpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0Vs
ZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhv
c3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6
OnNob3dDb250ZXh0TWVudSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlSW5pdE1lc3NhZ2VFdmVudCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uTWF0cml4KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1M
SHR0cFJlcXVlc3Q6Om9wZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3Bv
aW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAg
ICAgICAgKEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGwpOgorICAgICAgICAoR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbik6CisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAqIGJyaWRn
ZS9jL2NfdXRpbGl0eS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVU
b05QVmFyaWFudCk6CisgICAgICAgICogYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW06CisgICAg
ICAgIChKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iamVjdCk6CisKIDIwMTItMDQtMTcg
IERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21p
dW1dIEFkZCBUZXh0dXJlVXBsb2FkZXIgd2hpY2ggYWxsb3dzIHVzIHRvIHVzZSBwZXJzaXN0ZW50
IEdDM0Qgc3RhdGUgZm9yIHRleHR1cmUgdXBsb2Fkcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjQsNyArNjQsNyBAQCBib29sIEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFu
ZGxlCiAgICAgICAgIC8vIFRoZXJlZm9yZSBhbiBleGNlcHRpb24gYW5kIHJldHVybmluZyB0cnVl
IGFyZSB0aGUgc2FtZSB0aGluZyAtIHNvLCByZXR1cm4gdHJ1ZSBvbiBhbiBleGNlcHRpb24KICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQudG9Cb29sZWFuKGV4
ZWMpOworICAgIHJldHVybiByZXN1bHQudG9Cb29sZWFuKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlz
aW9uIDExNDU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQwLDcgKzY0MCw3IEBAIEpTVmFsdWUgSlNET01X
aW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoRXgKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExp
c3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0
ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBleGVjLT5hcmd1bWVudCgy
KS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih1c3RyaW5n
VG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBm
YWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKCkp
OwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC02NTQsNyArNjU0LDcgQEAgSlNW
YWx1ZSBKU0RPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcgogICAgIGlmICghbGlzdGVuZXIu
aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCkt
PnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0
KCksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5yZW1v
dmVFdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09i
amVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBl
eGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVZpZXdDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVZpZXdD
dXN0b20uY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RhdGFWaWV3Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBz
dGF0aWMgSlNWYWx1ZSBnZXREYXRhVmlld01lbWJlcihFeGVjU3RhCiAKICAgICBib29sIGxpdHRs
ZUVuZGlhbiA9IGZhbHNlOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxICYmICh0
eXBlID09IEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMyIHx8IHR5cGUgPT0gQWNjZXNzRGF0
YVZpZXdNZW1iZXJBc0Zsb2F0NjQpKSB7Ci0gICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+
YXJndW1lbnQoMSkudG9Cb29sZWFuKCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRD
dXN0b20uY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDgg
KzE2NSw4IEBAIEpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW50ZXJ2YWwoRXgKIEpTVmFs
dWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlvbkV2ZW50KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICBib29sIGJ1YmJs
ZXMgPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgYm9vbCBjYW5jZWxh
YmxlID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOworICAgIGJvb2wgYnViYmxl
cyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbigpOworICAgIGJvb2wgY2FuY2VsYWJsZSA9
IGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbigpOwogCiAgICAgLy8gSWYgYW55IG9mIHRoZSBw
YXJhbWV0ZXJzIGFyZSBudWxsIG9yIHVuZGVmaW5lZCwgbWFyayB0aGVtIGFzIG5vdCBwcm92aWRl
ZC4KICAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgc3RhbmRhcmQgSmF2YVNjcmlwdCBjb252ZXJz
aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VPcmllbnRhdGlv
bkV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw4ICs3MSw4IEBAIEpTVmFsdWUgSlNEZXZpY2VP
cmllbnRhdGlvbkV2ZW50OjphYnNvbHUKIEpTVmFsdWUgSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50
Ojppbml0RGV2aWNlT3JpZW50YXRpb25FdmVudChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY29u
c3QgU3RyaW5nJiB0eXBlID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgYm9vbCBidWJibGVzID0gZXhlYy0+YXJndW1l
bnQoMSkudG9Cb29sZWFuKGV4ZWMpOwotICAgIGJvb2wgY2FuY2VsYWJsZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDIpLnRvQm9vbGVhbihleGVjKTsKKyAgICBib29sIGJ1YmJsZXMgPSBleGVjLT5hcmd1bWVu
dCgxKS50b0Jvb2xlYW4oKTsKKyAgICBib29sIGNhbmNlbGFibGUgPSBleGVjLT5hcmd1bWVudCgy
KS50b0Jvb2xlYW4oKTsKICAgICAvLyBJZiBhbHBoYSwgYmV0YSBvciBnYW1tYSBhcmUgbnVsbCBv
ciB1bmRlZmluZWQsIG1hcmsgdGhlbSBhcyBub3QgcHJvdmlkZWQuCiAgICAgLy8gT3RoZXJ3aXNl
LCB1c2UgdGhlIHN0YW5kYXJkIEphdmFTY3JpcHQgY29udmVyc2lvbi4KICAgICBib29sIGFscGhh
UHJvdmlkZWQgPSAhZXhlYy0+YXJndW1lbnQoMykuaXNVbmRlZmluZWRPck51bGwoKTsKQEAgLTgy
LDcgKzgyLDcgQEAgSlNWYWx1ZSBKU0RldmljZU9yaWVudGF0aW9uRXZlbnQ6OmluaXREZQogICAg
IGJvb2wgZ2FtbWFQcm92aWRlZCA9ICFleGVjLT5hcmd1bWVudCg1KS5pc1VuZGVmaW5lZE9yTnVs
bCgpOwogICAgIGRvdWJsZSBnYW1tYSA9IGV4ZWMtPmFyZ3VtZW50KDUpLnRvTnVtYmVyKGV4ZWMp
OwogICAgIGJvb2wgYWJzb2x1dGVQcm92aWRlZCA9ICFleGVjLT5hcmd1bWVudCg1KS5pc1VuZGVm
aW5lZE9yTnVsbCgpOwotICAgIGJvb2wgYWJzb2x1dGUgPSBleGVjLT5hcmd1bWVudCg2KS50b0Jv
b2xlYW4oZXhlYyk7CisgICAgYm9vbCBhYnNvbHV0ZSA9IGV4ZWMtPmFyZ3VtZW50KDYpLnRvQm9v
bGVhbigpOwogICAgIFJlZlB0cjxEZXZpY2VPcmllbnRhdGlvbj4gb3JpZW50YXRpb24gPSBEZXZp
Y2VPcmllbnRhdGlvbjo6Y3JlYXRlKGFscGhhUHJvdmlkZWQsIGFscGhhLCBiZXRhUHJvdmlkZWQs
IGJldGEsIGdhbW1hUHJvdmlkZWQsIGdhbW1hLCBhYnNvbHV0ZVByb3ZpZGVkLCBhYnNvbHV0ZSk7
CiAgICAgRGV2aWNlT3JpZW50YXRpb25FdmVudCogaW1wID0gc3RhdGljX2Nhc3Q8RGV2aWNlT3Jp
ZW50YXRpb25FdmVudCo+KGltcGwoKSk7CiAgICAgaW1wLT5pbml0RGV2aWNlT3JpZW50YXRpb25F
dmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlLCBvcmllbnRhdGlvbi5nZXQoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAJKHJldmlzaW9u
IDExNDU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDkgKzYwLDkgQEAgSlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0
eVJlc3VsdCBKU0RpY3RpbwogICAgIHJldHVybiBQcm9wZXJ0eUZvdW5kOwogfQogCi12b2lkIEpT
RGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCYgcmVzdWx0KQordm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUq
LCBKU1ZhbHVlIHZhbHVlLCBib29sJiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0ID0gdmFsdWUudG9C
b29sZWFuKGV4ZWMpOworICAgIHJlc3VsdCA9IHZhbHVlLnRvQm9vbGVhbigpOwogfQogCiB2b2lk
IEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSwgaW50JiByZXN1bHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpcmVj
dG9yeUVudHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RpcmVjdG9yeUVudHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaXJlY3RvcnlFbnRyeUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDkgKzY2LDkgQEAgSlNWYWx1ZSBKU0RpcmVjdG9yeUVudHJ5OjpnZXRG
aWxlKEV4ZWNTdAogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMSku
Z2V0T2JqZWN0KCk7CiAgICAgICAgIGZsYWdzID0gV2ViS2l0RmxhZ3M6OmNyZWF0ZSgpOwogICAg
ICAgICBKU1ZhbHVlIGpzQ3JlYXRlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVj
LCAiY3JlYXRlIikpOwotICAgICAgICBmbGFncy0+c2V0Q3JlYXRlKGpzQ3JlYXRlLnRvQm9vbGVh
bihleGVjKSk7CisgICAgICAgIGZsYWdzLT5zZXRDcmVhdGUoanNDcmVhdGUudG9Cb29sZWFuKCkp
OwogICAgICAgICBKU1ZhbHVlIGpzRXhjbHVzaXZlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRp
ZmllcihleGVjLCAiZXhjbHVzaXZlIikpOwotICAgICAgICBmbGFncy0+c2V0RXhjbHVzaXZlKGpz
RXhjbHVzaXZlLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgIGZsYWdzLT5zZXRFeGNsdXNpdmUo
anNFeGNsdXNpdmUudG9Cb29sZWFuKCkpOwogICAgIH0KICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTE0LDkgKzExNCw5IEBA
IEpTVmFsdWUgSlNEaXJlY3RvcnlFbnRyeTo6Z2V0RGlyZWN0b3J5KEUKICAgICAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDEpLmdldE9iamVjdCgpOwogICAgICAgICBmbGFn
cyA9IFdlYktpdEZsYWdzOjpjcmVhdGUoKTsKICAgICAgICAgSlNWYWx1ZSBqc0NyZWF0ZSA9IG9i
amVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImNyZWF0ZSIpKTsKLSAgICAgICAgZmxh
Z3MtPnNldENyZWF0ZShqc0NyZWF0ZS50b0Jvb2xlYW4oZXhlYykpOworICAgICAgICBmbGFncy0+
c2V0Q3JlYXRlKGpzQ3JlYXRlLnRvQm9vbGVhbigpKTsKICAgICAgICAgSlNWYWx1ZSBqc0V4Y2x1
c2l2ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImV4Y2x1c2l2ZSIpKTsK
LSAgICAgICAgZmxhZ3MtPnNldEV4Y2x1c2l2ZShqc0V4Y2x1c2l2ZS50b0Jvb2xlYW4oZXhlYykp
OworICAgICAgICBmbGFncy0+c2V0RXhjbHVzaXZlKGpzRXhjbHVzaXZlLnRvQm9vbGVhbigpKTsK
ICAgICB9CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGlyZWN0b3J5
RW50cnlTeW5jQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RpcmVjdG9yeUVudHJ5U3luY0N1c3RvbS5jcHAJKHJldmlzaW9uIDExNDU1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGlyZWN0b3J5RW50cnlTeW5jQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxXZWJL
aXRGbGFncz4gZ2V0RmxhZ3MoCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFyZ3VtZW50LmdldE9i
amVjdCgpOwogICAgIGZsYWdzID0gV2ViS2l0RmxhZ3M6OmNyZWF0ZSgpOwogICAgIEpTVmFsdWUg
anNDcmVhdGUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJjcmVhdGUiKSk7
Ci0gICAgZmxhZ3MtPnNldENyZWF0ZShqc0NyZWF0ZS50b0Jvb2xlYW4oZXhlYykpOworICAgIGZs
YWdzLT5zZXRDcmVhdGUoanNDcmVhdGUudG9Cb29sZWFuKCkpOwogICAgIEpTVmFsdWUganNFeGNs
dXNpdmUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJleGNsdXNpdmUiKSk7
Ci0gICAgZmxhZ3MtPnNldEV4Y2x1c2l2ZShqc0V4Y2x1c2l2ZS50b0Jvb2xlYW4oZXhlYykpOwor
ICAgIGZsYWdzLT5zZXRFeGNsdXNpdmUoanNFeGNsdXNpdmUudG9Cb29sZWFuKCkpOwogICAgIHJl
dHVybiBmbGFnczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
Q2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDExNDU1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywyMiArNTMsMjIgQEAgSlNWYWx1ZSBKU0hUTUxDYW52
YXNFbGVtZW50OjpnZXRDb250ZXh0KAogICAgICAgICAgICAgSlNPYmplY3QqIGpzQXR0cnMgPSBl
eGVjLT5hcmd1bWVudCgxKS5nZXRPYmplY3QoKTsKICAgICAgICAgICAgIElkZW50aWZpZXIgYWxw
aGEoZXhlYywgImFscGhhIik7CiAgICAgICAgICAgICBpZiAoanNBdHRycy0+aGFzUHJvcGVydHko
ZXhlYywgYWxwaGEpKQotICAgICAgICAgICAgICAgIHdlYkdMQXR0cnMtPnNldEFscGhhKGpzQXR0
cnMtPmdldChleGVjLCBhbHBoYSkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICB3
ZWJHTEF0dHJzLT5zZXRBbHBoYShqc0F0dHJzLT5nZXQoZXhlYywgYWxwaGEpLnRvQm9vbGVhbigp
KTsKICAgICAgICAgICAgIElkZW50aWZpZXIgZGVwdGgoZXhlYywgImRlcHRoIik7CiAgICAgICAg
ICAgICBpZiAoanNBdHRycy0+aGFzUHJvcGVydHkoZXhlYywgZGVwdGgpKQotICAgICAgICAgICAg
ICAgIHdlYkdMQXR0cnMtPnNldERlcHRoKGpzQXR0cnMtPmdldChleGVjLCBkZXB0aCkudG9Cb29s
ZWFuKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICB3ZWJHTEF0dHJzLT5zZXREZXB0aChqc0F0dHJz
LT5nZXQoZXhlYywgZGVwdGgpLnRvQm9vbGVhbigpKTsKICAgICAgICAgICAgIElkZW50aWZpZXIg
c3RlbmNpbChleGVjLCAic3RlbmNpbCIpOwogICAgICAgICAgICAgaWYgKGpzQXR0cnMtPmhhc1By
b3BlcnR5KGV4ZWMsIHN0ZW5jaWwpKQotICAgICAgICAgICAgICAgIHdlYkdMQXR0cnMtPnNldFN0
ZW5jaWwoanNBdHRycy0+Z2V0KGV4ZWMsIHN0ZW5jaWwpLnRvQm9vbGVhbihleGVjKSk7CisgICAg
ICAgICAgICAgICAgd2ViR0xBdHRycy0+c2V0U3RlbmNpbChqc0F0dHJzLT5nZXQoZXhlYywgc3Rl
bmNpbCkudG9Cb29sZWFuKCkpOwogICAgICAgICAgICAgSWRlbnRpZmllciBhbnRpYWxpYXMoZXhl
YywgImFudGlhbGlhcyIpOwogICAgICAgICAgICAgaWYgKGpzQXR0cnMtPmhhc1Byb3BlcnR5KGV4
ZWMsIGFudGlhbGlhcykpCi0gICAgICAgICAgICAgICAgd2ViR0xBdHRycy0+c2V0QW50aWFsaWFz
KGpzQXR0cnMtPmdldChleGVjLCBhbnRpYWxpYXMpLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAg
ICAgICAgICAgd2ViR0xBdHRycy0+c2V0QW50aWFsaWFzKGpzQXR0cnMtPmdldChleGVjLCBhbnRp
YWxpYXMpLnRvQm9vbGVhbigpKTsKICAgICAgICAgICAgIElkZW50aWZpZXIgcHJlbXVsdGlwbGll
ZEFscGhhKGV4ZWMsICJwcmVtdWx0aXBsaWVkQWxwaGEiKTsKICAgICAgICAgICAgIGlmIChqc0F0
dHJzLT5oYXNQcm9wZXJ0eShleGVjLCBwcmVtdWx0aXBsaWVkQWxwaGEpKQotICAgICAgICAgICAg
ICAgIHdlYkdMQXR0cnMtPnNldFByZW11bHRpcGxpZWRBbHBoYShqc0F0dHJzLT5nZXQoZXhlYywg
cHJlbXVsdGlwbGllZEFscGhhKS50b0Jvb2xlYW4oZXhlYykpOworICAgICAgICAgICAgICAgIHdl
YkdMQXR0cnMtPnNldFByZW11bHRpcGxpZWRBbHBoYShqc0F0dHJzLT5nZXQoZXhlYywgcHJlbXVs
dGlwbGllZEFscGhhKS50b0Jvb2xlYW4oKSk7CiAgICAgICAgICAgICBJZGVudGlmaWVyIHByZXNl
cnZlRHJhd2luZ0J1ZmZlcihleGVjLCAicHJlc2VydmVEcmF3aW5nQnVmZmVyIik7CiAgICAgICAg
ICAgICBpZiAoanNBdHRycy0+aGFzUHJvcGVydHkoZXhlYywgcHJlc2VydmVEcmF3aW5nQnVmZmVy
KSkKLSAgICAgICAgICAgICAgICB3ZWJHTEF0dHJzLT5zZXRQcmVzZXJ2ZURyYXdpbmdCdWZmZXIo
anNBdHRycy0+Z2V0KGV4ZWMsIHByZXNlcnZlRHJhd2luZ0J1ZmZlcikudG9Cb29sZWFuKGV4ZWMp
KTsKKyAgICAgICAgICAgICAgICB3ZWJHTEF0dHJzLT5zZXRQcmVzZXJ2ZURyYXdpbmdCdWZmZXIo
anNBdHRycy0+Z2V0KGV4ZWMsIHByZXNlcnZlRHJhd2luZ0J1ZmZlcikudG9Cb29sZWFuKCkpOwog
ICAgICAgICB9CiAgICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3Rv
ckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw5ICsxMTQsOSBA
QCBKU1ZhbHVlIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29uCiAgICAgICAgICAgICBD
b250ZXh0TWVudUFjdGlvbiB0eXBlZElkID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVBY3Rpb24+
KENvbnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWcgKyBpZC50b0ludDMyKGV4ZWMpKTsKICAgICAg
ICAgICAgIENvbnRleHRNZW51SXRlbSogbWVudUl0ZW0gPSBuZXcgQ29udGV4dE1lbnVJdGVtKCh0
eXBlU3RyaW5nID09ICJjaGVja2JveCIgPyBDaGVja2FibGVBY3Rpb25UeXBlIDogQWN0aW9uVHlw
ZSksIHR5cGVkSWQsIHVzdHJpbmdUb1N0cmluZyhsYWJlbC50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpKTsKICAgICAgICAgICAgIGlmICghZW5hYmxlZC5pc1VuZGVmaW5lZCgpKQotICAgICAg
ICAgICAgICAgIG1lbnVJdGVtLT5zZXRFbmFibGVkKGVuYWJsZWQudG9Cb29sZWFuKGV4ZWMpKTsK
KyAgICAgICAgICAgICAgICBtZW51SXRlbS0+c2V0RW5hYmxlZChlbmFibGVkLnRvQm9vbGVhbigp
KTsKICAgICAgICAgICAgIGlmICghY2hlY2tlZC5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAg
ICAgIG1lbnVJdGVtLT5zZXRDaGVja2VkKGNoZWNrZWQudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAg
ICAgICAgICAgICBtZW51SXRlbS0+c2V0Q2hlY2tlZChjaGVja2VkLnRvQm9vbGVhbigpKTsKICAg
ICAgICAgICAgIGl0ZW1zLmFwcGVuZChtZW51SXRlbSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw4ICsxMDMsOCBA
QCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50Ojpwb3J0cyhFeGVjU3RhdGUqCiBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGhhbmRsZUluaXRNZXNzYWdlRXZlbnQoSlNNZXNzYWdlRXZlbnQqIGpzRXZlbnQsIEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IFVTdHJpbmcmIHR5cGVBcmcgPSBleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgYm9vbCBjYW5C
dWJibGVBcmcgPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgYm9vbCBj
YW5jZWxhYmxlQXJnID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOworICAgIGJv
b2wgY2FuQnViYmxlQXJnID0gZXhlYy0+YXJndW1lbnQoMSkudG9Cb29sZWFuKCk7CisgICAgYm9v
bCBjYW5jZWxhYmxlQXJnID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKCk7CiAgICAgY29u
c3QgVVN0cmluZyYgb3JpZ2luQXJnID0gZXhlYy0+YXJndW1lbnQoNCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwogICAgIGNvbnN0IFVTdHJpbmcmIGxhc3RFdmVudElkQXJnID0gZXhlYy0+
YXJndW1lbnQoNSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIERPTVdpbmRvdyog
c291cmNlQXJnID0gdG9ET01XaW5kb3coZXhlYy0+YXJndW1lbnQoNikpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTE0NTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MDksNyArNjA5LDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRy
aXgoRAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgICAgICAKLSAgICBib29sIHRyYW5zcG9zZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICBib29sIHRyYW5zcG9zZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvQm9vbGVhbigpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBS
ZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBKU1ZhbHVl
IEpTWE1MSHR0cFJlcXVlc3Q6Om9wZW4oRXhlY1N0YXRlCiAKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsKLSAgICAgICAgYm9v
bCBhc3luYyA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgYm9v
bCBhc3luYyA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbigpOwogCiAgICAgICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPj0gNCAmJiAhZXhlYy0+YXJndW1lbnQoMykuaXNVbmRlZmlu
ZWQoKSkgewogICAgICAgICAgICAgU3RyaW5nIHVzZXIgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxD
aGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgzKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpoYXNC
cmVha3BvaW50KGluCiAgICAgICAgIC8vIEFuIGVycm9uZW91cyBjb25kaXRpb24gY291bnRzIGFz
ICJmYWxzZSIuCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3Vs
dC50b0Jvb2xlYW4obV9jdXJyZW50Q2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpKTsKKyAgICByZXR1cm4gcmVzdWx0LnRvQm9vbGVhbigpOwogfQogCiB2
b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjbGVhckJyZWFrcG9pbnRzKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZp
c2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIEVORAogICAgIEpT
VmFsdWUgbGlzdGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBpZiAoIWxpc3RlbmVyLmlz
T2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgaW1wbC0+JHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNT
dHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSwgSlNF
dmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCAkd3JhcHBlck9iamVjdCwg
ZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkkcGFzc1JlZlB0ckhhbmRsaW5nLCBleGVjLT5hcmd1
bWVudCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwtPiR7ZnVuY3Rpb25OYW1lfUV2ZW50
TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxp
c3RlbmVyKSwgJHdyYXBwZXJPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpJHBhc3NS
ZWZQdHJIYW5kbGluZywgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiBFTkQKICAgICByZXR1cm4gQEdlbmVy
YXRlRXZlbnRMaXN0ZW5lckltcGw7CkBAIC0xODY3LDYgKzE4NjcsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogCiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgInZvaWQgJHtwdXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oZXhlYyk7XG4iKTsKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrU2Vj
dXJpdHkifSAmJiAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
RG9Ob3RDaGVja1NlY3VyaXR5In0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
JGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKQEAgLTI4NjksNyArMjg3MCw3IEBAIHN1
YiBKU1ZhbHVlVG9OYXRpdmUKICAgICBteSAkY29uZGl0aW9uYWwgPSAkc2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifTsKICAgICBteSAkdHlwZSA9ICRjb2RlR2Vu
ZXJhdG9yLT5TdHJpcE1vZHVsZSgkc2lnbmF0dXJlLT50eXBlKTsKIAotICAgIHJldHVybiAiJHZh
bHVlLnRvQm9vbGVhbihleGVjKSIgaWYgJHR5cGUgZXEgImJvb2xlYW4iOworICAgIHJldHVybiAi
JHZhbHVlLnRvQm9vbGVhbigpIiBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuICIk
dmFsdWUudG9OdW1iZXIoZXhlYykiIGlmICR0eXBlIGVxICJkb3VibGUiOwogICAgIHJldHVybiAi
JHZhbHVlLnRvRmxvYXQoZXhlYykiIGlmICR0eXBlIGVxICJmbG9hdCI7CiAgICAgcmV0dXJuICIk
dmFsdWUudG9JbnQzMihleGVjKSIgaWYgJHR5cGUgZXEgImxvbmciIG9yICR0eXBlIGVxICJzaG9y
dCI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAJKHJldmlzaW9uIDEx
NDU1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChFeGVj
U3RhdGUqIAogICAgIH0gZWxzZSBpZiAodmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICBET1VC
TEVfVE9fTlBWQVJJQU5UKHZhbHVlLnRvTnVtYmVyKGV4ZWMpLCAqcmVzdWx0KTsKICAgICB9IGVs
c2UgaWYgKHZhbHVlLmlzQm9vbGVhbigpKSB7Ci0gICAgICAgIEJPT0xFQU5fVE9fTlBWQVJJQU5U
KHZhbHVlLnRvQm9vbGVhbihleGVjKSwgKnJlc3VsdCk7CisgICAgICAgIEJPT0xFQU5fVE9fTlBW
QVJJQU5UKHZhbHVlLnRvQm9vbGVhbigpLCAqcmVzdWx0KTsKICAgICB9IGVsc2UgaWYgKHZhbHVl
LmlzTnVsbCgpKSB7CiAgICAgICAgIE5VTExfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwogICAgIH0g
ZWxzZSBpZiAodmFsdWUuaXNPYmplY3QoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS9qbmlfanNvYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS9qbmlfanNvYmplY3QubW0JKHJldmlzaW9uIDExNDU1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OTUsNyArNDk1
LDcgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iagogICAgICAgICBq
Y2xhc3MgSlNPYmplY3RDbGFzcyA9IGVudi0+RmluZENsYXNzICgiamF2YS9sYW5nL0Jvb2xlYW4i
KTsKICAgICAgICAgam1ldGhvZElEIGNvbnN0cnVjdG9ySUQgPSBlbnYtPkdldE1ldGhvZElEIChK
U09iamVjdENsYXNzLCAiPGluaXQ+IiwgIihaKVYiKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9y
SUQgIT0gTlVMTCkgewotICAgICAgICAgICAgcmVzdWx0ID0gZW52LT5OZXdPYmplY3QgKEpTT2Jq
ZWN0Q2xhc3MsIGNvbnN0cnVjdG9ySUQsIChqYm9vbGVhbil2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OworICAgICAgICAgICAgcmVzdWx0ID0gZW52LT5OZXdPYmplY3QgKEpTT2JqZWN0Q2xhc3MsIGNv
bnN0cnVjdG9ySUQsIChqYm9vbGVhbil2YWx1ZS50b0Jvb2xlYW4oKSk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTU0MTApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAx
Mi0wNC0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBz
aG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3JhcGggc2ltcGxpZmljYXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NTUzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSlNWYWx1ZTo6dG9Cb29sZWFuKEV4
ZWNTdGF0ZSopIC0+IEpTVmFsdWU6OnRvQm9vbGVhbigpCisgICAgICAgIAorICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQp
OgorCiAyMDEyLTA0LTE3ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgTmVlZCBhIGNsaWVudCBjYWxsYmFjayBmb3Igd2hlbiB0aGUgdXNlciB0aXJlcyB0
byBpbnRlcmFjdCB3aXRoIGFuIGFscmVhZHkgdW5yZXNwb25zaXZlIHBhZ2UKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0
TWFwOjpjb252ZXJ0SlNWYWx1ZVQKICAgICB9CiAKICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkp
IHsKLSAgICAgICAgQk9PTEVBTl9UT19OUFZBUklBTlQodmFsdWUudG9Cb29sZWFuKGV4ZWMpLCB2
YXJpYW50KTsKKyAgICAgICAgQk9PTEVBTl9UT19OUFZBUklBTlQodmFsdWUudG9Cb29sZWFuKCks
IHZhcmlhbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMTU0MTApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNC0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBzaG91bGQgaGF2ZSBjb250cm9sIGZsb3cgZ3Jh
cGggc2ltcGxpZmljYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg0NTUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSlNWYWx1ZTo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSopIC0+IEpTVmFsdWU6OnRvQm9v
bGVhbigpCisgICAgICAgIAorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjphZGRWYWx1ZVRvQXJyYXkpOgorCiAyMDEyLTA0LTE3ICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEV4aXRpbmcgZnVsbCBzY3JlZW4gdmlkZW8gYnJp
bmdzIHRoZSB3cm9uZyBTYWZhcmkgd2luZG93IHRvIHRoZSBmb3JlZ3JvdW5kCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHku
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShyZXZpc2lvbiAxMTQ1NTUpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEyODEsNyArMTI4MSw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjphZGRWYWwKICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVt
YmVyV2l0aERvdWJsZTp2YWx1ZS50b051bWJlcihleGVjKV1dOwogICAgIH0gZWxzZSBpZiAodmFs
dWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDpCb29sVmFsdWVUeXBlXV07Ci0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05T
TnVtYmVyIG51bWJlcldpdGhCb29sOnZhbHVlLnRvQm9vbGVhbihleGVjKV1dOworICAgICAgICBb
YXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDp2YWx1ZS50b0Jvb2xlYW4o
KV1dOwogICAgIH0gZWxzZSBpZiAodmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIFthcnJheSBhZGRP
YmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6TnVsbFZhbHVlVHlwZV1dOwogICAgIGVsc2Ug
aWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsK
</data>
<flag name="review"
          id="144701"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>