<?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>213566</bug_id>
          
          <creation_ts>2020-06-24 10:17:55 -0700</creation_ts>
          <short_desc>Bytecode UseDef should be aware of checkpoints</short_desc>
          <delta_ts>2025-02-09 17:56:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=287379</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bot-watchers-bugzilla</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1665785</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-06-24 10:17:55 -0700</bug_when>
    <thetext>Bytecode UseDef should be aware of checkpoints</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665800</commentid>
    <comment_count>1</comment_count>
      <attachid>402663</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-06-24 11:19:09 -0700</bug_when>
    <thetext>Created attachment 402663
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665801</commentid>
    <comment_count>2</comment_count>
      <attachid>402664</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-06-24 11:20:44 -0700</bug_when>
    <thetext>Created attachment 402664
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665811</commentid>
    <comment_count>3</comment_count>
      <attachid>402669</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-06-24 12:00:51 -0700</bug_when>
    <thetext>Created attachment 402669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665876</commentid>
    <comment_count>4</comment_count>
      <attachid>402689</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-06-24 14:39:38 -0700</bug_when>
    <thetext>Created attachment 402689
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666144</commentid>
    <comment_count>5</comment_count>
      <attachid>402689</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-25 12:13:18 -0700</bug_when>
    <thetext>Comment on attachment 402689
Patch

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

&gt; Source/JavaScriptCore/bytecode/BytecodeIndex.h:37
&gt; +using Checkpoint = uint8_t;

nit: Maybe CheckpointIndex?

&gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:64
&gt; +            for (Checkpoint checkpoint = instructions.at(bytecodeIndex)-&gt;numberOfCheckpoints(); checkpoint--;) {

just for sanity reading this too, can you assert numberOfCheckpoints is &lt; length of the bytecode

&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:293
&gt; +    case op_iterator_open: {
&gt; +        auto bytecode = instruction-&gt;as&lt;OpIteratorOpen&gt;();
&gt; +        functor(OpIteratorOpen::symbolCall, bytecode.m_symbolIterator);
&gt; +        functor(OpIteratorOpen::symbolCall, bytecode.m_iterable);
&gt; +        functor(OpIteratorOpen::getNext, bytecode.m_iterator);
&gt; +        return;
&gt; +    }

this feels like a curious implementation. Why not just branch on the checkpoint being passed in here to see if it&apos;s the right checkpoint? Instead of branching on the caller side to see if you&apos;re dealing with the right checkpoint. I think it&apos;s a much more obviously correct implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669268</commentid>
    <comment_count>6</comment_count>
      <attachid>403644</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-07-06 17:21:28 -0700</bug_when>
    <thetext>Created attachment 403644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669337</commentid>
    <comment_count>7</comment_count>
      <attachid>403644</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-06 23:55:26 -0700</bug_when>
    <thetext>Comment on attachment 403644
Patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:49
&gt; +    auto functor = [&amp;] (Checkpoint target, VirtualRegister operand) {

Calling this functor and the other functorImpl are weird. I’d keep the parameter functor, and maybe call this “useAtCheckpoint” or something?

&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:57
&gt; +            functor(noCheckpoints, VirtualRegister { base - i });

Why not functorImpl?

&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:64
&gt; +            functor(noCheckpoints, VirtualRegister { lastArg + i });

Why not functorImpl?

&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:66
&gt; +            functor(noCheckpoints, scopeRegister);

Why not functorImpl?

&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:266
&gt; +        useAtEachCheckpoint(bytecode.m_callee, bytecode.m_thisValue, bytecode.m_arguments);

Is this just so you can add the static assert to the macro? If so, I’m not sure it’s accomplishing much. I kinda like calling the macro instead and removing the static assert

&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:292
&gt; +        auto bytecode = instruction-&gt;as&lt;OpIteratorOpen&gt;();

Alternatively to my suggestion on naming of functor and functorImpl to useAtCheckpoint, you could totally just switch on the bytecode index here. Might be a nicer style tbh and is in line with switching on the bytecode itself.

&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:318
&gt; +            functor(noCheckpoints, VirtualRegister { base - i });

Why not functorImpl?

&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:343
&gt; +    auto functor = [&amp;] (Checkpoint target, VirtualRegister operand) {

Ditto about naming

&gt; Source/JavaScriptCore/dfg/DFGForAllKills.h:90
&gt; +        } else if (before.bytecodeIndex().checkpoint()) {

Do we have an assert anywhere that no temp can be live-in to checkpoint 0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669474</commentid>
    <comment_count>8</comment_count>
      <attachid>403644</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-07-07 11:36:13 -0700</bug_when>
    <thetext>Comment on attachment 403644
Patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:49
&gt;&gt; +    auto functor = [&amp;] (Checkpoint target, VirtualRegister operand) {
&gt; 
&gt; Calling this functor and the other functorImpl are weird. I’d keep the parameter functor, and maybe call this “useAtCheckpoint” or something?

Sure, seems reasonable.

&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:57
&gt;&gt; +            functor(noCheckpoints, VirtualRegister { base - i });
&gt; 
&gt; Why not functorImpl?

Done.

&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:64
&gt;&gt; +            functor(noCheckpoints, VirtualRegister { lastArg + i });
&gt; 
&gt; Why not functorImpl?

Done.

&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:66
&gt;&gt; +            functor(noCheckpoints, scopeRegister);
&gt; 
&gt; Why not functorImpl?

Done.

&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:266
&gt;&gt; +        useAtEachCheckpoint(bytecode.m_callee, bytecode.m_thisValue, bytecode.m_arguments);
&gt; 
&gt; Is this just so you can add the static assert to the macro? If so, I’m not sure it’s accomplishing much. I kinda like calling the macro instead and removing the static assert

The macro doesn&apos;t work for all the checkpoint bytecodes since it includes the switch label in it. I figured it was better to be consistent among the checkpoint bytecodes. I don&apos;t have strong feelings though.

&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:292
&gt;&gt; +        auto bytecode = instruction-&gt;as&lt;OpIteratorOpen&gt;();
&gt; 
&gt; Alternatively to my suggestion on naming of functor and functorImpl to useAtCheckpoint, you could totally just switch on the bytecode index here. Might be a nicer style tbh and is in line with switching on the bytecode itself.

Yeah, my only thought was that seemed more verbose. If you think it&apos;s better though, I&apos;ll change it.

&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:318
&gt;&gt; +            functor(noCheckpoints, VirtualRegister { base - i });
&gt; 
&gt; Why not functorImpl?

Done.

&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:343
&gt;&gt; +    auto functor = [&amp;] (Checkpoint target, VirtualRegister operand) {
&gt; 
&gt; Ditto about naming

Done.

&gt;&gt; Source/JavaScriptCore/dfg/DFGForAllKills.h:90
&gt;&gt; +        } else if (before.bytecodeIndex().checkpoint()) {
&gt; 
&gt; Do we have an assert anywhere that no temp can be live-in to checkpoint 0?

No, I think we only assert nothing is live out and isn&apos;t live at the prologue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669480</commentid>
    <comment_count>9</comment_count>
      <attachid>403644</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-07-07 12:05:11 -0700</bug_when>
    <thetext>Comment on attachment 403644
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:49
&gt;&gt;&gt; +    auto functor = [&amp;] (Checkpoint target, VirtualRegister operand) {
&gt;&gt; 
&gt;&gt; Calling this functor and the other functorImpl are weird. I’d keep the parameter functor, and maybe call this “useAtCheckpoint” or something?
&gt; 
&gt; Sure, seems reasonable.

I killed this lambda so there&apos;s just the argument now, which still has the name `functor`.

&gt;&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:292
&gt;&gt;&gt; +        auto bytecode = instruction-&gt;as&lt;OpIteratorOpen&gt;();
&gt;&gt; 
&gt;&gt; Alternatively to my suggestion on naming of functor and functorImpl to useAtCheckpoint, you could totally just switch on the bytecode index here. Might be a nicer style tbh and is in line with switching on the bytecode itself.
&gt; 
&gt; Yeah, my only thought was that seemed more verbose. If you think it&apos;s better though, I&apos;ll change it.

I think I&apos;m going to add a useAtEachCheckpointStartingWith rather than have switches that have a bunch of `FALLTHROUGH` everywhere.

&gt;&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:343
&gt;&gt;&gt; +    auto functor = [&amp;] (Checkpoint target, VirtualRegister operand) {
&gt;&gt; 
&gt;&gt; Ditto about naming
&gt; 
&gt; Done.

I renamed this lambda to `defAt` and kept the argument as `functor`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669484</commentid>
    <comment_count>10</comment_count>
      <attachid>403710</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-07-07 12:11:50 -0700</bug_when>
    <thetext>Created attachment 403710
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669485</commentid>
    <comment_count>11</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-07-07 12:12:58 -0700</bug_when>
    <thetext>rdar://64639220</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669564</commentid>
    <comment_count>12</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-07-07 15:34:58 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #10)
&gt; Created attachment 403710 [details]
&gt; Patch for landing
Can you please check if the test failures in following build are caused by this patch:

https://ews-build.webkit.org/#/builders/28/builds/3309
https://ews-build.webkit.org/#/builders/30/builds/13355
https://ews-build.webkit.org/#/builders/31/builds/13509</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669581</commentid>
    <comment_count>13</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-07-07 16:08:47 -0700</bug_when>
    <thetext>(In reply to Aakash Jain from comment #12)
&gt; (In reply to Keith Miller from comment #10)
&gt; &gt; Created attachment 403710 [details]
&gt; &gt; Patch for landing
&gt; Can you please check if the test failures in following build are caused by
&gt; this patch:
&gt; 
&gt; https://ews-build.webkit.org/#/builders/28/builds/3309
&gt; https://ews-build.webkit.org/#/builders/30/builds/13355
&gt; https://ews-build.webkit.org/#/builders/31/builds/13509

Seems unlikely given the patch before was green and I only did minor refactors. I&apos;ll double check though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669595</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-07 16:51:19 -0700</bug_when>
    <thetext>Found 1 new test failure: inspector/dom/domutilities-csspath.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669596</commentid>
    <comment_count>15</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-07-07 16:51:56 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #13)
&gt; (In reply to Aakash Jain from comment #12)
&gt; &gt; (In reply to Keith Miller from comment #10)
&gt; &gt; &gt; Created attachment 403710 [details]
&gt; &gt; &gt; Patch for landing
&gt; &gt; Can you please check if the test failures in following build are caused by
&gt; &gt; this patch:
&gt; &gt; 
&gt; &gt; https://ews-build.webkit.org/#/builders/28/builds/3309
&gt; &gt; https://ews-build.webkit.org/#/builders/30/builds/13355
&gt; &gt; https://ews-build.webkit.org/#/builders/31/builds/13509
&gt; 
&gt; Seems unlikely given the patch before was green and I only did minor
&gt; refactors. I&apos;ll double check though.

Whoops, looks like there was a &gt;= that should have been a &lt;=... I guess forgot to test before uploading 😬</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669597</commentid>
    <comment_count>16</comment_count>
      <attachid>403744</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-07-07 16:52:24 -0700</bug_when>
    <thetext>Created attachment 403744
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669601</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-07 17:32:40 -0700</bug_when>
    <thetext>Committed r264049: &lt;https://trac.webkit.org/changeset/264049&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403744.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402663</attachid>
            <date>2020-06-24 11:19:09 -0700</date>
            <delta_ts>2020-06-24 11:20:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213566-20200624111908.patch</filename>
            <type>text/plain</type>
            <size>55705</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzNDA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YjFhYzgyNGRjYTc4YjU1MWFhYzliMDdiNGQyNGU1YjhiZTE1NmZmLi5hNDY5Y2QzNTVjY2ZjYWJh
N2I4ODQ2NTM0NTRkMzIwMmE2MDJlZjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAyMC0wNi0yNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBCeXRlY29kZSBVc2VEZWYgc2hvdWxkIGJlIGF3YXJlIG9mIGNoZWNr
cG9pbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTM1NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
cmV2aW91c2x5LCB3ZSB0cmllZCB0byBzb2x2ZSB0ZWFjaGluZyBERkcgYWJvdXQgdXNlcyBhbmQg
ZGVmcyBvZgorICAgICAgICBsb2NhbHMgYWNyb3NzIGNoZWNrcG9pbnRzIGJ5IGFza2luZyB3aGF0
IGxvY2FscyB3ZXJlIGRlZidkIGF0IHNvbWUKKyAgICAgICAgY2hlY2twb2ludC4gSG93ZXZlciwg
dGhpcyB3YXMgc3VidGx5IHdyb25nIGJlY2F1c2Ugd2UgZGlkbid0CisgICAgICAgIHJlcG9ydCBh
IHVzZSBhdCBlYWNoIHN1YnNlcXVlbnQgY2hlY2twb2ludCBzbyBERkcgdGhvdWdodCB0aGUKKyAg
ICAgICAgbG9jYWwgd2FzIGtpbGxlZC4KKworICAgICAgICBUaGlzIHBhdGNoIHJldmVydHMgdGhh
dCBjaGFuZ2UgYW5kIGluc3RlYWQgdGVhY2hlcyBCeXRlY29kZVVzZURlZgorICAgICAgICBhYm91
dCBjaGVja3BvaW50cy4gUmlnaHQgbm93LCBCeXRlY29kZVVzZURlZiBvbmx5IGtub3dzIGFib3V0
CisgICAgICAgIGxvY2FscyBhdCBjaGVja3BvaW50cyBidXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkg
dGVhY2ggaXQgYWJvdXQgdG1wcworICAgICAgICBhdCB3ZWxsLgorCisgICAgICAgIFNpbmNlIHRo
ZSB2ZWN0b3JzIGNvbnRhaW5pbmcgb3VyIGxpdmVuZXNzIGJpdG1hcHMgd2VyZSBhbHJlYWR5Cisg
ICAgICAgIHNwYXJzZSAodGhleSBhcmUgaW5kZXhlZCBieSB0aGUgYnl0ZWNvZGUgb2Zmc2V0KSB3
ZSBjYW4gcmV1c2UgdGhlCisgICAgICAgIGdhcHMgdG8gaG9sZCBvdXIgY2hlY2twb2ludCBsaXZl
bmVzcyBpbmZvcm1hdGlvbi4gVG8gbWFrZSBzdXJlIHdlCisgICAgICAgIGRvbid0IG92ZXJsYXAg
YmV0d2VlbiB0aGUgbmV4dCBieXRlY29kZSBhbmQgYSBjaGVja3BvaW50IGZvciB0aGUKKyAgICAg
ICAgY3VycmVudCBieXRlY29kZSB0aGVyZSBpcyBub3cgYSBzdGF0aWMgYXNzZXJ0IHRoYXQgdGhl
IGxlbmd0aCBvZgorICAgICAgICB0aGUgYnl0ZWNvZGUgaXMgZ3JlYXRlciB0aGFuIHRoZSBudW1i
ZXIgb2YgY2hlY2twb2ludHMuIFRoaXMKKyAgICAgICAgYXNzdW1wdGlvbiBpcyB0cnVlIGZvciBl
eGlzdGluZyBieXRlY29kZXMgd2l0aCBjaGVja3BvaW50cyBhbmQKKyAgICAgICAgbGlrZWx5IHRv
IGJlIHRydWUgYW55d2F5IGZvciBmdXR1cmUgb25lcy4KKworICAgICAgICBNYW55IG9mIHRoZSBC
eXRlY29kZUxpdmVuZXNzUHJvcGVnYXRpb24gZnVuY3Rpb25zIGhhdmUgYmVlbgorICAgICAgICBy
ZW5hbWVkIHRvIHJlZmxlY3QgdGhhdCB0aGV5IG9wZXJhdGUgb3ZlciB0aGUgZnVsbCBpbnN0cnVj
dGlvbiwKKyAgICAgICAgaW5jbHVkaW5nIGNoZWNrcG9pbnRzLCByYXRoZXIgdGhhbiBqdXN0IHRo
ZSBCeXRlY29kZUluZGV4IHBhc3NlZC4KKworICAgICAgICBMYXN0bHksIHRoaXMgcGF0Y2ggbWFr
ZXMgYSBzcGVjdWxhdGl2ZSBmaXggdG8gZm9yQWxsS2lsbGVkT3BlcmFuZHMgd2hlcmUgd2UKKyAg
ICAgICAgd291bGRuJ3QgcmVwb3J0IHRoYXQgYWxsIHRtcHMgZGllIGF0IHRoZSBlbmQgb2YgZWFj
aCBieXRlY29kZS4gSSBjYW4ndCB0aGluaworICAgICAgICBvZiBhIGNhc2Ugd2hlcmUgdGhpcyB3
b3VsZCBicmVhayB0aGluZ3MgYnV0IGl0J3MgcHJvYmFibHkgZ29vZCBoeWdpZW5lLgorCisgICAg
ICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwOgorICAgICAgICAo
SlNDOjpHZW5lcmF0b3JMaXZlbmVzc0FuYWx5c2lzOjpydW4pOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojp3aXRoQ2hlY2twb2ludCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczo6Y29tcHV0ZUZ1bGxMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMpOgorICAgICAgICAoSlNDOjp0bXBMaXZlbmVzc0Zv
ckNoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6Omdl
dExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omxp
dmVuZXNzRm9yQ2hlY2twb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRleERlZik6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4
VXNlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zl
ckJ5dGVjb2RlSW5kZXhVc2VJbkV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRleCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbik6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2Fs
TGl2ZW5lc3NGb3JJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlv
bik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJ
bnN0cnVjdGlvbkRlZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvblVzZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvblVzZUlu
RXhjZXB0aW9uSGFuZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5l
c3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpnZXRMaXZl
bmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlVXNlRGVmLmNwcDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUlu
ZGV4SW1wbCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwp
OgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6CisgICAgICAgIChKU0M6OmNv
bXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9y
Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVj
b2RlSW5kZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWxpZGF0ZSk6CisgICAg
ICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExpdmVuZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M6OnRvSW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0
aW9uLmg6CisgICAgICAgIChKU0M6OkJhc2VJbnN0cnVjdGlvbjo6bnVtYmVyT2ZDaGVja3BvaW50
cyBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwOgorICAg
ICAgICAoSlNDOjpJbnN0cnVjdGlvblN0cmVhbTo6aW5zdHJ1Y3Rpb25Db3VudCBjb25zdCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaDoKKyAgICAgICAgKiBieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKiBkZmcvREZHRm9yQWxsS2lsbHMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5kcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZlSW5CeXRlY29kZSk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2Uu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
OjpjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSk6CisgICAgICAgICogZ2VuZXJhdG9y
L09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoKKwogMjAyMC0wNi0y
MyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgSGFuZGxlIHN0cmlu
ZyBvdmVyZmxvdyBpbiBERkcgZ3JhcGggZHVtcCB3aGlsZSB2YWxpZGF0aW5nIEFJLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZp
Y2F0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVy
YXRvcmlmaWNhdGlvbi5jcHAKaW5kZXggNmZiYTIyOTdjMjkxZmU0OGViOTkzY2ZhN2VmZjYzOTFj
YzRmODY2My4uYThlNTZkMGNkMzk0YmMxYjdhYzA1MjZiZTg2NjdlYWM4YmRkN2U2YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZp
Y2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVH
ZW5lcmF0b3JpZmljYXRpb24uY3BwCkBAIC0xOTQsNyArMTk0LDcgQEAgcHVibGljOgogICAgICAg
ICBydW5MaXZlbmVzc0ZpeHBvaW50KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dlbmVyYXRv
cmlmaWNhdGlvbi5ncmFwaCgpKTsKIAogICAgICAgICBmb3IgKFlpZWxkRGF0YSYgZGF0YSA6IG1f
Z2VuZXJhdG9yaWZpY2F0aW9uLnlpZWxkcygpKQotICAgICAgICAgICAgZGF0YS5saXZlbmVzcyA9
IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywg
bV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSwgQnl0ZWNvZGVJbmRleChtX2dlbmVyYXRvcmlm
aWNhdGlvbi5pbnN0cnVjdGlvbnMoKS5hdChkYXRhLnBvaW50KS5uZXh0KCkub2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgIGRhdGEubGl2ZW5lc3MgPSBnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9u
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpLCBC
eXRlY29kZUluZGV4KG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmluc3RydWN0aW9ucygpLmF0KGRhdGEu
cG9pbnQpLm5leHQoKS5vZmZzZXQoKSkpOwogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCmluZGV4IDZlMjY2ZDNkYWYz
YjEyNWU4NzM2NzU3NTQwNTJjMzEzYzBlNWE1NzEuLjliYzg0MzRlMGY5YjM4YjI4YTFiODExZTBl
MDFmZWUyMDFiOGJiODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUluZGV4LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlSW5kZXguaApAQCAtMzQsNiArMzQsOSBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK3VzaW5nIENoZWNrcG9pbnQgPSB1aW50OF90Oworc3RhdGljIGNvbnN0
ZXhwciBDaGVja3BvaW50IG5vQ2hlY2twb2ludHMgPSAwOworCiBjbGFzcyBCeXRlY29kZUluZGV4
IHsKIHB1YmxpYzoKICAgICBCeXRlY29kZUluZGV4KCkgPSBkZWZhdWx0OwpAQCAtNDIsNyArNDUs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgo
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQsIHVpbnQ4X3QgY2hlY2twb2ludCA9IDApCisgICAgZXhw
bGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCwgQ2hlY2twb2ludCBj
aGVja3BvaW50ID0gbm9DaGVja3BvaW50cykKICAgICAgICAgOiBtX3BhY2tlZEJpdHMocGFjayhi
eXRlY29kZU9mZnNldCwgY2hlY2twb2ludCkpCiAgICAgewogICAgICAgICBBU1NFUlQoKnRoaXMp
OwpAQCAtNTQsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJf
dCBjaGVja3BvaW50U2hpZnQgPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihudW1iZXJPZkNoZWNr
cG9pbnRzKTsKIAogICAgIHVpbnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2Vk
Qml0cyA+PiBjaGVja3BvaW50U2hpZnQ7IH0KLSAgICB1aW50OF90IGNoZWNrcG9pbnQoKSBjb25z
dCB7IHJldHVybiBtX3BhY2tlZEJpdHMgJiBjaGVja3BvaW50TWFzazsgfQorICAgIENoZWNrcG9p
bnQgY2hlY2twb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRN
YXNrOyB9CiAgICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRz
OyB9CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1f
cGFja2VkQml0cyk7IH0KQEAgLTYyLDcgKzY1LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUo
KTsgfQogCiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7
Ci0gICAgQnl0ZWNvZGVJbmRleCB3aXRoQ2hlY2twb2ludCh1bnNpZ25lZCBjaGVja3BvaW50KSBj
b25zdCB7IHJldHVybiBCeXRlY29kZUluZGV4KG9mZnNldCgpLCBjaGVja3BvaW50KTsgfQorICAg
IEJ5dGVjb2RlSW5kZXggd2l0aENoZWNrcG9pbnQoQ2hlY2twb2ludCBjaGVja3BvaW50KSBjb25z
dCB7IHJldHVybiBCeXRlY29kZUluZGV4KG9mZnNldCgpLCBjaGVja3BvaW50KTsgfQogCiAgICAg
Ly8gQ29tcGFyaXNvbiBvcGVyYXRvcnMuCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAhPSBpbnZhbGlkT2Zmc2V0ICYmIG1fcGFja2VkQml0
cyAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQpAQCAtODAsMTIgKzgzLDEyIEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBpbnZhbGlkT2Zmc2V0
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwogCi0gICAgc3RhdGljIHVp
bnQzMl90IHBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgdWludDhfdCBjaGVja3BvaW50KTsK
KyAgICBzdGF0aWMgdWludDMyX3QgcGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCBDaGVja3Bv
aW50KTsKIAogICAgIHVpbnQzMl90IG1fcGFja2VkQml0cyB7IGludmFsaWRPZmZzZXQgfTsKIH07
CiAKLWlubGluZSB1aW50MzJfdCBCeXRlY29kZUluZGV4OjpwYWNrKHVpbnQzMl90IGJ5dGVjb2Rl
SW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCkKK2lubGluZSB1aW50MzJfdCBCeXRlY29kZUluZGV4
OjpwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIENoZWNrcG9pbnQgY2hlY2twb2ludCkKIHsK
ICAgICBBU1NFUlQoY2hlY2twb2ludCA8IG51bWJlck9mQ2hlY2twb2ludHMpOwogICAgIEFTU0VS
VCgoYnl0ZWNvZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQpID4+IGNoZWNrcG9pbnRTaGlmdCA9
PSBieXRlY29kZUluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKaW5kZXggNDJhNjM1ZWM4ZTNl
NDg3MTI0OTMzM2FiODg1MDZjNTc2ZmI2NzNiOS4uMDVmNjFhMWM5ODVkNmVjYzg4Zjk0ZTZmYmE1
YWE4NzdhMDM0ODgzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKQEAgLTMxLDcgKzMxLDYgQEAK
ICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
IgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL1Njb3BlLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NCw1NyArNDMsNDUgQEAgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiAgICAgICAgIGR1bXBSZXN1bHRzKGNvZGVCbG9jayk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRmFzdEJpdFZlY3RvciYgcmVz
dWx0KQotewotICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmZpbmRCYXNp
Y0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgQVNT
RVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5pc0VudHJ5QmxvY2soKSk7Ci0gICAgQVNT
RVJUKCFibG9jay0+aXNFeGl0QmxvY2soKSk7Ci0gICAgcmVzdWx0LnJlc2l6ZShibG9jay0+b3V0
KCkubnVtQml0cygpKTsKLSAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgo
Y29kZUJsb2NrLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX2dyYXBoLCAqYmxvY2ssIGJ5
dGVjb2RlSW5kZXgsIHJlc3VsdCk7Ci19Ci0KLUZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBGYXN0Qml0VmVjdG9y
IG91dDsKLSAgICBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBieXRl
Y29kZUluZGV4LCBvdXQpOwotICAgIHJldHVybiBvdXQ7Ci19Ci0KIHZvaWQgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBG
dWxsQnl0ZWNvZGVMaXZlbmVzcyYgcmVzdWx0KQogewogICAgIEZhc3RCaXRWZWN0b3Igb3V0Owog
Ci0gICAgcmVzdWx0Lm1fYmVmb3JlVXNlVmVjdG9yLnJlc2l6ZShjb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLnNpemUoKSk7Ci0gICAgcmVzdWx0Lm1fYWZ0ZXJVc2VWZWN0b3IucmVzaXplKGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIHJlc3VsdC5tX3VzZXNCZWZvcmUucmVzaXpl
KHNpemUpOworICAgIHJlc3VsdC5tX3VzZXNBZnRlci5yZXNpemUoc2l6ZSk7CiAgICAgCiAgICAg
Zm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogbV9ncmFwaC5iYXNpY0Jsb2Nrc0luUmV2
ZXJzZU9yZGVyKCkpIHsKICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2Nr
LmlzRXhpdEJsb2NrKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAg
IG91dCA9IGJsb2NrLm91dCgpOwotICAgICAgICAKLSAgICAgICAgYXV0byB1c2UgPSBbJl0gKHVu
c2lnbmVkIGJpdEluZGV4KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSB1c2UgZnVuY3Rv
ciwgc28gd2Ugc2V0IHRoZSBiaXQuCi0gICAgICAgICAgICBvdXRbYml0SW5kZXhdID0gdHJ1ZTsK
LSAgICAgICAgfTsKLQotICAgICAgICBhdXRvIGRlZiA9IFsmXSAodW5zaWduZWQgYml0SW5kZXgp
IHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRlZiBmdW5jdG9yLCBzbyB3ZSBjbGVhciB0
aGUgYml0LgotICAgICAgICAgICAgb3V0W2JpdEluZGV4XSA9IGZhbHNlOwotICAgICAgICB9Owot
CiAgICAgICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7
CiAgICAgICAgIHVuc2lnbmVkIGN1cnNvciA9IGJsb2NrLnRvdGFsTGVuZ3RoKCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGJsb2NrLmRlbHRhKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAg
ICAgICBjdXJzb3IgLT0gYmxvY2suZGVsdGEoKVtpXTsKICAgICAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoYmxvY2subGVhZGVyT2Zmc2V0KCkgKyBj
dXJzb3IpOwotCi0gICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uRGVmKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb25zLCBtX2dyYXBoLCBieXRlY29kZUluZGV4LCBkZWYpOwotICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvblVzZUluRXhjZXB0aW9uSGFuZGxlcihjb2RlQmxvY2ssIGluc3Ry
dWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKLSAgICAgICAgICAgIHJlc3Vs
dC5tX2FmdGVyVXNlVmVjdG9yW2J5dGVjb2RlSW5kZXgub2Zmc2V0KCldID0gb3V0OyAvLyBBZnRl
clVzZSBwb2ludC4KLSAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2UoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbnMsIG1fZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIHVzZSk7Ci0gICAgICAgICAg
ICByZXN1bHQubV9iZWZvcmVVc2VWZWN0b3JbYnl0ZWNvZGVJbmRleC5vZmZzZXQoKV0gPSBvdXQ7
IC8vIEJlZm9yZVVzZSBwb2ludC4KKyAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3Bv
aW50ID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlSW5kZXgpLT5udW1iZXJPZkNoZWNrcG9pbnRz
KCk7IGNoZWNrcG9pbnQtLTspIHsKKyAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gYnl0
ZWNvZGVJbmRleC53aXRoQ2hlY2twb2ludChjaGVja3BvaW50KTsKKworICAgICAgICAgICAgICAg
IGF1dG8gdXNlID0gWyZdIChDaGVja3BvaW50IHRhcmdldCwgdW5zaWduZWQgYml0SW5kZXgpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgdXNlIGZ1bmN0b3IsIHNvIHdlIHNl
dCB0aGUgYml0LgorICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2twb2ludCA9PSB0YXJnZXQp
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRbYml0SW5kZXhdID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byBkZWYgPSBbJl0gKENoZWNrcG9pbnQg
dGFyZ2V0LCB1bnNpZ25lZCBiaXRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIHRoZSBkZWYgZnVuY3Rvciwgc28gd2UgY2xlYXIgdGhlIGJpdC4KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gdGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0W2JpdEluZGV4XSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
ICAgICBzdGVwT3ZlckJ5dGVjb2RlSW5kZXhEZWYoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1f
Z3JhcGgsIGJ5dGVjb2RlSW5kZXgsIGRlZik7CisgICAgICAgICAgICAgICAgc3RlcE92ZXJCeXRl
Y29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBt
X2dyYXBoLCBieXRlY29kZUluZGV4LCB1c2UpOworICAgICAgICAgICAgICAgIHJlc3VsdC5tX3Vz
ZXNBZnRlcltyZXN1bHQudG9JbmRleChieXRlY29kZUluZGV4KV0gPSBvdXQ7IC8vIEFmdGVyVXNl
IHBvaW50LgorICAgICAgICAgICAgICAgIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZShjb2RlQmxv
Y2ssIGluc3RydWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQubV91c2VzQmVmb3JlW3Jlc3VsdC50b0luZGV4KGJ5dGVjb2RlSW5kZXgp
XSA9IG91dDsgLy8gQmVmb3JlVXNlIHBvaW50LgorICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMTUwLDcgKzEzNyw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
OjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgICAgIGNvbnN0IGF1
dG8gY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsK
IAogICAgICAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFyaWFibGVzOiIpOwotICAgICAgICAgICAg
RmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkpOworICAgICAgICAgICAg
RmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbihj
b2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKTsKICAgICAgICAgICAgIGR1
bXBCaXRWZWN0b3IobGl2ZUJlZm9yZSk7CiAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICAg
ICAgICAgICAgIGNvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZpbGUoKSwgY3VycmVu
dEluc3RydWN0aW9uKTsKQEAgLTE3NiwxNSArMTYzLDExIEBAIGNvbnN0ZXhwciBib29sIGVudW1W
YWx1ZXNFcXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlwZTIgdjIpCiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUy
Pih2Mik7CiB9CiAKLVZlY3RvcjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1wcz4gbGl2ZW5l
c3NGb3JDaGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgpCitCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNz
Rm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogewotICAgIFZlY3RvcjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1w
cz4gcmVzdWx0OworICAgIEJpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gcmVzdWx0OwogICAg
IHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwogCi0gICAg
YXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7Ci0gICAgICAgIEFTU0VSVChyZXN1
bHQuc2l6ZSgpIDw9IG1heE51bUNoZWNrcG9pbnRUbXBzKTsKLSAgICB9KTsKLQogICAgIGlmICgh
Y2hlY2twb2ludCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMTk1LDE2ICsxNzgsMTQg
QEAgVmVjdG9yPE9wZXJhbmQsIG1heE51bUNoZWNrcG9pbnRUbXBzPiBsaXZlbmVzc0ZvckNoZWNr
cG9pbnQoY29uc3QgQ29kZUJsb2NrJiBjb2QKICAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFs
dWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBPcFRhaWxDYWxsVmFy
YXJnczo6bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJn
czo6YXJnQ291bnRJbmNsdWRpbmdUaGlzLCBPcFRhaWxDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNs
dWRpbmdUaGlzKSk7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0VxdWFsQXNJbnRl
Z3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BDb25zdHJ1Y3RWYXJhcmdzOjptYWtlQ2Fs
bCkgJiYgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjphcmdDb3VudElu
Y2x1ZGluZ1RoaXMsIE9wQ29uc3RydWN0VmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzKSk7
CiAgICAgICAgIGlmIChjaGVja3BvaW50ID09IE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsKQotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChPcGVyYW5kOjp0bXAoT3BDYWxsVmFyYXJnczo6YXJnQ291
bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICByZXN1bHQuc2V0KE9wQ2FsbFZhcmFyZ3M6
OmFyZ0NvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewotICAgICAgICBpZiAoY2hlY2twb2ludCA9PSBP
cEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dCkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZUJs
b2NrLmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5hczxPcEl0ZXJhdG9yT3Blbj4o
KS5tX2l0ZXJhdG9yKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgY2FzZSBv
cF9pdGVyYXRvcl9uZXh0OiB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoT3BlcmFuZDo6dG1wKE9w
SXRlcmF0b3JOZXh0OjpuZXh0UmVzdWx0KSk7CisgICAgICAgIHJlc3VsdC5zZXQoT3BJdGVyYXRv
ck5leHQ6Om5leHRSZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBk
ZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCmluZGV4IGJlNWVlMmZjZDNhNjRlNTYzYWVhMWYzZjIy
Mjc5MWU0NjhiYjYxMDQuLmEyMDQxN2YyMmNiMWIyZDM3NzZiMDlhNjc3MTM5YzIyN2QyNjBjMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmgKQEAgLTUxLDI2ICs1MSwyNiBAQCBlbnVtIGNsYXNzIExpdmVu
ZXNzQ2FsY3VsYXRpb25Qb2ludCA6IHVpbnQ4X3QgewogY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc1By
b3BhZ2F0aW9uIHsKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
LCB0eXBlbmFtZSBVc2VGdW5jdG9yPgotICAgIHN0YXRpYyB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rp
b25Vc2UoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVH
cmFwaCYsIEJ5dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImKTsKKyAgICBzdGF0aWMgdm9p
ZCBzdGVwT3ZlckJ5dGVjb2RlSW5kZXhVc2UoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0
aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0
b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBVc2VG
dW5jdG9yPgotICAgIHN0YXRpYyB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJbkV4Y2VwdGlv
bkhhbmRsZXIoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNv
ZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImKTsKKyAgICBzdGF0aWMg
dm9pZCBzdGVwT3ZlckJ5dGVjb2RlSW5kZXhVc2VJbkV4Y2VwdGlvbkhhbmRsZXIoQ29kZUJsb2Nr
VHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2Rl
SW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotICAgIHN0YXRpYyB2b2lkIHN0ZXBPdmVySW5z
dHJ1Y3Rpb25EZWYoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0
ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgsIGNvbnN0IERlZkZ1bmN0b3ImKTsKKyAgICBzdGF0
aWMgdm9pZCBzdGVwT3ZlckJ5dGVjb2RlSW5kZXhEZWYoQ29kZUJsb2NrVHlwZSosIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgsIGNvbnN0IERl
ZkZ1bmN0b3ImKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVu
YW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci0gICAgc3RhdGljIHZvaWQgc3Rl
cE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
LCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYsIGNvbnN0
IERlZkZ1bmN0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBzdGVwT3ZlckJ5dGVjb2RlSW5kZXgoQ29k
ZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5
dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImLCBjb25zdCBEZWZGdW5jdG9yJik7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgogICAgIHN0YXRpYyB2b2lkIHN0ZXBP
dmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwg
Qnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIG91dCk7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+
Ci0gICAgc3RhdGljIGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KENv
ZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNv
ZGVCYXNpY0Jsb2NrJiwgQnl0ZWNvZGVJbmRleCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KTsKKyAg
ICBzdGF0aWMgYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0Zvckluc3RydWN0aW9uKENvZGVCbG9j
a1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVCYXNp
Y0Jsb2NrJiwgQnl0ZWNvZGVJbmRleCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KICAg
ICBzdGF0aWMgYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKENvZGVCbG9ja1R5cGUq
LCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVCYXNpY0Jsb2Nr
Jik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0
cnVjdGlvbnM+Ci0gICAgc3RhdGljIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZUluZGV4KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdy
YXBoJiwgQnl0ZWNvZGVJbmRleCk7CisgICAgc3RhdGljIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5l
c3NJbmZvQXRJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwg
Qnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPgogICAgIHN0YXRpYyB2b2lkIHJ1
bkxpdmVuZXNzRml4cG9pbnQoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5
dGVjb2RlR3JhcGgmKTsKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIGZyaWVuZCBjbGFz
cyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb247CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzKENvZGVCbG9jayopOwogICAgIAotICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZv
QXRCeXRlY29kZUluZGV4KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgpOworICAgIEZhc3RCaXRW
ZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KSB7IHJldHVybiBCeXRlY29kZUxpdmVuZXNzUHJv
cGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBjb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLCBtX2dyYXBoLCBieXRlY29kZUluZGV4KTsgfQogICAgIAogICAg
IHZvaWQgY29tcHV0ZUZ1bGxMaXZlbmVzcyhDb2RlQmxvY2sqLCBGdWxsQnl0ZWNvZGVMaXZlbmVz
cyYgcmVzdWx0KTsKIApAQCAtOTIsMTIgKzkyLDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
dm9pZCBkdW1wUmVzdWx0cyhDb2RlQmxvY2sqKTsKIAotICAgIHZvaWQgZ2V0TGl2ZW5lc3NJbmZv
QXRCeXRlY29kZUluZGV4KENvZGVCbG9jayosIEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3Im
KTsKLQogICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFwaDsKIH07CiAKLVZlY3RvcjxPcGVyYW5kLCBt
YXhOdW1DaGVja3BvaW50VG1wcz4gbGl2ZW5lc3NGb3JDaGVja3BvaW50KGNvbnN0IENvZGVCbG9j
ayYsIEJ5dGVjb2RlSW5kZXgpOworQml0bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZl
bmVzc0ZvckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiwgQnl0ZWNvZGVJbmRleCk7CiAKIGlu
bGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpOwogaW5saW5lIGJvb2wg
b3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0
LCBpbnQgb3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAppbmRleCBjNjA5
NjViY2M5N2E3Yjg5OTBkYjk4ZmQyM2Q5OWI1ZTA4ZjljZGQ1Li5kODkxNTk2NGY5Mjk4YjMxYWFj
OTFlNTQxZWYyZTZiZWM4ZjViNjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgK
QEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKICNpbmNsdWRl
ICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJCeXRlY29kZVVzZURlZi5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkludGVycHJldGVySW5saW5lcy5o
IgogCkBAIC01OCw0NyArNTksNDkgQEAgaW5saW5lIGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2
ZW5lc3MoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGUsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBCeXRlY29kZUxp
dmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25EZWYoQ29kZUJsb2NrVHlwZSog
Y29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29k
ZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBEZWZGdW5jdG9yJiBk
ZWYpCitpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0
ZWNvZGVJbmRleERlZihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICBhdXRvKiBpbnN0cnVjdGlv
biA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBjb21wdXRlRGVm
c0ZvckJ5dGVjb2RlSW5kZXgoCiAgICAgICAgIGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sCi0gICAg
ICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgWyZdIChDaGVja3Bv
aW50IGNoZWNrcG9pbnQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAgICAgICAgICBp
ZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mob3BlcmFuZCkpCi0gICAgICAgICAgICAgICAg
ZGVmKG9wZXJhbmQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBkZWYoY2hlY2twb2ludCwg
b3BlcmFuZC50b0xvY2FsKCkpOwogICAgICAgICB9KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVuY3Rvcj4KLWlubGluZSB2b2lkIEJ5dGVjb2Rl
TGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvblVzZShDb2RlQmxvY2tUeXBl
KiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVj
b2RlR3JhcGgmLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3Im
IHVzZSkKK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJC
eXRlY29kZUluZGV4VXNlKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYgdXNlKQogewogICAgIGF1dG8qIGluc3RydWN0
aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVJbmRleCgKICAgICAgICAgY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwKLSAg
ICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICBbJl0gKENoZWNr
cG9pbnQgY2hlY2twb2ludCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKICAgICAgICAgICAg
IGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhvcGVyYW5kKSkKLSAgICAgICAgICAgICAg
ICB1c2Uob3BlcmFuZC50b0xvY2FsKCkpOworICAgICAgICAgICAgICAgIHVzZShjaGVja3BvaW50
LCBvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgICAgIH0pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBVc2VGdW5jdG9yPgotaW5saW5lIHZvaWQgQnl0ZWNv
ZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uVXNlSW5FeGNlcHRpb25I
YW5kbGVyKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
LCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25z
dCBVc2VGdW5jdG9yJiB1c2UpCitpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRp
b246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZUluRXhjZXB0aW9uSGFuZGxlcihDb2RlQmxvY2tU
eXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNvZGVHcmFwaCYg
Z3JhcGgsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYgdXNl
KQogewogICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdlIHdhbnQgdGhl
IGxpdmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKLSAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9j
ayB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgYnl0ZWNv
ZGUuCisgICAgLy8gZXhjZXB0aW9uIGhhbmRsZXIgYmxvY2sgdG8gYmUgaW5jbHVkZWQgaW4gdGhl
IGxpdmUtaW4gb2YgdGhpcyBwYXJ0aWN1bGFyIEJ5dGVjb2RlSW5kZXguCiAgICAgaWYgKGF1dG8q
IGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5k
ZXgpKSB7CiAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogaGFuZGxlckJsb2NrID0gZ3JhcGgu
ZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGhhbmRsZXItPnRhcmdldCk7CiAgICAgICAg
IEFTU0VSVChoYW5kbGVyQmxvY2spOwotICAgICAgICBoYW5kbGVyQmxvY2stPmluKCkuZm9yRWFj
aFNldEJpdCh1c2UpOworICAgICAgICBoYW5kbGVyQmxvY2stPmluKCkuZm9yRWFjaFNldEJpdChb
Jl0gKHVuc2lnbmVkIGkpIHsKKyAgICAgICAgICAgIHVzZShieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSAsIGkpOworICAgICAgICB9KTsKICAgICB9CiB9CiAKIC8vIFNpbXBsaWZpZWQgaW50ZXJm
YWNlIHRvIGJ5dGVjb2RlIHVzZS9kZWYsIHdoaWNoIGRldGVybWluZXMgZGVmcyBmaXJzdCBhbmQg
dGhlbiB1c2VzLCBhbmQgaW5jbHVkZXMKIC8vIGV4Y2VwdGlvbiBoYW5kbGVycyBpbiB0aGUgdXNl
cy4KIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0b3Is
IHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFn
YXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25z
dCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJiB1c2UsIGNvbnN0
IERlZkZ1bmN0b3ImIGRlZikKK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlv
bjo6c3RlcE92ZXJCeXRlY29kZUluZGV4KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYgdXNlLCBjb25zdCBE
ZWZGdW5jdG9yJiBkZWYpCiB7Ci0gICAgLy8gVGhpcyBhYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGlu
c3RydWN0aW9uIGluIHJldmVyc2UuIEluc3RydWN0aW9ucyBsb2dpY2FsbHkgZmlyc3QgdXNlIG9w
ZXJhbmRzIGFuZAorICAgIC8vIFRoaXMgYWJzdHJhY3RseSBleGVjdXRlcyB0aGUgQnl0ZWNvZGVJ
bmRleCBpbiByZXZlcnNlLiBJbnN0cnVjdGlvbnMgbG9naWNhbGx5IGZpcnN0IHVzZSBvcGVyYW5k
cyBhbmQKICAgICAvLyB0aGVuIGRlZmluZSBvcGVyYW5kcy4gVGhpcyBsb2dpY2FsIG9yZGVyaW5n
IGlzIG5lY2Vzc2FyeSBmb3Igb3BlcmF0aW9ucyB0aGF0IHVzZSBhbmQgZGVmIHRoZSBzYW1lCiAg
ICAgLy8gb3BlcmFuZCwgbGlrZToKICAgICAvLwpAQCAtMTEzLDMxICsxMTYsMzcgQEAgaW5saW5l
IHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENv
ZGVCbG9ja1R5cGUqIGNvZGUKICAgICAvLyB1c2VzIGJlZm9yZSBkZWZzLCB0aGVuIHRoZSBhZGQg
b3BlcmF0aW9uIGFib3ZlIHdvdWxkIGFwcGVhciB0byBub3QgaGF2ZSBsb2MxIGxpdmUsIHNpbmNl
IHdlJ2QKICAgICAvLyBmaXJzdCBhZGQgaXQgdG8gdGhlIG91dCBzZXQgKHRoZSB1c2UpLCBhbmQg
dGhlbiB3ZSdkIHJlbW92ZSBpdCAodGhlIGRlZikuCiAKLSAgICBzdGVwT3Zlckluc3RydWN0aW9u
RGVmKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVJbmRleCwgZGVmKTsK
LSAgICBzdGVwT3Zlckluc3RydWN0aW9uVXNlSW5FeGNlcHRpb25IYW5kbGVyKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKLSAgICBzdGVwT3Zlcklu
c3RydWN0aW9uVXNlKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVJbmRl
eCwgdXNlKTsKKyAgICBzdGVwT3ZlckJ5dGVjb2RlSW5kZXhEZWYoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbnMsIGdyYXBoLCBieXRlY29kZUluZGV4LCBkZWYpOworICAgIHN0ZXBPdmVyQnl0ZWNvZGVJ
bmRleFVzZUluRXhjZXB0aW9uSGFuZGxlcihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgs
IGJ5dGVjb2RlSW5kZXgsIHVzZSk7CisgICAgc3RlcE92ZXJCeXRlY29kZUluZGV4VXNlKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5l
c3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlQmxv
Y2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgm
IGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIG91dCkK
IHsKLSAgICBzdGVwT3Zlckluc3RydWN0aW9uKAotICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0
aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgIFsmXSAodW5zaWduZWQgYml0SW5k
ZXgpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHVzZSBmdW5jdG9yLCBzbyB3ZSBzZXQg
dGhlIGJpdC4KLSAgICAgICAgICAgIG91dFtiaXRJbmRleF0gPSB0cnVlOwotICAgICAgICB9LAot
ICAgICAgICBbJl0gKHVuc2lnbmVkIGJpdEluZGV4KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlz
IHRoZSBkZWYgZnVuY3Rvciwgc28gd2UgY2xlYXIgdGhlIGJpdC4KLSAgICAgICAgICAgIG91dFti
aXRJbmRleF0gPSBmYWxzZTsKLSAgICAgICAgfSk7CisgICAgYXV0byBudW1iZXJPZkNoZWNrcG9p
bnRzID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlSW5kZXgpLT5udW1iZXJPZkNoZWNrcG9pbnRz
KCk7CisgICAgZm9yIChDaGVja3BvaW50IHRhcmdldCA9IG51bWJlck9mQ2hlY2twb2ludHM7IHRh
cmdldC0tOykgeworICAgICAgICBzdGVwT3ZlckJ5dGVjb2RlSW5kZXgoCisgICAgICAgICAgICBj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAg
ICBbJl0gKENoZWNrcG9pbnQgY2hlY2twb2ludCwgdW5zaWduZWQgYml0SW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSB1c2UgZnVuY3Rvciwgc28gd2Ugc2V0IHRoZSBiaXQu
CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gdGFyZ2V0KQorICAgICAgICAgICAg
ICAgICAgICBvdXRbYml0SW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICBbJl0gKENoZWNrcG9pbnQgY2hlY2twb2ludCwgdW5zaWduZWQgYml0SW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBkZWYgZnVuY3Rvciwgc28gd2UgY2xlYXIgdGhlIGJp
dC4KKyAgICAgICAgICAgICAgICBpZiAoY2hlY2twb2ludCA9PSB0YXJnZXQpCisgICAgICAgICAg
ICAgICAgICAgIG91dFtiaXRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgICAgIH0pOworICAgIH0K
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rp
b25zPgotaW5saW5lIGJvb2wgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9j
YWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25z
dCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVj
b2RlQmFzaWNCbG9jayYgYmxvY2ssIEJ5dGVjb2RlSW5kZXggdGFyZ2V0SW5kZXgsIEZhc3RCaXRW
ZWN0b3ImIHJlc3VsdCkKK2lubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6
Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlQmxv
Y2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFw
aCwgQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jaywgQnl0ZWNvZGVJbmRleCB0YXJnZXRJbmRleCwg
RmFzdEJpdFZlY3RvciYgcmVzdWx0KQogewogICAgIEFTU0VSVCghYmxvY2suaXNFeGl0QmxvY2so
KSk7CiAgICAgQVNTRVJUKCFibG9jay5pc0VudHJ5QmxvY2soKSk7CisgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSghdGFyZ2V0SW5kZXguY2hlY2twb2ludCgpLCAiY29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JJbnN0cnVjdGlvbiBjYW4ndCBiZSB1c2VkIHRvIGFzayBxdWVzdGlvbnMgYWJvdXQgY2hlY2tw
b2ludHMiKTsKIAogICAgIEZhc3RCaXRWZWN0b3Igb3V0ID0gYmxvY2sub3V0KCk7CiAKQEAgLTE1
OCwxOSArMTY3LDIwIEBAIGlubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6
Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxvY2tUCiB7CiAgICAgaWYgKGJsb2Nr
LmlzRXhpdEJsb2NrKCkgfHwgYmxvY2suaXNFbnRyeUJsb2NrKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2ssIEJ5dGVjb2RlSW5kZXgoYmxvY2su
bGVhZGVyT2Zmc2V0KCkpLCBibG9jay5pbigpKTsKKyAgICByZXR1cm4gY29tcHV0ZUxvY2FsTGl2
ZW5lc3NGb3JJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJsb2Nr
LCBCeXRlY29kZUluZGV4KGJsb2NrLmxlYWRlck9mZnNldCgpKSwgYmxvY2suaW4oKSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4K
LWlubGluZSBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgpCitpbmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVu
ZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlw
ZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVH
cmFwaCYgZ3JhcGgsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKKyAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKCFieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSwgImdldExpdmVuZXNzSW5m
b0F0SW5zdHJ1Y3Rpb24gY2FuJ3QgYmUgdXNlZCB0byBhc2sgcXVlc3Rpb25zIGFib3V0IGNoZWNr
cG9pbnRzIik7CiAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNp
Y0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAgICAgQVNT
RVJUKGJsb2NrKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0VudHJ5QmxvY2soKSk7CiAgICAgQVNT
RVJUKCFibG9jay0+aXNFeGl0QmxvY2soKSk7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7CiAgICAg
b3V0LnJlc2l6ZShibG9jay0+b3V0KCkubnVtQml0cygpKTsKLSAgICBjb21wdXRlTG9jYWxMaXZl
bmVzc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCAqYmxv
Y2ssIGJ5dGVjb2RlSW5kZXgsIG91dCk7CisgICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JJbnN0
cnVjdGlvbihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsICpibG9jaywgYnl0ZWNvZGVJ
bmRleCwgb3V0KTsKICAgICByZXR1cm4gb3V0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCBjZTQ3MGM5MjJlODgzZmUw
MTdmMDhkNmIyZjM2NzI0NTczZGU4MTllLi4yOTA4OWE5ZDgzMTBiZmVkMzAxNTIzMzAyN2E4YzYw
MTc1NWM1NmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZVVzZURlZi5jcHAKQEAgLTI5LDEwICsyOSwxMSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICNk
ZWZpbmUgQ0FMTF9GVU5DVE9SKF9fYXJnKSBcCi0gICAgZnVuY3RvcihfX2J5dGVjb2RlLm1fIyNf
X2FyZyk7CisgICAgZnVuY3Rvcihub0NoZWNrcG9pbnRzLCBfX2J5dGVjb2RlLm1fIyNfX2FyZyk7
CiAKICNkZWZpbmUgVVNFU19PUl9ERUZTKF9fb3Bjb2RlLCAuLi4pIFwKICAgICBjYXNlIF9fb3Bj
b2RlOjpvcGNvZGVJRDogeyBcCisgICAgICAgIHN0YXRpY19hc3NlcnQoX19vcGNvZGU6Om9wY29k
ZUlEID49IE5VTUJFUl9PRl9CWVRFQ09ERV9XSVRIX0NIRUNLUE9JTlRTLCAiRG9uJ3QgdXNlIHRo
aXMgbWFjcm8gZm9yIGJ5dGVjb2RlcyB0aGF0IGhhdmUgY2hlY2twb2ludHMuIik7IFwKICAgICAg
ICAgYXV0byBfX2J5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPF9fb3Bjb2RlPigpOyBcCiAgICAg
ICAgIFdURl9MQVpZX0ZPUl9FQUNIX1RFUk0oQ0FMTF9GVU5DVE9SLCBfX1ZBX0FSR1NfXykgXAog
ICAgICAgICByZXR1cm47IFwKQEAgLTQxLDI2ICs0MiwzMSBAQCBuYW1lc3BhY2UgSlNDIHsKICNk
ZWZpbmUgVVNFUyBVU0VTX09SX0RFRlMKICNkZWZpbmUgREVGUyBVU0VTX09SX0RFRlMKIAotdm9p
ZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJl
Z2lzdGVyLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoVmlydHVhbFJlZ2lzdGVyKT4mIGZ1bmN0b3IpCit2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNv
ZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZChDaGVja3BvaW50LCBWaXJ0dWFs
UmVnaXN0ZXIpPiYgZnVuY3RvcikKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpOwogCi0gICAgYXV0byBoYW5kbGVOZXdBcnJheUxpa2UgPSBbJl0oYXV0
byBvcCkgeworICAgIGF1dG8gaGFuZGxlTmV3QXJyYXlMaWtlID0gWyZdIChhdXRvIG9wKSB7CiAg
ICAgICAgIGludCBiYXNlID0gb3AubV9hcmd2Lm9mZnNldCgpOwogICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4ob3AubV9hcmdjKTsgaSsrKQotICAgICAgICAgICAg
ZnVuY3RvcihWaXJ0dWFsUmVnaXN0ZXIgeyBiYXNlIC0gaSB9KTsKKyAgICAgICAgICAgIGZ1bmN0
b3Iobm9DaGVja3BvaW50cywgVmlydHVhbFJlZ2lzdGVyIHsgYmFzZSAtIGkgfSk7CiAgICAgfTsK
IAotICAgIGF1dG8gaGFuZGxlT3BDYWxsTGlrZSA9IFsmXShhdXRvIG9wKSB7Ci0gICAgICAgIGZ1
bmN0b3Iob3AubV9jYWxsZWUpOworICAgIGF1dG8gaGFuZGxlT3BDYWxsTGlrZSA9IFsmXSAoYXV0
byBvcCkgeworICAgICAgICBmdW5jdG9yKG5vQ2hlY2twb2ludHMsIG9wLm1fY2FsbGVlKTsKICAg
ICAgICAgaW50IGxhc3RBcmcgPSAtc3RhdGljX2Nhc3Q8aW50PihvcC5tX2FyZ3YpICsgQ2FsbEZy
YW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDxpbnQ+KG9wLm1fYXJnYyk7IGkrKykKLSAgICAgICAgICAgIGZ1bmN0b3IoVmly
dHVhbFJlZ2lzdGVyIHsgbGFzdEFyZyArIGkgfSk7CisgICAgICAgICAgICBmdW5jdG9yKG5vQ2hl
Y2twb2ludHMsIFZpcnR1YWxSZWdpc3RlciB7IGxhc3RBcmcgKyBpIH0pOwogICAgICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKQotICAgICAgICAgICAgZnVuY3RvcihzY29wZVJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iobm9DaGVja3BvaW50cywgc2NvcGVSZWdpc3Rlcik7
CiAgICAgICAgIHJldHVybjsKICAgICB9OwogCisgICAgYXV0byB1c2VBdEVhY2hDaGVja3BvaW50
ID0gWyZdIChhdXRvIG9wLCBhdXRvLi4uIHZpcnR1YWxSZWdpc3RlcnMpIHsKKyAgICAgICAgZm9y
IChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSAwOyBjaGVja3BvaW50IDwgZGVjbHR5cGUob3ApOjpu
dW1iZXJPZkNoZWNrcG9pbnRzOyArK2NoZWNrcG9pbnQpCisgICAgICAgICAgICAoZnVuY3Rvcihj
aGVja3BvaW50LCB2aXJ0dWFsUmVnaXN0ZXJzKSwgLi4uKTsKKyAgICB9OworCiAgICAgc3dpdGNo
IChvcGNvZGVJRCkgewogICAgIGNhc2Ugb3Bfd2lkZTE2OgogICAgIGNhc2Ugb3Bfd2lkZTMyOgpA
QCAtMjUwLDkgKzI1NiwyMiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwo
VmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BI
YXNTdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFzZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCiAgICAgVVNF
UyhPcEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikK
ICAgICBVU0VTKE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFzZSwgcHJvcGVydHksIGVudW1lcmF0
b3IpCi0gICAgVVNFUyhPcENvbnN0cnVjdFZhcmFyZ3MsIGNhbGxlZSwgdGhpc1ZhbHVlLCBhcmd1
bWVudHMpCi0gICAgVVNFUyhPcENhbGxWYXJhcmdzLCBjYWxsZWUsIHRoaXNWYWx1ZSwgYXJndW1l
bnRzKQotICAgIFVTRVMoT3BUYWlsQ2FsbFZhcmFyZ3MsIGNhbGxlZSwgdGhpc1ZhbHVlLCBhcmd1
bWVudHMpCisKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCk7CisgICAgICAgIHVzZUF0RWFj
aENoZWNrcG9pbnQoYnl0ZWNvZGUsIGJ5dGVjb2RlLm1fY2FsbGVlLCBieXRlY29kZS5tX3RoaXNW
YWx1ZSwgYnl0ZWNvZGUubV9hcmd1bWVudHMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcFRhaWxDYWxsVmFyYXJncz4oKTsKKyAgICAgICAgdXNlQXRFYWNoQ2hl
Y2twb2ludChieXRlY29kZSwgYnl0ZWNvZGUubV9jYWxsZWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
LCBieXRlY29kZS5tX2FyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKTsKKyAgICAgICAgdXNlQXRFYWNoQ2hlY2tw
b2ludChieXRlY29kZSwgYnl0ZWNvZGUubV9jYWxsZWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBi
eXRlY29kZS5tX2FyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBVU0VT
KE9wR2V0RGlyZWN0UG5hbWUsIGJhc2UsIHByb3BlcnR5LCBpbmRleCwgZW51bWVyYXRvcikKIApA
QCAtMjY1LDggKzI4NCwyMSBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwo
VmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhP
cFlpZWxkLCBnZW5lcmF0b3IsIGFyZ3VtZW50KQogCi0gICAgVVNFUyhPcEl0ZXJhdG9yT3Blbiwg
c3ltYm9sSXRlcmF0b3IsIGl0ZXJhYmxlKQotICAgIFVTRVMoT3BJdGVyYXRvck5leHQsIGl0ZXJh
dG9yLCBuZXh0LCBpdGVyYWJsZSkKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKKyAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKKyAg
ICAgICAgZnVuY3RvcihPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbCwgYnl0ZWNvZGUubV9zeW1i
b2xJdGVyYXRvcik7CisgICAgICAgIGZ1bmN0b3IoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGws
IGJ5dGVjb2RlLm1faXRlcmFibGUpOworICAgICAgICBmdW5jdG9yKE9wSXRlcmF0b3JPcGVuOjpn
ZXROZXh0LCBieXRlY29kZS5tX2l0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOworICAgICAgICB1c2VBdEVhY2hDaGVja3Bv
aW50KGJ5dGVjb2RlLCBieXRlY29kZS5tX2l0ZXJhdG9yKTsKKyAgICAgICAgZnVuY3RvcihPcEl0
ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQsIGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgICAgIGZ1bmN0
b3IoT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0LCBieXRlY29kZS5tX2l0ZXJhYmxlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc3ByZWFk
OgogICAgICAgICBoYW5kbGVOZXdBcnJheUxpa2UoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlX
aXRoU3ByZWFkPigpKTsKQEAgLTI3OSw3ICszMTEsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0
ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3Ry
dQogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wU3RyY2F0PigpOwog
ICAgICAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOwogICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fY291bnQ7IGkrKykKLSAgICAgICAgICAgIGZ1bmN0
b3IoVmlydHVhbFJlZ2lzdGVyIHsgYmFzZSAtIGkgfSk7CisgICAgICAgICAgICBmdW5jdG9yKG5v
Q2hlY2twb2ludHMsIFZpcnR1YWxSZWdpc3RlciB7IGJhc2UgLSBpIH0pOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0zMDIsNyArMzM0LDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVj
b2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJbnN0cnUK
ICAgICB9CiB9CiAKLXZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25l
ZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4mIGZ1bmN0b3IpCit2b2lkIGNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVJbmRleEltcGwodW5zaWduZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBjb25zdCBGdW5jdGlvbjx2b2lkKENoZWNrcG9pbnQsIFZpcnR1YWxSZWdpc3Rlcik+
JiBmdW5jdG9yKQogewogICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKICAg
ICBjYXNlIG9wX3dpZGUxNjoKQEAgLTQxMiwxMCArNDQ0LDIzIEBAIHZvaWQgY29tcHV0ZURlZnNG
b3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1CiAgICAgREVGUyhPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cCwgZHN0KQogICAgIERF
RlMoT3BOZXdBc3luY0Z1bmMsIGRzdCkKICAgICBERUZTKE9wTmV3QXN5bmNGdW5jRXhwLCBkc3Qp
Ci0gICAgREVGUyhPcENhbGxWYXJhcmdzLCBkc3QpCi0gICAgREVGUyhPcFRhaWxDYWxsVmFyYXJn
cywgZHN0KQorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKKyAgICAgICAgZnVuY3RvcihP
cENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgYnl0ZWNvZGUubV9kc3QpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFRhaWxDYWxsVmFyYXJncz4oKTsKKyAgICAgICAg
ZnVuY3RvcihPcFRhaWxDYWxsVmFyYXJnczo6bWFrZUNhbGwsIGJ5dGVjb2RlLm1fZHN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7Cisg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdz
PigpOworICAgICAgICBmdW5jdG9yKE9wQ29uc3RydWN0VmFyYXJnczo6bWFrZUNhbGwsIGJ5dGVj
b2RlLm1fZHN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIERFRlMoT3BUYWlsQ2Fs
bEZvcndhcmRBcmd1bWVudHMsIGRzdCkKLSAgICBERUZTKE9wQ29uc3RydWN0VmFyYXJncywgZHN0
KQogICAgIERFRlMoT3BHZXRGcm9tU2NvcGUsIGRzdCkKICAgICBERUZTKE9wQ2FsbCwgZHN0KQog
ICAgIERFRlMoT3BUYWlsQ2FsbCwgZHN0KQpAQCAtNTAxLDEyICs1NDYsMjggQEAgdm9pZCBjb21w
dXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKHVuc2lnbmVkIG51bVZhcnMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnUKIAogICAgIERFRlMoT3BDYXRjaCwgZXhjZXB0aW9uLCB0aHJvd25WYWx1
ZSkKIAotICAgIERFRlMoT3BJdGVyYXRvck9wZW4sIGl0ZXJhdG9yLCBuZXh0KQotICAgIERFRlMo
T3BJdGVyYXRvck5leHQsIGRvbmUsIHZhbHVlKQorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbjog
eworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVu
PigpOworCisgICAgICAgIGZ1bmN0b3IoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGwsIGJ5dGVj
b2RlLm1faXRlcmF0b3IpOworICAgICAgICBmdW5jdG9yKE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0
LCBieXRlY29kZS5tX25leHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBv
cF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BJdGVyYXRvck5leHQ+KCk7CisKKyAgICAgICAgZnVuY3RvcihPcEl0ZXJhdG9yTmV4dDo6
Z2V0RG9uZSwgYnl0ZWNvZGUubV9kb25lKTsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBjbGFpbSB3
ZSBzZXQgbV92YWx1ZSBoZXJlIGJlY2F1c2Ugd2UgY291bGQgZWFybHkgZXhpdCBmcm9tIHRoZSBi
eXRlY29kZSBpZiB3ZSBhcmUgZG9uZS4KKyAgICAgICAgZnVuY3RvcihPcEl0ZXJhdG9yTmV4dDo6
Z2V0RG9uZSwgYnl0ZWNvZGUubV92YWx1ZSk7CisKKyAgICAgICAgZnVuY3RvcihPcEl0ZXJhdG9y
TmV4dDo6Z2V0VmFsdWUsIGJ5dGVjb2RlLm1fdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAg
fQogCiAgICAgY2FzZSBvcF9lbnRlcjogewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1W
YXJzOyBpLS07KQotICAgICAgICAgICAgZnVuY3Rvcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChp
KSk7CisgICAgICAgICAgICBmdW5jdG9yKG5vQ2hlY2twb2ludHMsIHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCmluZGV4IGIzYjAwYTk5MjM3
MzNkMzFhYzg0ZTVkODgyZGE5MDNlOWJlZGM3ZmIuLjliNDQxNzFkNTk2YzNjZjQzZTI3NjhhNDIz
ZjJmNGQ4MjczYWI1ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZVVzZURlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5oCkBAIC0zMiwyMSArMzIsMjMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIsIGNv
bnN0IEluc3RydWN0aW9uKiwgY29uc3QgRnVuY3Rpb248dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYp
Owotdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKHVuc2lnbmVkLCBjb25zdCBJ
bnN0cnVjdGlvbiosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4mKTsKK3Zv
aWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0
IEluc3RydWN0aW9uKiwgY29uc3QgRnVuY3Rpb248dm9pZChDaGVja3BvaW50LCBWaXJ0dWFsUmVn
aXN0ZXIpPiYpOwordm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKHVuc2lnbmVk
LCBjb25zdCBJbnN0cnVjdGlvbiosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoQ2hlY2twb2ludCwgVmly
dHVhbFJlZ2lzdGVyKT4mKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQmxvY2s+Ci12b2lkIGNvbXB1
dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChCbG9jayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0aW9uPHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4mIGZ1
bmN0b3IpCit2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0aW9uPHZvaWQoQ2hl
Y2twb2ludCwgVmlydHVhbFJlZ2lzdGVyKT4mIGZ1bmN0b3IpCiB7CiAgICAgT3Bjb2RlSUQgb3Bj
b2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3Bf
ZW50ZXIgJiYgKGNvZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIHx8
IGNvZGVCbG9jay0+dXNlc0V2YWwoKSkgJiYgY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkuaXNW
YWxpZCgpKQotICAgICAgICBmdW5jdG9yKGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKTsKKyAg
ICBpZiAob3Bjb2RlSUQgIT0gb3BfZW50ZXIgJiYgKGNvZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRo
RGVidWdnaW5nT3Bjb2RlcygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSkgJiYgY29kZUJsb2Nr
LT5zY29wZVJlZ2lzdGVyKCkuaXNWYWxpZCgpKSB7CisgICAgICAgIGZvciAoQ2hlY2twb2ludCBj
aGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2lu
dC0tOykKKyAgICAgICAgICAgIGZ1bmN0b3IoY2hlY2twb2ludCwgY29kZUJsb2NrLT5zY29wZVJl
Z2lzdGVyKCkpOworICAgIH0KIAogICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwo
Y29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCksIGluc3RydWN0aW9uLCBmdW5jdG9yKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQmxvY2s+Ci12b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRl
eChCbG9jayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4mIGZ1bmN0b3IpCit2b2lkIGNvbXB1dGVE
ZWZzRm9yQnl0ZWNvZGVJbmRleChCbG9jayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0aW9uPHZvaWQoQ2hlY2twb2ludCwgVmlydHVhbFJlZ2lz
dGVyKT4mIGZ1bmN0b3IpCiB7CiAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbChj
b2RlQmxvY2stPm51bVZhcnMoKSwgaW5zdHJ1Y3Rpb24sIGZ1bmN0b3IpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA5MTgwNWM0Mjc4MmU0
ZGE3ODdlNjM5NmU2MDM4ZGFjOWQ4MzI2ODQ4Li4zZWZlODMzNWU0Y2UzMmQ5Mzc2MTZiZWY1NzE1
MWUyOWNlOTQ1YzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcApAQCAtMTkyMyw3ICsxOTIzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNo
TGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYKICAg
ICAvLyBpbnRvIHRoZSBERkcuCiAKICAgICBhdXRvIG5leHRPZmZzZXQgPSBpbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4KS5uZXh0KCkub2Zmc2V0KCk7Ci0gICAgRmFzdEJpdFZlY3RvciBs
aXZlTG9jYWxzID0gYnl0ZWNvZGVMaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5k
ZXgodGhpcywgQnl0ZWNvZGVJbmRleChuZXh0T2Zmc2V0KSk7CisgICAgRmFzdEJpdFZlY3RvciBs
aXZlTG9jYWxzID0gYnl0ZWNvZGVMaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9u
KHRoaXMsIEJ5dGVjb2RlSW5kZXgobmV4dE9mZnNldCkpOwogICAgIFZlY3RvcjxWaXJ0dWFsUmVn
aXN0ZXI+IGxpdmVPcGVyYW5kczsKICAgICBsaXZlT3BlcmFuZHMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShsaXZlTG9jYWxzLmJpdENvdW50KCkpOwogICAgIGxpdmVMb2NhbHMuZm9yRWFjaFNldEJp
dChbJl0gKHVuc2lnbmVkIGxpdmVMb2NhbCkgewpAQCAtMzEwOSw3ICszMTA5LDcgQEAgdm9pZCBD
b2RlQmxvY2s6OnZhbGlkYXRlKCkKIHsKICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2
ZW5lc3ModGhpcyk7IC8vIENvbXB1dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNu
J3QgZWZmZWN0IENvZGVCbG9jayBmb290cHJpbnQuCiAgICAgCi0gICAgRmFzdEJpdFZlY3RvciBs
aXZlQXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KHRoaXMs
IEJ5dGVjb2RlSW5kZXgoMCkpOworICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0SGVhZCA9IGxpdmVu
ZXNzLmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24odGhpcywgQnl0ZWNvZGVJbmRleCgwKSk7
CiAgICAgCiAgICAgaWYgKGxpdmVBdEhlYWQubnVtQml0cygpICE9IHN0YXRpY19jYXN0PHNpemVf
dD4obV9udW1DYWxsZWVMb2NhbHMpKSB7CiAgICAgICAgIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNv
ZGVMaXZlbmVzcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29k
ZUxpdmVuZXNzLmgKaW5kZXggNzkxNDUzZjNmZDcyMzQzNmVlMGVkNTE5MGYwYmMyN2Q3ZGEyMzA1
Yi4uNzk4NjJiOGE2NzAxODcxYzliM2RiMzYzMGY4NjZlZGQzYTlkMDZlNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgK
QEAgLTM1LDE4ICszNSwxOSBAQCBjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiBjbGFz
cyBDb2RlQmxvY2s7CiAKIC8vIE5vdGU6IEZ1bGwgYnl0ZWNvZGUgbGl2ZW5lc3MgZG9lcyBub3Qg
dHJhY2sgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaXZlbmVzcyBvZiB0ZW1wcy4KLS8vIElm
IHlvdSB3YW50IHRtcCBsaXZlbmVzcyBmb3IgYSBjaGVja3BvaW50IGFzayBsaXZlbmVzc0ZvckNo
ZWNrcG9pbnQuCisvLyBJZiB5b3Ugd2FudCB0bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2twb2ludCBh
c2sgdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50LgogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGNvbnN0IEZhc3RC
aXRWZWN0b3ImIGdldExpdmVuZXNzKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTGl2ZW5l
c3NDYWxjdWxhdGlvblBvaW50IHBvaW50KSBjb25zdAogICAgIHsKLSAgICAgICAgLy8gRklYTUU6
IFdoYXQgc2hvdWxkIHRoaXMgZG8gd2hlbiB3ZSBoYXZlIGNoZWNrcG9pbnRzPworICAgICAgICAv
LyBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IG92ZXJmbG93aW5nIGludG8gdGhlIG5leHQg
Ynl0ZWNvZGVvZmZzZXQgaW4gb3VyIHZlY3RvcnMgYmVjYXVzZSB3ZQorICAgICAgICAvLyBzdGF0
aWMgYXNzZXJ0IHRoYXQgYnl0ZWNvZGUgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVy
IG9mIGNoZWNrcG9pbnRzIGluIEJ5dGVjb2RlU3RydWN0cy5oCiAgICAgICAgIHN3aXRjaCAocG9p
bnQpIHsKICAgICAgICAgY2FzZSBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZToK
LSAgICAgICAgICAgIHJldHVybiBtX2JlZm9yZVVzZVZlY3RvcltieXRlY29kZUluZGV4Lm9mZnNl
dCgpXTsKKyAgICAgICAgICAgIHJldHVybiBtX3VzZXNCZWZvcmVbdG9JbmRleChieXRlY29kZUlu
ZGV4KV07CiAgICAgICAgIGNhc2UgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpBZnRlclVzZToK
LSAgICAgICAgICAgIHJldHVybiBtX2FmdGVyVXNlVmVjdG9yW2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCldOworICAgICAgICAgICAgcmV0dXJuIG1fdXNlc0FmdGVyW3RvSW5kZXgoYnl0ZWNvZGVJbmRl
eCldOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQpAQCAtNTksMTAgKzYwLDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKICAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHRv
SW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KSB7IHJldHVybiBieXRlY29kZUluZGV4
Lm9mZnNldCgpICsgYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7IH0KKwogICAgIC8vIEZJWE1F
OiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNtIHRvIG1ha2UgdGhlbSBjb21wYWN0
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0Mjc8
UGFzdGU+Ci0gICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX2JlZm9yZVVzZVZlY3RvcjsKLSAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IG1fYWZ0ZXJVc2VWZWN0b3I7CisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDQyNworICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9y
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV91c2VzQmVmb3JlOworICAgIFZlY3RvcjxGYXN0
Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV91c2VzQWZ0ZXI7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0cnVjdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3Ry
dWN0aW9uLmgKaW5kZXggM2Q3MGNkNTQzZWNmYWU5MDIyNTAyOTYwMWEwZDQwNWVjNjcxYjJkMC4u
ZjYzYWQyOWYyMGY1MWU2YzYwOWZjY2I5ZGJjYjU1ODk2ZTMyMmYyOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKQEAgLTM5LDYgKzM5LDcgQEAgc3Ry
dWN0IEpTT3Bjb2RlVHJhaXRzIHsKICAgICBzdGF0aWMgY29uc3RleHByIE9wY29kZUlEIHdpZGUz
MiA9IG9wX3dpZGUzMjsKICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkKiBvcGNv
ZGVMZW5ndGhzID0gOjpKU0M6Om9wY29kZUxlbmd0aHM7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBj
b25zdCBjaGFyKiBjb25zdCogb3Bjb2RlTmFtZXMgPSA6OkpTQzo6b3Bjb2RlTmFtZXM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBhdXRvIGNoZWNrcG9pbnRDb3VudFRhYmxlID0gYnl0ZWNvZGVDaGVj
a3BvaW50Q291bnRUYWJsZTsKIH07CiAKIHN0cnVjdCBXYXNtT3Bjb2RlVHJhaXRzIHsKQEAgLTUw
LDYgKzUxLDcgQEAgc3RydWN0IFdhc21PcGNvZGVUcmFpdHMgewogICAgIHN0YXRpYyBjb25zdGV4
cHIgT3Bjb2RlSUQgd2lkZTMyID0gd2FzbV93aWRlMzI7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBj
b25zdCB1bnNpZ25lZCogb3Bjb2RlTGVuZ3RocyA9IHdhc21PcGNvZGVMZW5ndGhzOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogY29uc3QqIG9wY29kZU5hbWVzID0gd2FzbU9wY29k
ZU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjaGVja3BvaW50Q291bnRUYWJsZSA9
IHdhc21DaGVja3BvaW50Q291bnRUYWJsZTsKIH07CiAKIApAQCAtMTIyLDYgKzEyNCwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBvcGNvZGVJRDxUcmFpdHM+KCkgPCBUcmFpdHM6Om51bWJl
ck9mQnl0ZWNvZGVzV2l0aENoZWNrcG9pbnRzOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFRyYWl0cyA9IEpTT3Bjb2RlVHJhaXRzPgorICAgIHVuc2lnbmVkIG51bWJlck9mQ2hlY2tw
b2ludHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNDaGVja3BvaW50czxUcmFpdHM+
KCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIFRyYWl0czo6Y2hlY2tw
b2ludENvdW50VGFibGVbb3Bjb2RlSUQ8VHJhaXRzPigpXTsKKyAgICB9CisKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUcmFpdHMgPSBKU09wY29kZVRyYWl0cz4KICAgICBpbnQgc2l6ZVNoaWZ0QW1v
dW50KCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luc3RydWN0aW9uU3RyZWFtLmNwcAppbmRleCAzOGNhZjk1ZmQ5ZTA2MTA1M2UxMzVhNTlm
ZTFhM2M3NWY4NWE4NWQzLi42YjlkNjhjMTFmNGI3N2ZlZTQ5MTZmNzA0YmVmNTQwNGZmOTk4NWNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25T
dHJlYW0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlv
blN0cmVhbS5jcHAKQEAgLTQ2LDQgKzQ2LDE0IEBAIGJvb2wgSW5zdHJ1Y3Rpb25TdHJlYW06OmNv
bnRhaW5zKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikgY29uc3QKICAgICByZXR1cm4gcG9pbnRl
ciA+PSBtX2luc3RydWN0aW9ucy5kYXRhKCkgJiYgcG9pbnRlciA8IChtX2luc3RydWN0aW9ucy5k
YXRhKCkgKyBtX2luc3RydWN0aW9ucy5zaXplKCkpOwogfQogCitzaXplX3QgSW5zdHJ1Y3Rpb25T
dHJlYW06Omluc3RydWN0aW9uQ291bnQoKSBjb25zdAoreworICAgIHNpemVfdCByZXN1bHQgeyAw
IH07CisgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0cnVjdGlvbiA6ICp0aGlzKSB7CisgICAgICAg
IFVOVVNFRF9QQVJBTShpbnN0cnVjdGlvbik7CisgICAgICAgIHJlc3VsdCsrOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCmluZGV4IDNlOTc4ZDMzMmQ1OGQ3MGE1MjlkMjhm
MDUyNjY0NDhjZmY3NmViMTAuLjQwZDExZDY4MzM1NjZkMzU3MTM1YmZlZjE4YjBlMjI3MTRlN2Jj
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlv
blN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlv
blN0cmVhbS5oCkBAIC0xNjYsNiArMTY2LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gUmVm
IHsgbV9pbnN0cnVjdGlvbnMsIG9mZnNldCB9OwogICAgIH0KIAorICAgIC8vIFRoaXMgaXMgdGhl
IGFjdHVhbCBudW1iZXIgb2YgYnl0ZWNvZGVzIGluIHRoZSBzdHJlYW0gaWdub3Jpbmcgb3BlcmFu
ZHMuCisgICAgc2l6ZV90IGluc3RydWN0aW9uQ291bnQoKSBjb25zdDsKICAgICBpbmxpbmUgc2l6
ZV90IHNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNp
emUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggZTY0NmQwNGFiOTM5ZmZiNzY3MjRjYzBhOGQ0NTFm
MjhkYTNmMGVkMi4uZGE4NGJmN2Q2NWE5MDk2ZjMxYjc3OGZiOThhYWNmYWVkYWE3ZDFkOCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKQEAgLTUyMTUsNyArNTIxNSw3IEBAIHZvaWQgRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dl
bmVyCiAgICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgp
OyBpc1ZhbGlkKCkgJiYgb2Zmc2V0IDwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0OykgewogICAgICAg
ICBhdXRvIGluc3RydWN0aW9uID0gZ2VuZXJhdG9yLmluc3RydWN0aW9ucygpLmF0KG9mZnNldCk7
CiAgICAgICAgIEFTU0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wRW50ZXI+KCkpOwotICAgICAgICBj
b21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbi5wdHIoKSwg
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICBjb21wdXRlRGVmc0ZvckJ5
dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbi5wdHIoKSwgWyZdIChDaGVja3BvaW50
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgaWYgKGxvY2FsKCktPnZp
cnR1YWxSZWdpc3RlcigpID09IG9wZXJhbmQpCiAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgp
OwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rm9yQWxsS2lsbHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMu
aAppbmRleCA4MGNkNzNkZTY2MzUxNjNmNTJjYjY4YWQ5OWIyZjViNTg4YmUxYzQ0Li44ZDc4NTk1
MjQwZWNhOTZmODJjZDk1Yjg0ZGUzYjhmM2RhM2IzM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCkBAIC03OSwxOCArNzksMjEgQEAgdm9pZCBmb3JBbGxL
aWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVB
ZnRlciwgY29uc3QKICAgICAgICAgICAgIEFTU0VSVChiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLmNo
ZWNrcG9pbnQoKSAhPSBhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKTsKICAgICAg
ICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQo
KSA9PSBhZnRlci5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkgfHwgbm9kZUFmdGVyLT5vcCgpID09
IEV4aXRPSyB8fCBub2RlQWZ0ZXItPm9wKCkgPT0gSW52YWxpZGF0aW9uUG9pbnQsICJXaGVuIHRo
ZSBERkcgZG9lcyBjb2RlIG1vdGlvbiBpdCBzaG91bGQgY2hhbmdlIHRoZSBmb3JFeGl0IG9yaWdp
biB0byBtYXRjaCB0aGUgc3Vycm91bmRpbmcgYnl0ZWNvZGVzLiIpOwogCi0gICAgICAgICAgICBh
dXRvIGNoZWNrcG9pbnRMaXZlQmVmb3JlID0gbGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxv
Y2ssIGJlZm9yZS5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgYXV0byBjaGVja3BvaW50
TGl2ZUFmdGVyID0gbGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFmdGVyLmJ5dGVj
b2RlSW5kZXgoKSk7CisgICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUgPSB0bXBMaXZlbmVzc0Zv
ckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAg
ICAgICBhdXRvIGxpdmVBZnRlciA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2Nr
LCBhZnRlci5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgbGl2ZUFmdGVyLmludmVydCgp
OworICAgICAgICAgICAgbGl2ZUJlZm9yZS5maWx0ZXIobGl2ZUFmdGVyKTsKIAotICAgICAgICAg
ICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVuZXNzRm9y
KGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQWZ0ZXIg
PSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLCBMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CisgICAgICAgICAgICBsaXZlQmVmb3JlLmZv
ckVhY2hTZXRCaXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgZnVuY3Rvcihy
ZW1hcE9wZXJhbmQoYmVmb3JlSW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kOjp0bXAodG1wKSkpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlLmJ5dGVjb2RlSW5kZXgo
KS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBtb3Zpbmcgb24gdG8gYW5v
dGhlciBieXRlY29kZSwgYWxsIHRlbXBzIHNob3VsZCBiZSBkZWFkIG5vdy4KKyAgICAgICAgICAg
IGF1dG8gbGl2ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBi
ZWZvcmUuYnl0ZWNvZGVJbmRleCgpKTsKIAotICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJh
bmQgOiBjaGVja3BvaW50TGl2ZUJlZm9yZSkgewotICAgICAgICAgICAgICAgIGlmIChjaGVja3Bv
aW50TGl2ZUFmdGVyLmNvbnRhaW5zKG9wZXJhbmQpIHx8ICghb3BlcmFuZC5pc1RtcCgpICYmIGxp
dmVBZnRlcltvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpXSkpCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5k
KGJlZm9yZUlubGluZUNhbGxGcmFtZSwgb3BlcmFuZCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JFYWNoU2V0Qml0KFsmXSAo
c2l6ZV90IHRtcCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGJlZm9y
ZUlubGluZUNhbGxGcmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkpKTsKKyAgICAgICAgICAgIH0pOwog
ICAgICAgICB9CiAKICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9
IGdyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCmluZGV4IDUwMzQxMjAxZWJkMjBmMzZiZDM2ODAzNjllMjkzOGZmNzQzMjMyMTAu
LjhlODQ2Y2JlOWQ0ZDFjN2UxNjliY2Q4NmY3YTc1MDQ0YTkxZDhmNTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0xMTUyLDggKzExNTIsOCBAQCBib29sIEdyYXBo
Ojppc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPm51bVRtcHMoKSB8fCBvcGVyYW5kSW5kZXgg
PCB0bXBPZmZzZXQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGF1
dG8gbGl2ZSA9IGxpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRy
LT5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIGxpdmUuY29udGFpbnMob3Bl
cmFuZCk7CisgICAgICAgICAgICBhdXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2lu
dCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAg
ICAgcmV0dXJuIGJpdE1hcC5nZXQob3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsKICAgICAgICAg
fQogCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3Rl
cigpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAppbmRleCA1MmIzNzE3NDNhZDg2YTI4YmFkNjJkMWVlYTljMGRlMTQ3ODgwMDUz
Li44NjM2MjI3ZjM5NDgzMzVkYjNkODQwZTgxZDNmYTBjNWNiYmE3ZjlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC05MDQsOSArOTA0LDEwIEBAIHB1YmxpYzoKIAogICAg
ICAgICAgICAgaWYgKGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkp
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1UbXBzKCkpOwotICAgICAg
ICAgICAgICAgIGF1dG8gbGl2ZSA9IGxpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBj
b2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgICAgIGZvciAoT3Bl
cmFuZCBvcGVyYW5kIDogbGl2ZSkKLSAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9w
ZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgYXV0byBs
aXZlVG1wcyA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2lu
UHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgICAgIGxpdmVUbXBzLmZvckVhY2hT
ZXRCaXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVt
YXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAppbmRleCBkNDMwN2VkODczMDZmNDQ2NjIwYjc4MWIw
ZjAyZDVjYTQ1M2M5YmFiLi5jYzhmOWUxNzVkZmE5Y2E4YzA4ZTVjNzIwMzhjNjQ0ZjFkZWI3YzJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFs
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92
YWxQaGFzZS5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwog
ICAgICAgICAKICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBMb2NhbHM6ICIsIG1fc3RhdGUsICJcbiIp
OworICAgICAgICAgICAgZGF0YUxvZygiICAgIExvY2FscyBhdCAiLCBibG9jay0+dGVybWluYWwo
KS0+b3JpZ2luLmZvckV4aXQsICI6ICIsIG1fc3RhdGUsICJcbiIpOwogICAgICAgICAKICAgICAg
ICAgLy8gQXNzdW1lIHRoYXQgYmxvY2tzIGFmdGVyIHVzIGV4aXQuCiAgICAgICAgIGN1cnJlbnRF
cG9jaC5idW1wKCk7CkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBNb3ZIaW50KSB7CiAgICAgICAgICAgICAgICAgRXBvY2ggbG9jYWxFcG9j
aCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CiAgICAgICAgICAg
ICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0ICIsIG5vZGUsICI6IGN1cnJlbnQgPSAiLCBj
dXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxuIik7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBBdCAiLCBub2RlLCAiICgiLCBub2RlLT51bmxpbmtlZE9w
ZXJhbmQoKSwgIik6IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9j
YWxFcG9jaCwgIlxuIik7CiAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2Fs
RXBvY2ggPT0gY3VycmVudEVwb2NoKSB7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKFpvbWJpZUhpbnQpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKSA9IEVkZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCmluZGV4
IDcxNjFmYmYyNjhmMzUwMTkyOTc4YTJmODUyZDUxY2M4YjEwOWU3MzUuLjVhZGU5Yzk1YTA0ZWM2
NTRiZTI5MmVhZDExNTU0Yjg0OWZhZTY5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcApAQCAtNzU4LDcgKzc1OCw3IEBAIHZvaWQgUGxhbjo6Y2xlYW5NdXN0SGFuZGxlVmFs
dWVzSWZOZWNlc3NhcnkoKQogICAgICAgICByZXR1cm47CiAKICAgICBDb2RlQmxvY2sqIGFsdGVy
bmF0aXZlID0gbV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0gICAgRmFzdEJpdFZlY3RvciBs
aXZlbmVzcyA9IGFsdGVybmF0aXZlLT5saXZlbmVzc0FuYWx5c2lzKCkuZ2V0TGl2ZW5lc3NJbmZv
QXRCeXRlY29kZUluZGV4KGFsdGVybmF0aXZlLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCk7Cisg
ICAgRmFzdEJpdFZlY3RvciBsaXZlbmVzcyA9IGFsdGVybmF0aXZlLT5saXZlbmVzc0FuYWx5c2lz
KCkuZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbihhbHRlcm5hdGl2ZSwgbV9vc3JFbnRyeUJ5
dGVjb2RlSW5kZXgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IG1fbXVzdEhhbmRsZVZh
bHVlcy5udW1iZXJPZkxvY2FscygpOyBsb2NhbC0tOykgewogICAgICAgICBpZiAoIWxpdmVuZXNz
W2xvY2FsXSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bj
b2RlLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKaW5kZXgg
ODIzNzRiN2ZiZTg2ZDU3ODhiM2E0MDU4MTU4YTg5OGQ2YTZhMjA4Yy4uMDVkMDk4ODA2OTA2ZWE4
MjIzMDJkYzIxMDE2MmFjOGUwOWU2ODZkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9PcGNvZGUucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9PcGNvZGUucmIKQEAgLTEzMCwxNSArMTMwLDE4IEBAIGNsYXNzIE9wY29kZQogICAgICAg
ICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVkX25hbWV9IDogcHVibGljIEluc3RydWN0aW9u
IHsKICAgICAje29wY29kZUlEfQorICAgICN7bGVuZ3RoVmFsdWV9CiAgICAgI3t0ZW1wc30KICAg
ICAje2NoZWNrcG9pbnRWYWx1ZXN9CiAKKwogI3tlbWl0dGVyfQogI3tkdW1wZXJ9CiAje2NvbnN0
cnVjdG9yc30KICN7c2V0dGVyc30je21ldGFkYXRhX3N0cnVjdF9hbmRfYWNjZXNzb3J9CiAje21l
bWJlcnN9CiB9OworI3tjaGVja3BvaW50U2l6ZUFzc2VydH0KIEVPRgogICAgIGVuZAogCkBAIC0x
NDYsMTIgKzE0OSwyMiBAQCBFT0YKICAgICAgICAgInN0YXRpYyBjb25zdGV4cHIgI3tvcGNvZGVJ
RFR5cGV9IG9wY29kZUlEID0gI3tuYW1lfTsiCiAgICAgZW5kCiAKKyAgICBkZWYgbGVuZ3RoVmFs
dWUKKyAgICAgICAgInN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGxlbmd0aCA9ICN7bGVuZ3RofTsi
CisgICAgZW5kCisKICAgICBkZWYgY2hlY2twb2ludFZhbHVlcwogICAgICAgICByZXR1cm4gaWYg
QGNoZWNrcG9pbnRzLm5pbD8KIAogICAgICAgICBbImVudW0gQ2hlY2twb2ludHMgOiB1aW50OF90
IHsiXS5jb25jYXQoY2hlY2twb2ludHMubWFweyB8Y2hlY2twb2ludHwgIiAgICAgICAgI3tjaGVj
a3BvaW50fSwiIH0pLmNvbmNhdChbIiAgICAgICAgbnVtYmVyT2ZDaGVja3BvaW50cywiLCAiICAg
IH07Il0pLmpvaW4oIlxuIikKICAgICBlbmQKIAorICAgIGRlZiBjaGVja3BvaW50U2l6ZUFzc2Vy
dAorICAgICAgICByZXR1cm4gaWYgQGNoZWNrcG9pbnRzLm5pbD8KKworICAgICAgICAic3RhdGlj
X2Fzc2VydCgje2NhcGl0YWxpemVkX25hbWV9OjpsZW5ndGggPiAje2NhcGl0YWxpemVkX25hbWV9
OjpudW1iZXJPZkNoZWNrcG9pbnRzLCBcIkZ1bGxCeXRlY29kZUxpdmVzcyByZWxpZXMgb24gdGhl
IGxlbmd0aCBvZiAje2NhcGl0YWxpemVkX25hbWV9IGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUgbnVt
YmVyIG9mIGNoZWNrcG9pbnRzXCIpOyIKKyAgICBlbmQKKwogICAgIGRlZiB0ZW1wcwogICAgICAg
ICByZXR1cm4gaWYgQHRtcHMubmlsPwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L1NlY3Rpb24ucmIKaW5kZXggZjgzODBlZDU3NWQzMTNjNmVhMDZhYjVkNzJjMjVhODY3NzZkOWNj
OC4uZDllOTk0ZWVhZDYzNDhjYzM4ODkxMTJhMTJjZjVhMWNjMzA0MTAzNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgpAQCAtODQsMTMgKzg0LDE1IEBAIGNs
YXNzIFNlY3Rpb24KIAogICAgICAgaWYgY29uZmlnWzplbWl0X2luX3N0cnVjdHNfZmlsZV0KICAg
ICAgICAgICBpID0gMAorICAgICAgICAgIG91dC53cml0ZSgic3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCAje2NvbmZpZ1s6bWFjcm9fbmFtZV9jb21wb25lbnRdLmRvd25jYXNlfUNoZWNrcG9pbnRD
b3VudFRhYmxlW10gPSB7XG4iKQogICAgICAgICAgIHdoaWxlIHRydWUKICAgICAgICAgICAgICAg
aWYgIW9wY29kZXNbaV0uY2hlY2twb2ludHMKLSAgICAgICAgICAgICAgICAgIG91dCA8PCAiXG4i
CisgICAgICAgICAgICAgICAgICBvdXQgPDwgIn07XG5cbiIKICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiI2RlZmluZSBOVU1CRVJfT0ZfI3tjb25maWdbOm1hY3JvX25hbWVfY29tcG9uZW50XX1f
V0lUSF9DSEVDS1BPSU5UUyAje2l9XG4iCiAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAg
ICAgICAgICBlbmQKIAorICAgICAgICAgICAgICBvdXQud3JpdGUoIiAgICAje29wY29kZXNbaV0u
Y2hlY2twb2ludHMubGVuZ3RofSxcbiIpCiAgICAgICAgICAgICAgIGkgKz0gMQogICAgICAgICAg
IGVuZAogICAgICAgICAgIG91dCA8PCAiXG4iCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxv
ZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFlNGMwZGNlYmE5ZGY3NDE1YjVlNjI3NDNiZTkz
NjE2NzEwMzI3YmUuLjczOWVlMDE2NThjMjY5NDhmOGI5Mjc0ZjlkZDAwNDlkOWI0MDVmOGIgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMjAtMDYtMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnl0ZWNvZGUgVXNlRGVmIHNob3VsZCBiZSBhd2FyZSBvZiBjaGVj
a3BvaW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjEzNTY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBzdHJlc3MvZm9yLW9mLW5lZWRzLWJ5dGVjb2RlLXVzZS1hdC1jaGVja3BvaW50LWFmdGVyLWRl
Zi5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorCiAyMDIwLTA2LTIzICBNYXJrIExhbSAgPG1h
cmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBIYW5kbGUgc3RyaW5nIG92ZXJmbG93IGluIERG
RyBncmFwaCBkdW1wIHdoaWxlIHZhbGlkYXRpbmcgQUkuCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9mb3Itb2YtbmVlZHMtYnl0ZWNvZGUtdXNlLWF0LWNoZWNrcG9pbnQtYWZ0ZXItZGVmLmpz
IGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLW5lZWRzLWJ5dGVjb2RlLXVzZS1hdC1jaGVja3BvaW50
LWFmdGVyLWRlZi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDE4MzUxZDliZjczZDc0N2Y3NjgxM2QxNjNkNjA3
NDNkODFkNjA2Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLW5lZWRz
LWJ5dGVjb2RlLXVzZS1hdC1jaGVja3BvaW50LWFmdGVyLWRlZi5qcwpAQCAtMCwwICsxLDE0IEBA
CisvL0AgcmVxdWlyZU9wdGlvbnMoIi0taml0UG9saWN5U2NhbGU9MCIsICItLXZhbGlkYXRlRlRM
T1NSRXhpdExpdmVuZXNzPTEiKQorCitmdW5jdGlvbiBmb28oKSB7CisgIGZvciAobGV0IGk9MDsg
aTwxMDA7IGkrKykgeworICAgIGxldCB1OCA9IG5ldyBVaW50OEFycmF5KDQpOworICAgIGZvciAo
bGV0IHEgb2YgdTgpIHt9CisgICAgbGV0IHUzMiA9IG5ldyBVaW50MzJBcnJheSgyKTsKKyAgICBm
b3IgKGxldCBxIG9mIHUzMikge30KKyAgfQorfQorCitmb3IgKGxldCBpPTA7IGk8MTAwOyBpKysp
IHsKKyAgZm9vKCk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402664</attachid>
            <date>2020-06-24 11:20:44 -0700</date>
            <delta_ts>2020-06-24 12:00:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213566-20200624112044.patch</filename>
            <type>text/plain</type>
            <size>55760</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzNDA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YjFhYzgyNGRjYTc4YjU1MWFhYzliMDdiNGQyNGU1YjhiZTE1NmZmLi5hNDY5Y2QzNTVjY2ZjYWJh
N2I4ODQ2NTM0NTRkMzIwMmE2MDJlZjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAyMC0wNi0yNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBCeXRlY29kZSBVc2VEZWYgc2hvdWxkIGJlIGF3YXJlIG9mIGNoZWNr
cG9pbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTM1NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
cmV2aW91c2x5LCB3ZSB0cmllZCB0byBzb2x2ZSB0ZWFjaGluZyBERkcgYWJvdXQgdXNlcyBhbmQg
ZGVmcyBvZgorICAgICAgICBsb2NhbHMgYWNyb3NzIGNoZWNrcG9pbnRzIGJ5IGFza2luZyB3aGF0
IGxvY2FscyB3ZXJlIGRlZidkIGF0IHNvbWUKKyAgICAgICAgY2hlY2twb2ludC4gSG93ZXZlciwg
dGhpcyB3YXMgc3VidGx5IHdyb25nIGJlY2F1c2Ugd2UgZGlkbid0CisgICAgICAgIHJlcG9ydCBh
IHVzZSBhdCBlYWNoIHN1YnNlcXVlbnQgY2hlY2twb2ludCBzbyBERkcgdGhvdWdodCB0aGUKKyAg
ICAgICAgbG9jYWwgd2FzIGtpbGxlZC4KKworICAgICAgICBUaGlzIHBhdGNoIHJldmVydHMgdGhh
dCBjaGFuZ2UgYW5kIGluc3RlYWQgdGVhY2hlcyBCeXRlY29kZVVzZURlZgorICAgICAgICBhYm91
dCBjaGVja3BvaW50cy4gUmlnaHQgbm93LCBCeXRlY29kZVVzZURlZiBvbmx5IGtub3dzIGFib3V0
CisgICAgICAgIGxvY2FscyBhdCBjaGVja3BvaW50cyBidXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkg
dGVhY2ggaXQgYWJvdXQgdG1wcworICAgICAgICBhdCB3ZWxsLgorCisgICAgICAgIFNpbmNlIHRo
ZSB2ZWN0b3JzIGNvbnRhaW5pbmcgb3VyIGxpdmVuZXNzIGJpdG1hcHMgd2VyZSBhbHJlYWR5Cisg
ICAgICAgIHNwYXJzZSAodGhleSBhcmUgaW5kZXhlZCBieSB0aGUgYnl0ZWNvZGUgb2Zmc2V0KSB3
ZSBjYW4gcmV1c2UgdGhlCisgICAgICAgIGdhcHMgdG8gaG9sZCBvdXIgY2hlY2twb2ludCBsaXZl
bmVzcyBpbmZvcm1hdGlvbi4gVG8gbWFrZSBzdXJlIHdlCisgICAgICAgIGRvbid0IG92ZXJsYXAg
YmV0d2VlbiB0aGUgbmV4dCBieXRlY29kZSBhbmQgYSBjaGVja3BvaW50IGZvciB0aGUKKyAgICAg
ICAgY3VycmVudCBieXRlY29kZSB0aGVyZSBpcyBub3cgYSBzdGF0aWMgYXNzZXJ0IHRoYXQgdGhl
IGxlbmd0aCBvZgorICAgICAgICB0aGUgYnl0ZWNvZGUgaXMgZ3JlYXRlciB0aGFuIHRoZSBudW1i
ZXIgb2YgY2hlY2twb2ludHMuIFRoaXMKKyAgICAgICAgYXNzdW1wdGlvbiBpcyB0cnVlIGZvciBl
eGlzdGluZyBieXRlY29kZXMgd2l0aCBjaGVja3BvaW50cyBhbmQKKyAgICAgICAgbGlrZWx5IHRv
IGJlIHRydWUgYW55d2F5IGZvciBmdXR1cmUgb25lcy4KKworICAgICAgICBNYW55IG9mIHRoZSBC
eXRlY29kZUxpdmVuZXNzUHJvcGVnYXRpb24gZnVuY3Rpb25zIGhhdmUgYmVlbgorICAgICAgICBy
ZW5hbWVkIHRvIHJlZmxlY3QgdGhhdCB0aGV5IG9wZXJhdGUgb3ZlciB0aGUgZnVsbCBpbnN0cnVj
dGlvbiwKKyAgICAgICAgaW5jbHVkaW5nIGNoZWNrcG9pbnRzLCByYXRoZXIgdGhhbiBqdXN0IHRo
ZSBCeXRlY29kZUluZGV4IHBhc3NlZC4KKworICAgICAgICBMYXN0bHksIHRoaXMgcGF0Y2ggbWFr
ZXMgYSBzcGVjdWxhdGl2ZSBmaXggdG8gZm9yQWxsS2lsbGVkT3BlcmFuZHMgd2hlcmUgd2UKKyAg
ICAgICAgd291bGRuJ3QgcmVwb3J0IHRoYXQgYWxsIHRtcHMgZGllIGF0IHRoZSBlbmQgb2YgZWFj
aCBieXRlY29kZS4gSSBjYW4ndCB0aGluaworICAgICAgICBvZiBhIGNhc2Ugd2hlcmUgdGhpcyB3
b3VsZCBicmVhayB0aGluZ3MgYnV0IGl0J3MgcHJvYmFibHkgZ29vZCBoeWdpZW5lLgorCisgICAg
ICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwOgorICAgICAgICAo
SlNDOjpHZW5lcmF0b3JMaXZlbmVzc0FuYWx5c2lzOjpydW4pOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Qnl0ZWNvZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojp3aXRoQ2hlY2twb2ludCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OnBhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczo6Y29tcHV0ZUZ1bGxMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMpOgorICAgICAgICAoSlNDOjp0bXBMaXZlbmVzc0Zv
ckNoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6Omdl
dExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omxp
dmVuZXNzRm9yQ2hlY2twb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRleERlZik6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4
VXNlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zl
ckJ5dGVjb2RlSW5kZXhVc2VJbkV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRleCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbik6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2Fs
TGl2ZW5lc3NGb3JJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlv
bik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJ
bnN0cnVjdGlvbkRlZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvblVzZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvblVzZUlu
RXhjZXB0aW9uSGFuZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5l
c3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpnZXRMaXZl
bmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlVXNlRGVmLmNwcDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUlu
ZGV4SW1wbCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwp
OgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6CisgICAgICAgIChKU0M6OmNv
bXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9y
Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZvckJ5dGVj
b2RlSW5kZXhTbG93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWxpZGF0ZSk6CisgICAg
ICAgICogYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M6OmdldExpdmVuZXNzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M6OnRvSW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0
aW9uLmg6CisgICAgICAgIChKU0M6OkJhc2VJbnN0cnVjdGlvbjo6bnVtYmVyT2ZDaGVja3BvaW50
cyBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwOgorICAg
ICAgICAoSlNDOjpJbnN0cnVjdGlvblN0cmVhbTo6aW5zdHJ1Y3Rpb25Db3VudCBjb25zdCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaDoKKyAgICAgICAgKiBieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKiBkZmcvREZHRm9yQWxsS2lsbHMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5kcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZlSW5CeXRlY29kZSk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2Uu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
OjpjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSk6CisgICAgICAgICogZ2VuZXJhdG9y
L09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvU2VjdGlvbi5yYjoKKwogMjAyMC0wNi0y
MyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgSGFuZGxlIHN0cmlu
ZyBvdmVyZmxvdyBpbiBERkcgZ3JhcGggZHVtcCB3aGlsZSB2YWxpZGF0aW5nIEFJLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZp
Y2F0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVy
YXRvcmlmaWNhdGlvbi5jcHAKaW5kZXggNmZiYTIyOTdjMjkxZmU0OGViOTkzY2ZhN2VmZjYzOTFj
YzRmODY2My4uYThlNTZkMGNkMzk0YmMxYjdhYzA1MjZiZTg2NjdlYWM4YmRkN2U2YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZp
Y2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVH
ZW5lcmF0b3JpZmljYXRpb24uY3BwCkBAIC0xOTQsNyArMTk0LDcgQEAgcHVibGljOgogICAgICAg
ICBydW5MaXZlbmVzc0ZpeHBvaW50KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dlbmVyYXRv
cmlmaWNhdGlvbi5ncmFwaCgpKTsKIAogICAgICAgICBmb3IgKFlpZWxkRGF0YSYgZGF0YSA6IG1f
Z2VuZXJhdG9yaWZpY2F0aW9uLnlpZWxkcygpKQotICAgICAgICAgICAgZGF0YS5saXZlbmVzcyA9
IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywg
bV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSwgQnl0ZWNvZGVJbmRleChtX2dlbmVyYXRvcmlm
aWNhdGlvbi5pbnN0cnVjdGlvbnMoKS5hdChkYXRhLnBvaW50KS5uZXh0KCkub2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgIGRhdGEubGl2ZW5lc3MgPSBnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9u
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpLCBC
eXRlY29kZUluZGV4KG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmluc3RydWN0aW9ucygpLmF0KGRhdGEu
cG9pbnQpLm5leHQoKS5vZmZzZXQoKSkpOwogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCmluZGV4IDZlMjY2ZDNkYWYz
YjEyNWU4NzM2NzU3NTQwNTJjMzEzYzBlNWE1NzEuLjliYzg0MzRlMGY5YjM4YjI4YTFiODExZTBl
MDFmZWUyMDFiOGJiODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUluZGV4LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlSW5kZXguaApAQCAtMzQsNiArMzQsOSBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK3VzaW5nIENoZWNrcG9pbnQgPSB1aW50OF90Oworc3RhdGljIGNvbnN0
ZXhwciBDaGVja3BvaW50IG5vQ2hlY2twb2ludHMgPSAwOworCiBjbGFzcyBCeXRlY29kZUluZGV4
IHsKIHB1YmxpYzoKICAgICBCeXRlY29kZUluZGV4KCkgPSBkZWZhdWx0OwpAQCAtNDIsNyArNDUs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgo
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQsIHVpbnQ4X3QgY2hlY2twb2ludCA9IDApCisgICAgZXhw
bGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCwgQ2hlY2twb2ludCBj
aGVja3BvaW50ID0gbm9DaGVja3BvaW50cykKICAgICAgICAgOiBtX3BhY2tlZEJpdHMocGFjayhi
eXRlY29kZU9mZnNldCwgY2hlY2twb2ludCkpCiAgICAgewogICAgICAgICBBU1NFUlQoKnRoaXMp
OwpAQCAtNTQsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJf
dCBjaGVja3BvaW50U2hpZnQgPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihudW1iZXJPZkNoZWNr
cG9pbnRzKTsKIAogICAgIHVpbnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2Vk
Qml0cyA+PiBjaGVja3BvaW50U2hpZnQ7IH0KLSAgICB1aW50OF90IGNoZWNrcG9pbnQoKSBjb25z
dCB7IHJldHVybiBtX3BhY2tlZEJpdHMgJiBjaGVja3BvaW50TWFzazsgfQorICAgIENoZWNrcG9p
bnQgY2hlY2twb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRN
YXNrOyB9CiAgICAgdWludDMyX3QgYXNCaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRz
OyB9CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1f
cGFja2VkQml0cyk7IH0KQEAgLTYyLDcgKzY1LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUo
KTsgfQogCiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7
Ci0gICAgQnl0ZWNvZGVJbmRleCB3aXRoQ2hlY2twb2ludCh1bnNpZ25lZCBjaGVja3BvaW50KSBj
b25zdCB7IHJldHVybiBCeXRlY29kZUluZGV4KG9mZnNldCgpLCBjaGVja3BvaW50KTsgfQorICAg
IEJ5dGVjb2RlSW5kZXggd2l0aENoZWNrcG9pbnQoQ2hlY2twb2ludCBjaGVja3BvaW50KSBjb25z
dCB7IHJldHVybiBCeXRlY29kZUluZGV4KG9mZnNldCgpLCBjaGVja3BvaW50KTsgfQogCiAgICAg
Ly8gQ29tcGFyaXNvbiBvcGVyYXRvcnMuCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAhPSBpbnZhbGlkT2Zmc2V0ICYmIG1fcGFja2VkQml0
cyAhPSBkZWxldGVkVmFsdWUoKS5vZmZzZXQoKTsgfQpAQCAtODAsMTIgKzgzLDEyIEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBpbnZhbGlkT2Zmc2V0
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwogCi0gICAgc3RhdGljIHVp
bnQzMl90IHBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgdWludDhfdCBjaGVja3BvaW50KTsK
KyAgICBzdGF0aWMgdWludDMyX3QgcGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCBDaGVja3Bv
aW50KTsKIAogICAgIHVpbnQzMl90IG1fcGFja2VkQml0cyB7IGludmFsaWRPZmZzZXQgfTsKIH07
CiAKLWlubGluZSB1aW50MzJfdCBCeXRlY29kZUluZGV4OjpwYWNrKHVpbnQzMl90IGJ5dGVjb2Rl
SW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCkKK2lubGluZSB1aW50MzJfdCBCeXRlY29kZUluZGV4
OjpwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIENoZWNrcG9pbnQgY2hlY2twb2ludCkKIHsK
ICAgICBBU1NFUlQoY2hlY2twb2ludCA8IG51bWJlck9mQ2hlY2twb2ludHMpOwogICAgIEFTU0VS
VCgoYnl0ZWNvZGVJbmRleCA8PCBjaGVja3BvaW50U2hpZnQpID4+IGNoZWNrcG9pbnRTaGlmdCA9
PSBieXRlY29kZUluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKaW5kZXggNDJhNjM1ZWM4ZTNl
NDg3MTI0OTMzM2FiODg1MDZjNTc2ZmI2NzNiOS4uOGI1ZDZmNWJiZTY1MjZkNTA2Njk5ZjU2NGE3
YTQ0ZjAxOTM0NGU0MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKQEAgLTMxLDcgKzMxLDYgQEAK
ICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5o
IgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL1Njb3BlLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NCw1NyArNDMsNDUgQEAgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiAgICAgICAgIGR1bXBSZXN1bHRzKGNvZGVCbG9jayk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgRmFzdEJpdFZlY3RvciYgcmVz
dWx0KQotewotICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmZpbmRCYXNp
Y0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgQVNT
RVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5pc0VudHJ5QmxvY2soKSk7Ci0gICAgQVNT
RVJUKCFibG9jay0+aXNFeGl0QmxvY2soKSk7Ci0gICAgcmVzdWx0LnJlc2l6ZShibG9jay0+b3V0
KCkubnVtQml0cygpKTsKLSAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgo
Y29kZUJsb2NrLCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX2dyYXBoLCAqYmxvY2ssIGJ5
dGVjb2RlSW5kZXgsIHJlc3VsdCk7Ci19Ci0KLUZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBGYXN0Qml0VmVjdG9y
IG91dDsKLSAgICBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBieXRl
Y29kZUluZGV4LCBvdXQpOwotICAgIHJldHVybiBvdXQ7Ci19Ci0KIHZvaWQgQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBG
dWxsQnl0ZWNvZGVMaXZlbmVzcyYgcmVzdWx0KQogewogICAgIEZhc3RCaXRWZWN0b3Igb3V0Owog
Ci0gICAgcmVzdWx0Lm1fYmVmb3JlVXNlVmVjdG9yLnJlc2l6ZShjb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLnNpemUoKSk7Ci0gICAgcmVzdWx0Lm1fYWZ0ZXJVc2VWZWN0b3IucmVzaXplKGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIHJlc3VsdC5tX3VzZXNCZWZvcmUucmVzaXpl
KHNpemUpOworICAgIHJlc3VsdC5tX3VzZXNBZnRlci5yZXNpemUoc2l6ZSk7CiAgICAgCiAgICAg
Zm9yIChCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrIDogbV9ncmFwaC5iYXNpY0Jsb2Nrc0luUmV2
ZXJzZU9yZGVyKCkpIHsKICAgICAgICAgaWYgKGJsb2NrLmlzRW50cnlCbG9jaygpIHx8IGJsb2Nr
LmlzRXhpdEJsb2NrKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAg
IG91dCA9IGJsb2NrLm91dCgpOwotICAgICAgICAKLSAgICAgICAgYXV0byB1c2UgPSBbJl0gKHVu
c2lnbmVkIGJpdEluZGV4KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSB1c2UgZnVuY3Rv
ciwgc28gd2Ugc2V0IHRoZSBiaXQuCi0gICAgICAgICAgICBvdXRbYml0SW5kZXhdID0gdHJ1ZTsK
LSAgICAgICAgfTsKLQotICAgICAgICBhdXRvIGRlZiA9IFsmXSAodW5zaWduZWQgYml0SW5kZXgp
IHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRlZiBmdW5jdG9yLCBzbyB3ZSBjbGVhciB0
aGUgYml0LgotICAgICAgICAgICAgb3V0W2JpdEluZGV4XSA9IGZhbHNlOwotICAgICAgICB9Owot
CiAgICAgICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7
CiAgICAgICAgIHVuc2lnbmVkIGN1cnNvciA9IGJsb2NrLnRvdGFsTGVuZ3RoKCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGJsb2NrLmRlbHRhKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAg
ICAgICBjdXJzb3IgLT0gYmxvY2suZGVsdGEoKVtpXTsKICAgICAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoYmxvY2subGVhZGVyT2Zmc2V0KCkgKyBj
dXJzb3IpOwotCi0gICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uRGVmKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb25zLCBtX2dyYXBoLCBieXRlY29kZUluZGV4LCBkZWYpOwotICAgICAgICAgICAg
c3RlcE92ZXJJbnN0cnVjdGlvblVzZUluRXhjZXB0aW9uSGFuZGxlcihjb2RlQmxvY2ssIGluc3Ry
dWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKLSAgICAgICAgICAgIHJlc3Vs
dC5tX2FmdGVyVXNlVmVjdG9yW2J5dGVjb2RlSW5kZXgub2Zmc2V0KCldID0gb3V0OyAvLyBBZnRl
clVzZSBwb2ludC4KLSAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2UoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbnMsIG1fZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIHVzZSk7Ci0gICAgICAgICAg
ICByZXN1bHQubV9iZWZvcmVVc2VWZWN0b3JbYnl0ZWNvZGVJbmRleC5vZmZzZXQoKV0gPSBvdXQ7
IC8vIEJlZm9yZVVzZSBwb2ludC4KKyAgICAgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3Bv
aW50ID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlSW5kZXgpLT5udW1iZXJPZkNoZWNrcG9pbnRz
KCk7IGNoZWNrcG9pbnQtLTspIHsKKyAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gYnl0
ZWNvZGVJbmRleC53aXRoQ2hlY2twb2ludChjaGVja3BvaW50KTsKKworICAgICAgICAgICAgICAg
IGF1dG8gdXNlID0gWyZdIChDaGVja3BvaW50IHRhcmdldCwgdW5zaWduZWQgYml0SW5kZXgpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgdXNlIGZ1bmN0b3IsIHNvIHdlIHNl
dCB0aGUgYml0LgorICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2twb2ludCA9PSB0YXJnZXQp
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRbYml0SW5kZXhdID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byBkZWYgPSBbJl0gKENoZWNrcG9pbnQg
dGFyZ2V0LCB1bnNpZ25lZCBiaXRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIHRoZSBkZWYgZnVuY3Rvciwgc28gd2UgY2xlYXIgdGhlIGJpdC4KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gdGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0W2JpdEluZGV4XSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
ICAgICBzdGVwT3ZlckJ5dGVjb2RlSW5kZXhEZWYoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1f
Z3JhcGgsIGJ5dGVjb2RlSW5kZXgsIGRlZik7CisgICAgICAgICAgICAgICAgc3RlcE92ZXJCeXRl
Y29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBt
X2dyYXBoLCBieXRlY29kZUluZGV4LCB1c2UpOworICAgICAgICAgICAgICAgIHJlc3VsdC5tX3Vz
ZXNBZnRlcltyZXN1bHQudG9JbmRleChieXRlY29kZUluZGV4KV0gPSBvdXQ7IC8vIEFmdGVyVXNl
IHBvaW50LgorICAgICAgICAgICAgICAgIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZShjb2RlQmxv
Y2ssIGluc3RydWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQubV91c2VzQmVmb3JlW3Jlc3VsdC50b0luZGV4KGJ5dGVjb2RlSW5kZXgp
XSA9IG91dDsgLy8gQmVmb3JlVXNlIHBvaW50LgorICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMTUwLDcgKzEzNyw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
OjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgICAgIGNvbnN0IGF1
dG8gY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsK
IAogICAgICAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFyaWFibGVzOiIpOwotICAgICAgICAgICAg
RmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkpOworICAgICAgICAgICAg
RmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbihj
b2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKTsKICAgICAgICAgICAgIGR1
bXBCaXRWZWN0b3IobGl2ZUJlZm9yZSk7CiAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICAg
ICAgICAgICAgIGNvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZpbGUoKSwgY3VycmVu
dEluc3RydWN0aW9uKTsKQEAgLTE3NiwxNCArMTYzLDEwIEBAIGNvbnN0ZXhwciBib29sIGVudW1W
YWx1ZXNFcXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlwZTIgdjIpCiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUy
Pih2Mik7CiB9CiAKLVZlY3RvcjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1wcz4gbGl2ZW5l
c3NGb3JDaGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrLCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXgpCitCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNz
Rm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KQogewotICAgIFZlY3RvcjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1w
cz4gcmVzdWx0OwotICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpOwotCi0gICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7Ci0gICAg
ICAgIEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IG1heE51bUNoZWNrcG9pbnRUbXBzKTsKLSAgICB9
KTsKKyAgICBCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHJlc3VsdDsKKyAgICBDaGVja3Bv
aW50IGNoZWNrcG9pbnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKIAogICAgIGlmICgh
Y2hlY2twb2ludCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE5NSwxNiArMTc4LDE0IEBA
IFZlY3RvcjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1wcz4gbGl2ZW5lc3NGb3JDaGVja3Bv
aW50KGNvbnN0IENvZGVCbG9jayYgY29kCiAgICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVl
c0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BUYWlsQ2FsbFZhcmFy
Z3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6
OmFyZ0NvdW50SW5jbHVkaW5nVGhpcywgT3BUYWlsQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVk
aW5nVGhpcykpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdy
YWwoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wQ29uc3RydWN0VmFyYXJnczo6bWFrZUNhbGwp
ICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNs
dWRpbmdUaGlzLCBPcENvbnN0cnVjdFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhpcykpOwog
ICAgICAgICBpZiAoY2hlY2twb2ludCA9PSBPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCkKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoT3BlcmFuZDo6dG1wKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50
SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjph
cmdDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKLSAgICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gT3BJ
dGVyYXRvck9wZW46OmdldE5leHQpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVCbG9j
ay5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BJdGVyYXRvck9wZW4+KCku
bV9pdGVyYXRvcik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIGNhc2Ugb3Bf
aXRlcmF0b3JfbmV4dDogewotICAgICAgICByZXN1bHQuYXBwZW5kKE9wZXJhbmQ6OnRtcChPcEl0
ZXJhdG9yTmV4dDo6bmV4dFJlc3VsdCkpOworICAgICAgICByZXN1bHQuc2V0KE9wSXRlcmF0b3JO
ZXh0OjpuZXh0UmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgZGVm
YXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCBiZTVlZTJmY2QzYTY0ZTU2M2FlYTFmM2YyMjI3
OTFlNDY4YmI2MTA0Li5hMjA0MTdmMjJjYjFiMmQzNzc2YjA5YTY3NzEzOWMyMjdkMjYwYzI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5oCkBAIC01MSwyNiArNTEsMjYgQEAgZW51bSBjbGFzcyBMaXZlbmVz
c0NhbGN1bGF0aW9uUG9pbnQgOiB1aW50OF90IHsKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NQcm9w
YWdhdGlvbiB7CiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwg
dHlwZW5hbWUgVXNlRnVuY3Rvcj4KLSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9u
VXNlKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3Jh
cGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJik7CisgICAgc3RhdGljIHZvaWQg
c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlv
blN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9y
Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVu
Y3Rvcj4KLSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uVXNlSW5FeGNlcHRpb25I
YW5kbGVyKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2Rl
R3JhcGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJik7CisgICAgc3RhdGljIHZv
aWQgc3RlcE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKENvZGVCbG9ja1R5
cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUlu
ZGV4LCBjb25zdCBVc2VGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZSwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4KLSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3Ry
dWN0aW9uRGVmKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVj
b2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBEZWZGdW5jdG9yJik7CisgICAgc3RhdGlj
IHZvaWQgc3RlcE92ZXJCeXRlY29kZUluZGV4RGVmKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBEZWZG
dW5jdG9yJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFt
ZSBVc2VGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotICAgIHN0YXRpYyB2b2lkIHN0ZXBP
dmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwg
Qnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImLCBjb25zdCBE
ZWZGdW5jdG9yJik7CisgICAgc3RhdGljIHZvaWQgc3RlcE92ZXJCeXRlY29kZUluZGV4KENvZGVC
bG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRl
Y29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJiwgY29uc3QgRGVmRnVuY3RvciYpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KICAgICBzdGF0aWMgdm9pZCBzdGVwT3Zl
ckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5
dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBGYXN0Qml0VmVjdG9yJiBvdXQpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPgot
ICAgIHN0YXRpYyBib29sIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChDb2Rl
QmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2Rl
QmFzaWNCbG9jayYsIEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CisgICAg
c3RhdGljIGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JJbnN0cnVjdGlvbihDb2RlQmxvY2tU
eXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNC
bG9jayYsIEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+CiAgICAg
c3RhdGljIGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxvY2tUeXBlKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayYp
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1
Y3Rpb25zPgotICAgIHN0YXRpYyBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVJbmRleChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFw
aCYsIEJ5dGVjb2RlSW5kZXgpOworICAgIHN0YXRpYyBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNz
SW5mb0F0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5
dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KICAgICBzdGF0aWMgdm9pZCBydW5M
aXZlbmVzc0ZpeHBvaW50KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRl
Y29kZUdyYXBoJik7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3Mg
Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOwogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cyhDb2RlQmxvY2sqKTsKICAgICAKLSAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0
Qnl0ZWNvZGVJbmRleChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKKyAgICBGYXN0Qml0VmVj
dG9yIGdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkgeyByZXR1cm4gQnl0ZWNvZGVMaXZlbmVzc1Byb3Bh
Z2F0aW9uOjpnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKGNvZGVCbG9jaywgY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCk7IH0KICAgICAKICAgICB2
b2lkIGNvbXB1dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiwgRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IHJlc3VsdCk7CiAKQEAgLTkyLDEyICs5MiwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZv
aWQgZHVtcFJlc3VsdHMoQ29kZUJsb2NrKik7CiAKLSAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0
Qnl0ZWNvZGVJbmRleChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBGYXN0Qml0VmVjdG9yJik7
Ci0KICAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCi1WZWN0b3I8T3BlcmFuZCwgbWF4
TnVtQ2hlY2twb2ludFRtcHM+IGxpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2sm
LCBCeXRlY29kZUluZGV4KTsKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5l
c3NGb3JDaGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5kZXgpOwogCiBpbmxp
bmUgYm9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9w
ZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwg
aW50IG9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKaW5kZXggYzYwOTY1
YmNjOTdhN2I4OTkwZGI5OGZkMjNkOTliNWUwOGY5Y2RkNS4uZDg5MTU5NjRmOTI5OGIzMWFhYzkx
ZTU0MWVmMmU2YmVjOGY1YjY3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIK
ICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlcklubGluZXMuaCIK
IApAQCAtNTgsNDcgKzU5LDQ5IEBAIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVu
ZXNzKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZl
bmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uRGVmKENvZGVCbG9ja1R5cGUqIGNv
ZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVH
cmFwaCYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgRGVmRnVuY3RvciYgZGVm
KQoraW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVj
b2RlSW5kZXhEZWYoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0
cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4LCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCiB7CiAgICAgYXV0byogaW5zdHJ1Y3Rpb24g
PSBpbnN0cnVjdGlvbnMuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgY29tcHV0ZURlZnNG
b3JCeXRlY29kZUluZGV4KAogICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0aW9uLAotICAgICAg
ICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgIFsmXSAoQ2hlY2twb2lu
dCBjaGVja3BvaW50LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgaWYg
KGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKG9wZXJhbmQpKQotICAgICAgICAgICAgICAgIGRl
ZihvcGVyYW5kLnRvTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgZGVmKGNoZWNrcG9pbnQsIG9w
ZXJhbmQudG9Mb2NhbCgpKTsKICAgICAgICAgfSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBCeXRlY29kZUxp
dmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2UoQ29kZUJsb2NrVHlwZSog
Y29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29k
ZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJiB1
c2UpCitpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0
ZWNvZGVJbmRleFVzZShDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSkKIHsKICAgICBhdXRvKiBpbnN0cnVjdGlv
biA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBjb21wdXRlVXNl
c0ZvckJ5dGVjb2RlSW5kZXgoCiAgICAgICAgIGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sCi0gICAg
ICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgWyZdIChDaGVja3Bv
aW50IGNoZWNrcG9pbnQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAgICAgICAgICBp
ZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mob3BlcmFuZCkpCi0gICAgICAgICAgICAgICAg
dXNlKG9wZXJhbmQudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICB1c2UoY2hlY2twb2ludCwg
b3BlcmFuZC50b0xvY2FsKCkpOwogICAgICAgICB9KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVuY3Rvcj4KLWlubGluZSB2b2lkIEJ5dGVjb2Rl
TGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvblVzZUluRXhjZXB0aW9uSGFu
ZGxlcihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3Qg
VXNlRnVuY3RvciYgdXNlKQoraW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9u
OjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXhVc2VJbkV4Y2VwdGlvbkhhbmRsZXIoQ29kZUJsb2NrVHlw
ZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmIGdy
YXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSkK
IHsKICAgICAvLyBJZiB3ZSBoYXZlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSB3YW50IHRoZSBs
aXZlLWluIHZhcmlhYmxlcyBvZiB0aGUgCi0gICAgLy8gZXhjZXB0aW9uIGhhbmRsZXIgYmxvY2sg
dG8gYmUgaW5jbHVkZWQgaW4gdGhlIGxpdmUtaW4gb2YgdGhpcyBwYXJ0aWN1bGFyIGJ5dGVjb2Rl
LgorICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBs
aXZlLWluIG9mIHRoaXMgcGFydGljdWxhciBCeXRlY29kZUluZGV4LgogICAgIGlmIChhdXRvKiBo
YW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
KSkgewogICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGhhbmRsZXJCbG9jayA9IGdyYXBoLmZp
bmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChoYW5kbGVyLT50YXJnZXQpOwogICAgICAgICBB
U1NFUlQoaGFuZGxlckJsb2NrKTsKLSAgICAgICAgaGFuZGxlckJsb2NrLT5pbigpLmZvckVhY2hT
ZXRCaXQodXNlKTsKKyAgICAgICAgaGFuZGxlckJsb2NrLT5pbigpLmZvckVhY2hTZXRCaXQoWyZd
ICh1bnNpZ25lZCBpKSB7CisgICAgICAgICAgICB1c2UoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkgLCBpKTsKKyAgICAgICAgfSk7CiAgICAgfQogfQogCiAvLyBTaW1wbGlmaWVkIGludGVyZmFj
ZSB0byBieXRlY29kZSB1c2UvZGVmLCB3aGljaCBkZXRlcm1pbmVzIGRlZnMgZmlyc3QgYW5kIHRo
ZW4gdXNlcywgYW5kIGluY2x1ZGVzCiAvLyBleGNlcHRpb24gaGFuZGxlcnMgaW4gdGhlIHVzZXMu
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBVc2VGdW5jdG9yLCB0
eXBlbmFtZSBEZWZGdW5jdG9yPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0
aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYgdXNlLCBjb25zdCBE
ZWZGdW5jdG9yJiBkZWYpCitpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246
OnN0ZXBPdmVyQnl0ZWNvZGVJbmRleChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSwgY29uc3QgRGVm
RnVuY3RvciYgZGVmKQogewotICAgIC8vIFRoaXMgYWJzdHJhY3RseSBleGVjdXRlIHRoZSBpbnN0
cnVjdGlvbiBpbiByZXZlcnNlLiBJbnN0cnVjdGlvbnMgbG9naWNhbGx5IGZpcnN0IHVzZSBvcGVy
YW5kcyBhbmQKKyAgICAvLyBUaGlzIGFic3RyYWN0bHkgZXhlY3V0ZXMgdGhlIEJ5dGVjb2RlSW5k
ZXggaW4gcmV2ZXJzZS4gSW5zdHJ1Y3Rpb25zIGxvZ2ljYWxseSBmaXJzdCB1c2Ugb3BlcmFuZHMg
YW5kCiAgICAgLy8gdGhlbiBkZWZpbmUgb3BlcmFuZHMuIFRoaXMgbG9naWNhbCBvcmRlcmluZyBp
cyBuZWNlc3NhcnkgZm9yIG9wZXJhdGlvbnMgdGhhdCB1c2UgYW5kIGRlZiB0aGUgc2FtZQogICAg
IC8vIG9wZXJhbmQsIGxpa2U6CiAgICAgLy8KQEAgLTExMywzMSArMTE2LDM3IEBAIGlubGluZSB2
b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2Rl
QmxvY2tUeXBlKiBjb2RlCiAgICAgLy8gdXNlcyBiZWZvcmUgZGVmcywgdGhlbiB0aGUgYWRkIG9w
ZXJhdGlvbiBhYm92ZSB3b3VsZCBhcHBlYXIgdG8gbm90IGhhdmUgbG9jMSBsaXZlLCBzaW5jZSB3
ZSdkCiAgICAgLy8gZmlyc3QgYWRkIGl0IHRvIHRoZSBvdXQgc2V0ICh0aGUgdXNlKSwgYW5kIHRo
ZW4gd2UnZCByZW1vdmUgaXQgKHRoZSBkZWYpLgogCi0gICAgc3RlcE92ZXJJbnN0cnVjdGlvbkRl
Zihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIGRlZik7Ci0g
ICAgc3RlcE92ZXJJbnN0cnVjdGlvblVzZUluRXhjZXB0aW9uSGFuZGxlcihjb2RlQmxvY2ssIGlu
c3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIHVzZSk7Ci0gICAgc3RlcE92ZXJJbnN0
cnVjdGlvblVzZShjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgs
IHVzZSk7CisgICAgc3RlcE92ZXJCeXRlY29kZUluZGV4RGVmKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b25zLCBncmFwaCwgYnl0ZWNvZGVJbmRleCwgZGVmKTsKKyAgICBzdGVwT3ZlckJ5dGVjb2RlSW5k
ZXhVc2VJbkV4Y2VwdGlvbkhhbmRsZXIoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBi
eXRlY29kZUluZGV4LCB1c2UpOworICAgIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZShjb2RlQmxv
Y2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIHVzZSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CiBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2Nr
LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBn
cmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBGYXN0Qml0VmVjdG9yJiBvdXQpCiB7
Ci0gICAgc3RlcE92ZXJJbnN0cnVjdGlvbigKLSAgICAgICAgY29kZUJsb2NrLCBpbnN0cnVjdGlv
bnMsIGdyYXBoLCBieXRlY29kZUluZGV4LAotICAgICAgICBbJl0gKHVuc2lnbmVkIGJpdEluZGV4
KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSB1c2UgZnVuY3Rvciwgc28gd2Ugc2V0IHRo
ZSBiaXQuCi0gICAgICAgICAgICBvdXRbYml0SW5kZXhdID0gdHJ1ZTsKLSAgICAgICAgfSwKLSAg
ICAgICAgWyZdICh1bnNpZ25lZCBiaXRJbmRleCkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0
aGUgZGVmIGZ1bmN0b3IsIHNvIHdlIGNsZWFyIHRoZSBiaXQuCi0gICAgICAgICAgICBvdXRbYml0
SW5kZXhdID0gZmFsc2U7Ci0gICAgICAgIH0pOworICAgIGF1dG8gbnVtYmVyT2ZDaGVja3BvaW50
cyA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZUluZGV4KS0+bnVtYmVyT2ZDaGVja3BvaW50cygp
OworICAgIGZvciAoQ2hlY2twb2ludCB0YXJnZXQgPSBudW1iZXJPZkNoZWNrcG9pbnRzOyB0YXJn
ZXQtLTspIHsKKyAgICAgICAgc3RlcE92ZXJCeXRlY29kZUluZGV4KAorICAgICAgICAgICAgY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAg
WyZdIChDaGVja3BvaW50IGNoZWNrcG9pbnQsIHVuc2lnbmVkIGJpdEluZGV4KSB7CisgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgdXNlIGZ1bmN0b3IsIHNvIHdlIHNldCB0aGUgYml0Lgor
ICAgICAgICAgICAgICAgIGlmIChjaGVja3BvaW50ID09IHRhcmdldCkKKyAgICAgICAgICAgICAg
ICAgICAgb3V0W2JpdEluZGV4XSA9IHRydWU7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
WyZdIChDaGVja3BvaW50IGNoZWNrcG9pbnQsIHVuc2lnbmVkIGJpdEluZGV4KSB7CisgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmIGZ1bmN0b3IsIHNvIHdlIGNsZWFyIHRoZSBiaXQu
CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gdGFyZ2V0KQorICAgICAgICAgICAg
ICAgICAgICBvdXRbYml0SW5kZXhdID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9u
cz4KLWlubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2Fs
TGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29k
ZUJhc2ljQmxvY2smIGJsb2NrLCBCeXRlY29kZUluZGV4IHRhcmdldEluZGV4LCBGYXN0Qml0VmVj
dG9yJiByZXN1bHQpCitpbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNv
bXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2Nr
LCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgs
IEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2ssIEJ5dGVjb2RlSW5kZXggdGFyZ2V0SW5kZXgsIEZh
c3RCaXRWZWN0b3ImIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIWJsb2NrLmlzRXhpdEJsb2NrKCkp
OwogICAgIEFTU0VSVCghYmxvY2suaXNFbnRyeUJsb2NrKCkpOworICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoIXRhcmdldEluZGV4LmNoZWNrcG9pbnQoKSwgImNvbXB1dGVMb2NhbExpdmVuZXNzRm9y
SW5zdHJ1Y3Rpb24gY2FuJ3QgYmUgdXNlZCB0byBhc2sgcXVlc3Rpb25zIGFib3V0IGNoZWNrcG9p
bnRzIik7CiAKICAgICBGYXN0Qml0VmVjdG9yIG91dCA9IGJsb2NrLm91dCgpOwogCkBAIC0xNTgs
MTkgKzE2NywyMCBAQCBpbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNv
bXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2soQ29kZUJsb2NrVAogewogICAgIGlmIChibG9jay5p
c0V4aXRCbG9jaygpIHx8IGJsb2NrLmlzRW50cnlCbG9jaygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChjb2Rl
QmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJsb2NrLCBCeXRlY29kZUluZGV4KGJsb2NrLmxl
YWRlck9mZnNldCgpKSwgYmxvY2suaW4oKSk7CisgICAgcmV0dXJuIGNvbXB1dGVMb2NhbExpdmVu
ZXNzRm9ySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBibG9jaywg
Qnl0ZWNvZGVJbmRleChibG9jay5sZWFkZXJPZmZzZXQoKSksIGJsb2NrLmluKCkpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+Ci1p
bmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVu
ZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElu
c3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4KQoraW5saW5lIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVz
c1Byb3BhZ2F0aW9uOjpnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUq
IGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3Jh
cGgmIGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CisgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCksICJnZXRMaXZlbmVzc0luZm9B
dEluc3RydWN0aW9uIGNhbid0IGJlIHVzZWQgdG8gYXNrIHF1ZXN0aW9ucyBhYm91dCBjaGVja3Bv
aW50cyIpOwogICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNC
bG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAgIEFTU0VS
VChibG9jayk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFbnRyeUJsb2NrKCkpOwogICAgIEFTU0VS
VCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwogICAgIEZhc3RCaXRWZWN0b3Igb3V0OwogICAgIG91
dC5yZXNpemUoYmxvY2stPm91dCgpLm51bUJpdHMoKSk7Ci0gICAgY29tcHV0ZUxvY2FsTGl2ZW5l
c3NGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgKmJsb2Nr
LCBieXRlY29kZUluZGV4LCBvdXQpOworICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1
Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCAqYmxvY2ssIGJ5dGVjb2RlSW5k
ZXgsIG91dCk7CiAgICAgcmV0dXJuIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAKaW5kZXggY2U0NzBjOTIyZTg4M2ZlMDE3
ZjA4ZDZiMmYzNjcyNDU3M2RlODE5ZS4uMjkwODlhOWQ4MzEwYmZlZDMwMTUyMzMwMjdhOGM2MDE3
NTVjNTZlZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlVXNlRGVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVVc2VEZWYuY3BwCkBAIC0yOSwxMCArMjksMTEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAjZGVm
aW5lIENBTExfRlVOQ1RPUihfX2FyZykgXAotICAgIGZ1bmN0b3IoX19ieXRlY29kZS5tXyMjX19h
cmcpOworICAgIGZ1bmN0b3Iobm9DaGVja3BvaW50cywgX19ieXRlY29kZS5tXyMjX19hcmcpOwog
CiAjZGVmaW5lIFVTRVNfT1JfREVGUyhfX29wY29kZSwgLi4uKSBcCiAgICAgY2FzZSBfX29wY29k
ZTo6b3Bjb2RlSUQ6IHsgXAorICAgICAgICBzdGF0aWNfYXNzZXJ0KF9fb3Bjb2RlOjpvcGNvZGVJ
RCA+PSBOVU1CRVJfT0ZfQllURUNPREVfV0lUSF9DSEVDS1BPSU5UUywgIkRvbid0IHVzZSB0aGlz
IG1hY3JvIGZvciBieXRlY29kZXMgdGhhdCBoYXZlIGNoZWNrcG9pbnRzLiIpOyBcCiAgICAgICAg
IGF1dG8gX19ieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxfX29wY29kZT4oKTsgXAogICAgICAg
ICBXVEZfTEFaWV9GT1JfRUFDSF9URVJNKENBTExfRlVOQ1RPUiwgX19WQV9BUkdTX18pIFwKICAg
ICAgICAgcmV0dXJuOyBcCkBAIC00MSwyNiArNDIsMzEgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZGVm
aW5lIFVTRVMgVVNFU19PUl9ERUZTCiAjZGVmaW5lIERFRlMgVVNFU19PUl9ERUZTCiAKLXZvaWQg
Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdp
c3RlciwgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBjb25zdCBGdW5jdGlvbjx2b2lk
KFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5jdG9yKQordm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2Rl
SW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0aW9uPHZvaWQoQ2hlY2twb2ludCwgVmlydHVhbFJl
Z2lzdGVyKT4mIGZ1bmN0b3IpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlv
bi0+b3Bjb2RlSUQoKTsKIAotICAgIGF1dG8gaGFuZGxlTmV3QXJyYXlMaWtlID0gWyZdKGF1dG8g
b3ApIHsKKyAgICBhdXRvIGhhbmRsZU5ld0FycmF5TGlrZSA9IFsmXSAoYXV0byBvcCkgewogICAg
ICAgICBpbnQgYmFzZSA9IG9wLm1fYXJndi5vZmZzZXQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KG9wLm1fYXJnYyk7IGkrKykKLSAgICAgICAgICAgIGZ1
bmN0b3IoVmlydHVhbFJlZ2lzdGVyIHsgYmFzZSAtIGkgfSk7CisgICAgICAgICAgICBmdW5jdG9y
KG5vQ2hlY2twb2ludHMsIFZpcnR1YWxSZWdpc3RlciB7IGJhc2UgLSBpIH0pOwogICAgIH07CiAK
LSAgICBhdXRvIGhhbmRsZU9wQ2FsbExpa2UgPSBbJl0oYXV0byBvcCkgewotICAgICAgICBmdW5j
dG9yKG9wLm1fY2FsbGVlKTsKKyAgICBhdXRvIGhhbmRsZU9wQ2FsbExpa2UgPSBbJl0gKGF1dG8g
b3ApIHsKKyAgICAgICAgZnVuY3Rvcihub0NoZWNrcG9pbnRzLCBvcC5tX2NhbGxlZSk7CiAgICAg
ICAgIGludCBsYXN0QXJnID0gLXN0YXRpY19jYXN0PGludD4ob3AubV9hcmd2KSArIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Rh
dGljX2Nhc3Q8aW50PihvcC5tX2FyZ2MpOyBpKyspCi0gICAgICAgICAgICBmdW5jdG9yKFZpcnR1
YWxSZWdpc3RlciB7IGxhc3RBcmcgKyBpIH0pOworICAgICAgICAgICAgZnVuY3Rvcihub0NoZWNr
cG9pbnRzLCBWaXJ0dWFsUmVnaXN0ZXIgeyBsYXN0QXJnICsgaSB9KTsKICAgICAgICAgaWYgKG9w
Y29kZUlEID09IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgICAgIGZ1bmN0b3Ioc2NvcGVSZWdpc3Rl
cik7CisgICAgICAgICAgICBmdW5jdG9yKG5vQ2hlY2twb2ludHMsIHNjb3BlUmVnaXN0ZXIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfTsKIAorICAgIGF1dG8gdXNlQXRFYWNoQ2hlY2twb2ludCA9
IFsmXSAoYXV0byBvcCwgYXV0by4uLiB2aXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIGZvciAo
Q2hlY2twb2ludCBjaGVja3BvaW50ID0gMDsgY2hlY2twb2ludCA8IGRlY2x0eXBlKG9wKTo6bnVt
YmVyT2ZDaGVja3BvaW50czsgKytjaGVja3BvaW50KQorICAgICAgICAgICAgKGZ1bmN0b3IoY2hl
Y2twb2ludCwgdmlydHVhbFJlZ2lzdGVycyksIC4uLik7CisgICAgfTsKKwogICAgIHN3aXRjaCAo
b3Bjb2RlSUQpIHsKICAgICBjYXNlIG9wX3dpZGUxNjoKICAgICBjYXNlIG9wX3dpZGUzMjoKQEAg
LTI1MCw5ICsyNTYsMjIgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZp
cnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJbnN0cnUKICAgICBVU0VTKE9wSGFz
U3RydWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQogICAgIFVTRVMo
T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFzZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCiAg
ICAgVVNFUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9y
KQotICAgIFVTRVMoT3BDb25zdHJ1Y3RWYXJhcmdzLCBjYWxsZWUsIHRoaXNWYWx1ZSwgYXJndW1l
bnRzKQotICAgIFVTRVMoT3BDYWxsVmFyYXJncywgY2FsbGVlLCB0aGlzVmFsdWUsIGFyZ3VtZW50
cykKLSAgICBVU0VTKE9wVGFpbENhbGxWYXJhcmdzLCBjYWxsZWUsIHRoaXNWYWx1ZSwgYXJndW1l
bnRzKQorCisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpOworICAgICAgICB1c2VBdEVhY2hD
aGVja3BvaW50KGJ5dGVjb2RlLCBieXRlY29kZS5tX2NhbGxlZSwgYnl0ZWNvZGUubV90aGlzVmFs
dWUsIGJ5dGVjb2RlLm1fYXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCk7CisgICAgICAgIHVzZUF0RWFjaENoZWNr
cG9pbnQoYnl0ZWNvZGUsIGJ5dGVjb2RlLm1fY2FsbGVlLCBieXRlY29kZS5tX3RoaXNWYWx1ZSwg
Ynl0ZWNvZGUubV9hcmd1bWVudHMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
b3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCk7CisgICAgICAgIHVzZUF0RWFjaENoZWNrcG9p
bnQoYnl0ZWNvZGUsIGJ5dGVjb2RlLm1fY2FsbGVlLCBieXRlY29kZS5tX3RoaXNWYWx1ZSwgYnl0
ZWNvZGUubV9hcmd1bWVudHMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgVVNFUyhP
cEdldERpcmVjdFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCiAKQEAg
LTI2NSw4ICsyODQsMjEgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZp
cnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJbnN0cnUKIAogICAgIFVTRVMoT3BZ
aWVsZCwgZ2VuZXJhdG9yLCBhcmd1bWVudCkKIAotICAgIFVTRVMoT3BJdGVyYXRvck9wZW4sIHN5
bWJvbEl0ZXJhdG9yLCBpdGVyYWJsZSkKLSAgICBVU0VTKE9wSXRlcmF0b3JOZXh0LCBpdGVyYXRv
ciwgbmV4dCwgaXRlcmFibGUpCisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAg
ICAgIGZ1bmN0b3IoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGwsIGJ5dGVjb2RlLm1fc3ltYm9s
SXRlcmF0b3IpOworICAgICAgICBmdW5jdG9yKE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsLCBi
eXRlY29kZS5tX2l0ZXJhYmxlKTsKKyAgICAgICAgZnVuY3RvcihPcEl0ZXJhdG9yT3Blbjo6Z2V0
TmV4dCwgYnl0ZWNvZGUubV9pdGVyYXRvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgdXNlQXRFYWNoQ2hlY2twb2lu
dChieXRlY29kZSwgYnl0ZWNvZGUubV9pdGVyYXRvcik7CisgICAgICAgIGZ1bmN0b3IoT3BJdGVy
YXRvck5leHQ6OmNvbXB1dGVOZXh0LCBieXRlY29kZS5tX25leHQpOworICAgICAgICBmdW5jdG9y
KE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dCwgYnl0ZWNvZGUubV9pdGVyYWJsZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKICAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoK
ICAgICAgICAgaGFuZGxlTmV3QXJyYXlMaWtlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0
aFNwcmVhZD4oKSk7CkBAIC0yNzksNyArMzExLDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVj
b2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJbnN0cnUK
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKTsKICAg
ICAgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2NvdW50OyBpKyspCi0gICAgICAgICAgICBmdW5jdG9y
KFZpcnR1YWxSZWdpc3RlciB7IGJhc2UgLSBpIH0pOworICAgICAgICAgICAgZnVuY3Rvcihub0No
ZWNrcG9pbnRzLCBWaXJ0dWFsUmVnaXN0ZXIgeyBiYXNlIC0gaSB9KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMzAyLDcgKzMzNCw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29k
ZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAg
ICAgfQogfQogCi12b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWduZWQg
bnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBjb25zdCBGdW5jdGlvbjx2
b2lkKFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5jdG9yKQordm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVj
b2RlSW5kZXhJbXBsKHVuc2lnbmVkIG51bVZhcnMsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZChDaGVja3BvaW50LCBWaXJ0dWFsUmVnaXN0ZXIpPiYg
ZnVuY3RvcikKIHsKICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CiAgICAg
Y2FzZSBvcF93aWRlMTY6CkBAIC00MTIsMTAgKzQ0NCwyMyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9y
Qnl0ZWNvZGVJbmRleEltcGwodW5zaWduZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydQogICAgIERFRlMoT3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHAsIGRzdCkKICAgICBERUZT
KE9wTmV3QXN5bmNGdW5jLCBkc3QpCiAgICAgREVGUyhPcE5ld0FzeW5jRnVuY0V4cCwgZHN0KQot
ICAgIERFRlMoT3BDYWxsVmFyYXJncywgZHN0KQotICAgIERFRlMoT3BUYWlsQ2FsbFZhcmFyZ3Ms
IGRzdCkKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCk7CisgICAgICAgIGZ1bmN0b3IoT3BD
YWxsVmFyYXJnczo6bWFrZUNhbGwsIGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOiB7CisgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCk7CisgICAgICAgIGZ1
bmN0b3IoT3BUYWlsQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBieXRlY29kZS5tX2RzdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4o
KTsKKyAgICAgICAgZnVuY3RvcihPcENvbnN0cnVjdFZhcmFyZ3M6Om1ha2VDYWxsLCBieXRlY29k
ZS5tX2RzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBERUZTKE9wVGFpbENhbGxG
b3J3YXJkQXJndW1lbnRzLCBkc3QpCi0gICAgREVGUyhPcENvbnN0cnVjdFZhcmFyZ3MsIGRzdCkK
ICAgICBERUZTKE9wR2V0RnJvbVNjb3BlLCBkc3QpCiAgICAgREVGUyhPcENhbGwsIGRzdCkKICAg
ICBERUZTKE9wVGFpbENhbGwsIGRzdCkKQEAgLTUwMSwxMiArNTQ2LDI4IEBAIHZvaWQgY29tcHV0
ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3duVmFsdWUp
CiAKLSAgICBERUZTKE9wSXRlcmF0b3JPcGVuLCBpdGVyYXRvciwgbmV4dCkKLSAgICBERUZTKE9w
SXRlcmF0b3JOZXh0LCBkb25lLCB2YWx1ZSkKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsK
KyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4o
KTsKKworICAgICAgICBmdW5jdG9yKE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsLCBieXRlY29k
ZS5tX2l0ZXJhdG9yKTsKKyAgICAgICAgZnVuY3RvcihPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dCwg
Ynl0ZWNvZGUubV9uZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2Ugb3Bf
aXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpOworCisgICAgICAgIGZ1bmN0b3IoT3BJdGVyYXRvck5leHQ6Omdl
dERvbmUsIGJ5dGVjb2RlLm1fZG9uZSk7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xhaW0gd2Ug
c2V0IG1fdmFsdWUgaGVyZSBiZWNhdXNlIHdlIGNvdWxkIGVhcmx5IGV4aXQgZnJvbSB0aGUgYnl0
ZWNvZGUgaWYgd2UgYXJlIGRvbmUuCisgICAgICAgIGZ1bmN0b3IoT3BJdGVyYXRvck5leHQ6Omdl
dERvbmUsIGJ5dGVjb2RlLm1fdmFsdWUpOworCisgICAgICAgIGZ1bmN0b3IoT3BJdGVyYXRvck5l
eHQ6OmdldFZhbHVlLCBieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAogICAgIGNhc2Ugb3BfZW50ZXI6IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtVmFy
czsgaS0tOykKLSAgICAgICAgICAgIGZ1bmN0b3IodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkp
OworICAgICAgICAgICAgZnVuY3Rvcihub0NoZWNrcG9pbnRzLCB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAppbmRleCBiM2IwMGE5OTIzNzMz
ZDMxYWM4NGU1ZDg4MmRhOTAzZTliZWRjN2ZiLi45YjQ0MTcxZDU5NmMzY2Y0M2UyNzY4YTQyM2Yy
ZjRkODI3M2FiNWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVVc2VEZWYuaApAQCAtMzIsMjEgKzMyLDIzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyLCBjb25z
dCBJbnN0cnVjdGlvbiosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4mKTsK
LXZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCwgY29uc3QgSW5z
dHJ1Y3Rpb24qLCBjb25zdCBGdW5jdGlvbjx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+Jik7Cit2b2lk
IGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyLCBjb25zdCBJ
bnN0cnVjdGlvbiosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoQ2hlY2twb2ludCwgVmlydHVhbFJlZ2lz
dGVyKT4mKTsKK3ZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCwg
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBGdW5jdGlvbjx2b2lkKENoZWNrcG9pbnQsIFZpcnR1
YWxSZWdpc3Rlcik+Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJsb2NrPgotdm9pZCBjb21wdXRl
VXNlc0ZvckJ5dGVjb2RlSW5kZXgoQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBjb25zdCBGdW5jdGlvbjx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5j
dG9yKQordm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgoQmxvY2sqIGNvZGVCbG9jaywg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBjb25zdCBGdW5jdGlvbjx2b2lkKENoZWNr
cG9pbnQsIFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5jdG9yKQogewogICAgIE9wY29kZUlEIG9wY29k
ZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2Vu
dGVyICYmIChjb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSB8fCBj
b2RlQmxvY2stPnVzZXNFdmFsKCkpICYmIGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLmlzVmFs
aWQoKSkKLSAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSk7CisgICAg
aWYgKG9wY29kZUlEICE9IG9wX2VudGVyICYmIChjb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkpICYmIGNvZGVCbG9jay0+
c2NvcGVSZWdpc3RlcigpLmlzVmFsaWQoKSkgeworICAgICAgICBmb3IgKENoZWNrcG9pbnQgY2hl
Y2twb2ludCA9IGluc3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9pbnQt
LTspCisgICAgICAgICAgICBmdW5jdG9yKGNoZWNrcG9pbnQsIGNvZGVCbG9jay0+c2NvcGVSZWdp
c3RlcigpKTsKKyAgICB9CiAKICAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKGNv
ZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLCBpbnN0cnVjdGlvbiwgZnVuY3Rvcik7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEJsb2NrPgotdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgo
QmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBjb25zdCBG
dW5jdGlvbjx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5jdG9yKQordm9pZCBjb21wdXRlRGVm
c0ZvckJ5dGVjb2RlSW5kZXgoQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBjb25zdCBGdW5jdGlvbjx2b2lkKENoZWNrcG9pbnQsIFZpcnR1YWxSZWdpc3Rl
cik+JiBmdW5jdG9yKQogewogICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwoY29k
ZUJsb2NrLT5udW1WYXJzKCksIGluc3RydWN0aW9uLCBmdW5jdG9yKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggOTE4MDVjNDI3ODJlNGRh
Nzg3ZTYzOTZlNjAzOGRhYzlkODMyNjg0OC4uM2VmZTgzMzVlNGNlMzJkOTM3NjE2YmVmNTcxNTFl
MjljZTk0NWMwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKQEAgLTE5MjMsNyArMTkyMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjplbnN1cmVDYXRjaExp
dmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXhTbG93KGNvbnN0IE9wQ2F0Y2gmCiAgICAg
Ly8gaW50byB0aGUgREZHLgogCiAgICAgYXV0byBuZXh0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCku
YXQoYnl0ZWNvZGVJbmRleCkubmV4dCgpLm9mZnNldCgpOwotICAgIEZhc3RCaXRWZWN0b3IgbGl2
ZUxvY2FscyA9IGJ5dGVjb2RlTGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4
KHRoaXMsIEJ5dGVjb2RlSW5kZXgobmV4dE9mZnNldCkpOworICAgIEZhc3RCaXRWZWN0b3IgbGl2
ZUxvY2FscyA9IGJ5dGVjb2RlTGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbih0
aGlzLCBCeXRlY29kZUluZGV4KG5leHRPZmZzZXQpKTsKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lz
dGVyPiBsaXZlT3BlcmFuZHM7CiAgICAgbGl2ZU9wZXJhbmRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobGl2ZUxvY2Fscy5iaXRDb3VudCgpKTsKICAgICBsaXZlTG9jYWxzLmZvckVhY2hTZXRCaXQo
WyZdICh1bnNpZ25lZCBsaXZlTG9jYWwpIHsKQEAgLTMxMDksNyArMzEwOSw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjp2YWxpZGF0ZSgpCiB7CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIGxpdmVu
ZXNzKHRoaXMpOyAvLyBDb21wdXRlIGRpcmVjdGx5IGZyb20gc2NyYXRjaCBzbyBpdCBkb2Vzbid0
IGVmZmVjdCBDb2RlQmxvY2sgZm9vdHByaW50LgogICAgIAotICAgIEZhc3RCaXRWZWN0b3IgbGl2
ZUF0SGVhZCA9IGxpdmVuZXNzLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleCh0aGlzLCBC
eXRlY29kZUluZGV4KDApKTsKKyAgICBGYXN0Qml0VmVjdG9yIGxpdmVBdEhlYWQgPSBsaXZlbmVz
cy5nZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKHRoaXMsIEJ5dGVjb2RlSW5kZXgoMCkpOwog
ICAgIAogICAgIGlmIChsaXZlQXRIZWFkLm51bUJpdHMoKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KG1fbnVtQ2FsbGVlTG9jYWxzKSkgewogICAgICAgICBiZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVM
aXZlbmVzcy5oCmluZGV4IDc5MTQ1M2YzZmQ3MjM0MzZlZTBlZDUxOTBmMGJjMjdkN2RhMjMwNWIu
Ljc5ODYyYjhhNjcwMTg3MWM5YjNkYjM2MzBmODY2ZWRkM2E5ZDA2ZTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBA
IC0zNSwxOCArMzUsMTkgQEAgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogY2xhc3Mg
Q29kZUJsb2NrOwogCiAvLyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVuZXNzIGRvZXMgbm90IHRy
YWNrIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGl2ZW5lc3Mgb2YgdGVtcHMuCi0vLyBJZiB5
b3Ugd2FudCB0bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2twb2ludCBhc2sgbGl2ZW5lc3NGb3JDaGVj
a3BvaW50LgorLy8gSWYgeW91IHdhbnQgdG1wIGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNr
IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludC4KIGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBjb25zdCBGYXN0Qml0
VmVjdG9yJiBnZXRMaXZlbmVzcyhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNz
Q2FsY3VsYXRpb25Qb2ludCBwb2ludCkgY29uc3QKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBX
aGF0IHNob3VsZCB0aGlzIGRvIHdoZW4gd2UgaGF2ZSBjaGVja3BvaW50cz8KKyAgICAgICAgLy8g
V2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBvdmVyZmxvd2luZyBpbnRvIHRoZSBuZXh0IGJ5
dGVjb2Rlb2Zmc2V0IGluIG91ciB2ZWN0b3JzIGJlY2F1c2Ugd2UKKyAgICAgICAgLy8gc3RhdGlj
IGFzc2VydCB0aGF0IGJ5dGVjb2RlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBv
ZiBjaGVja3BvaW50cyBpbiBCeXRlY29kZVN0cnVjdHMuaAogICAgICAgICBzd2l0Y2ggKHBvaW50
KSB7CiAgICAgICAgIGNhc2UgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2U6Ci0g
ICAgICAgICAgICByZXR1cm4gbV9iZWZvcmVVc2VWZWN0b3JbYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KV07CisgICAgICAgICAgICByZXR1cm4gbV91c2VzQmVmb3JlW3RvSW5kZXgoYnl0ZWNvZGVJbmRl
eCldOwogICAgICAgICBjYXNlIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QWZ0ZXJVc2U6Ci0g
ICAgICAgICAgICByZXR1cm4gbV9hZnRlclVzZVZlY3RvcltieXRlY29kZUluZGV4Lm9mZnNldCgp
XTsKKyAgICAgICAgICAgIHJldHVybiBtX3VzZXNBZnRlclt0b0luZGV4KGJ5dGVjb2RlSW5kZXgp
XTsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IH0KQEAgLTU5LDEwICs2MCwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiAgICAgCisgICAgc3RhdGljIHNpemVfdCB0b0lu
ZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkgeyByZXR1cm4gYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSArIGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOyB9CisKICAgICAvLyBGSVhNRTog
VXNlIEZhc3RCaXRWZWN0b3IncyB2aWV3IG1lY2hhbmlzbSB0byBtYWtlIHRoZW0gY29tcGFjdC4K
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NDI3PFBh
c3RlPgotICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4g
bV9iZWZvcmVVc2VWZWN0b3I7Ci0gICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiBtX2FmdGVyVXNlVmVjdG9yOworICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0MjcKKyAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvciwg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdXNlc0JlZm9yZTsKKyAgICBWZWN0b3I8RmFzdEJp
dFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdXNlc0FmdGVyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdHJ1Y3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVj
dGlvbi5oCmluZGV4IDNkNzBjZDU0M2VjZmFlOTAyMjUwMjk2MDFhMGQ0MDVlYzY3MWIyZDAuLmY2
M2FkMjlmMjBmNTFlNmM2MDlmY2NiOWRiY2I1NTg5NmUzMjJmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCkBAIC0zOSw2ICszOSw3IEBAIHN0cnVj
dCBKU09wY29kZVRyYWl0cyB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBPcGNvZGVJRCB3aWRlMzIg
PSBvcF93aWRlMzI7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCogb3Bjb2Rl
TGVuZ3RocyA9IDo6SlNDOjpvcGNvZGVMZW5ndGhzOwogICAgIHN0YXRpYyBjb25zdGV4cHIgY29u
c3QgY2hhciogY29uc3QqIG9wY29kZU5hbWVzID0gOjpKU0M6Om9wY29kZU5hbWVzOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYXV0byBjaGVja3BvaW50Q291bnRUYWJsZSA9IGJ5dGVjb2RlQ2hlY2tw
b2ludENvdW50VGFibGU7CiB9OwogCiBzdHJ1Y3QgV2FzbU9wY29kZVRyYWl0cyB7CkBAIC01MCw2
ICs1MSw3IEBAIHN0cnVjdCBXYXNtT3Bjb2RlVHJhaXRzIHsKICAgICBzdGF0aWMgY29uc3RleHBy
IE9wY29kZUlEIHdpZGUzMiA9IHdhc21fd2lkZTMyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgY29u
c3QgdW5zaWduZWQqIG9wY29kZUxlbmd0aHMgPSB3YXNtT3Bjb2RlTGVuZ3RoczsKICAgICBzdGF0
aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIGNvbnN0KiBvcGNvZGVOYW1lcyA9IHdhc21PcGNvZGVO
YW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2hlY2twb2ludENvdW50VGFibGUgPSB3
YXNtQ2hlY2twb2ludENvdW50VGFibGU7CiB9OwogCiAKQEAgLTEyMiw2ICsxMjQsMTQgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gb3Bjb2RlSUQ8VHJhaXRzPigpIDwgVHJhaXRzOjpudW1iZXJP
ZkJ5dGVjb2Rlc1dpdGhDaGVja3BvaW50czsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUcmFpdHMgPSBKU09wY29kZVRyYWl0cz4KKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoZWNrcG9p
bnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQ2hlY2twb2ludHM8VHJhaXRzPigp
KQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiBUcmFpdHM6OmNoZWNrcG9p
bnRDb3VudFRhYmxlW29wY29kZUlEPFRyYWl0cz4oKV07CisgICAgfQorCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVHJhaXRzID0gSlNPcGNvZGVUcmFpdHM+CiAgICAgaW50IHNpemVTaGlmdEFtb3Vu
dCgpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luc3RydWN0aW9uU3RyZWFtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbnN0cnVjdGlvblN0cmVhbS5jcHAKaW5kZXggMzhjYWY5NWZkOWUwNjEwNTNlMTM1YTU5ZmUx
YTNjNzVmODVhODVkMy4uNmI5ZDY4YzExZjRiNzdmZWU0OTE2ZjcwNGJlZjU0MDRmZjk5ODVjZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3Ry
ZWFtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25T
dHJlYW0uY3BwCkBAIC00Niw0ICs0NiwxNCBAQCBib29sIEluc3RydWN0aW9uU3RyZWFtOjpjb250
YWlucyhJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pIGNvbnN0CiAgICAgcmV0dXJuIHBvaW50ZXIg
Pj0gbV9pbnN0cnVjdGlvbnMuZGF0YSgpICYmIHBvaW50ZXIgPCAobV9pbnN0cnVjdGlvbnMuZGF0
YSgpICsgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpKTsKIH0KIAorc2l6ZV90IEluc3RydWN0aW9uU3Ry
ZWFtOjppbnN0cnVjdGlvbkNvdW50KCkgY29uc3QKK3sKKyAgICBzaXplX3QgcmVzdWx0IHsgMCB9
OworICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiAqdGhpcykgeworICAgICAgICBV
TlVTRURfUEFSQU0oaW5zdHJ1Y3Rpb24pOworICAgICAgICByZXN1bHQrKzsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb25TdHJlYW0uaAppbmRleCAzZTk3OGQzMzJkNThkNzBhNTI5ZDI4ZjA1
MjY2NDQ4Y2ZmNzZlYjEwLi40MGQxMWQ2ODMzNTY2ZDM1NzEzNWJmZWYxOGIwZTIyNzE0ZTdiYzcx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25T
dHJlYW0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb25T
dHJlYW0uaApAQCAtMTY2LDYgKzE2Niw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFJlZiB7
IG1faW5zdHJ1Y3Rpb25zLCBvZmZzZXQgfTsKICAgICB9CiAKKyAgICAvLyBUaGlzIGlzIHRoZSBh
Y3R1YWwgbnVtYmVyIG9mIGJ5dGVjb2RlcyBpbiB0aGUgc3RyZWFtIGlnbm9yaW5nIG9wZXJhbmRz
LgorICAgIHNpemVfdCBpbnN0cnVjdGlvbkNvdW50KCkgY29uc3Q7CiAgICAgaW5saW5lIHNpemVf
dCBzaXplKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2luc3RydWN0aW9ucy5zaXpl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IGU2NDZkMDRhYjkzOWZmYjc2NzI0Y2MwYThkNDUxZjI4
ZGEzZjBlZDIuLmRhODRiZjdkNjVhOTA5NmYzMWI3NzhmYjk4YWFjZmFlZGFhN2QxZDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCkBAIC01MjE1LDcgKzUyMTUsNyBAQCB2b2lkIEZvckluQ29udGV4dDo6Zmlu
YWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cgogICAgIGZvciAodW5zaWduZWQgb2Zmc2V0ID0gYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoKTsg
aXNWYWxpZCgpICYmIG9mZnNldCA8IGJvZHlCeXRlY29kZUVuZE9mZnNldDspIHsKICAgICAgICAg
YXV0byBpbnN0cnVjdGlvbiA9IGdlbmVyYXRvci5pbnN0cnVjdGlvbnMoKS5hdChvZmZzZXQpOwog
ICAgICAgICBBU1NFUlQoIWluc3RydWN0aW9uLT5pczxPcEVudGVyPigpKTsKLSAgICAgICAgY29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIFsmXSAoQ2hlY2twb2ludCwg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKICAgICAgICAgICAgIGlmIChsb2NhbCgpLT52aXJ0
dWFsUmVnaXN0ZXIoKSA9PSBvcGVyYW5kKQogICAgICAgICAgICAgICAgIGludmFsaWRhdGUoKTsK
ICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zv
ckFsbEtpbGxzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgK
aW5kZXggODBjZDczZGU2NjM1MTYzZjUyY2I2OGFkOTliMmY1YjU4OGJlMWM0NC4uOGQ3ODU5NTI0
MGVjYTk2ZjgyY2Q5NWI4NGRlM2I4ZjNkYTNiMzNjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRm9yQWxsS2lsbHMuaApAQCAtNzksMTggKzc5LDIxIEBAIHZvaWQgZm9yQWxsS2ls
bGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0
ZXIsIGNvbnN0CiAgICAgICAgICAgICBBU1NFUlQoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKS5jaGVj
a3BvaW50KCkgIT0gYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSk7CiAgICAgICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGJlZm9yZS5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkg
PT0gYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLm9mZnNldCgpIHx8IG5vZGVBZnRlci0+b3AoKSA9PSBF
eGl0T0sgfHwgbm9kZUFmdGVyLT5vcCgpID09IEludmFsaWRhdGlvblBvaW50LCAiV2hlbiB0aGUg
REZHIGRvZXMgY29kZSBtb3Rpb24gaXQgc2hvdWxkIGNoYW5nZSB0aGUgZm9yRXhpdCBvcmlnaW4g
dG8gbWF0Y2ggdGhlIHN1cnJvdW5kaW5nIGJ5dGVjb2Rlcy4iKTsKIAotICAgICAgICAgICAgYXV0
byBjaGVja3BvaW50TGl2ZUJlZm9yZSA9IGxpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2Nr
LCBiZWZvcmUuYnl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgIGF1dG8gY2hlY2twb2ludExp
dmVBZnRlciA9IGxpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBhZnRlci5ieXRlY29k
ZUluZGV4KCkpOworICAgICAgICAgICAgYXV0byBsaXZlQmVmb3JlID0gdG1wTGl2ZW5lc3NGb3JD
aGVja3BvaW50KCpjb2RlQmxvY2ssIGJlZm9yZS5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAg
ICAgYXV0byBsaXZlQWZ0ZXIgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywg
YWZ0ZXIuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGxpdmVBZnRlci5pbnZlcnQoKTsK
KyAgICAgICAgICAgIGxpdmVCZWZvcmUuZmlsdGVyKGxpdmVBZnRlcik7CiAKLSAgICAgICAgICAg
IEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBncmFwaC5saXZlbmVzc0Zvcihj
b2RlQmxvY2spOwotICAgICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUFmdGVyID0g
ZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSwgTGl2ZW5lc3ND
YWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JF
YWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRtcCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVt
YXBPcGVyYW5kKGJlZm9yZUlubGluZUNhbGxGcmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkpKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZS5ieXRlY29kZUluZGV4KCku
Y2hlY2twb2ludCgpKSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgbW92aW5nIG9uIHRvIGFub3Ro
ZXIgYnl0ZWNvZGUsIGFsbCB0ZW1wcyBzaG91bGQgYmUgZGVhZCBub3cuCisgICAgICAgICAgICBh
dXRvIGxpdmVCZWZvcmUgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYmVm
b3JlLmJ5dGVjb2RlSW5kZXgoKSk7CiAKLSAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5k
IDogY2hlY2twb2ludExpdmVCZWZvcmUpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hlY2twb2lu
dExpdmVBZnRlci5jb250YWlucyhvcGVyYW5kKSB8fCAoIW9wZXJhbmQuaXNUbXAoKSAmJiBsaXZl
QWZ0ZXJbb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKV0pKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChi
ZWZvcmVJbmxpbmVDYWxsRnJhbWUsIG9wZXJhbmQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGxpdmVCZWZvcmUuZm9yRWFjaFNldEJpdChbJl0gKHNp
emVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChiZWZvcmVJ
bmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQ6OnRtcCh0bXApKSk7CisgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQogCiAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBn
cmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAppbmRleCA1MDM0MTIwMWViZDIwZjM2YmQzNjgwMzY5ZTI5MzhmZjc0MzIzMjEwLi44
ZTg0NmNiZTlkNGQxYzdlMTY5YmNkODZmN2E3NTA0NGE5MWQ4ZjUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMTE1Miw4ICsxMTUyLDggQEAgYm9vbCBHcmFwaDo6
aXNMaXZlSW5CeXRlY29kZShPcGVyYW5kIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikK
ICAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5udW1UbXBzKCkgfHwgb3BlcmFuZEluZGV4IDwg
dG1wT2Zmc2V0KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBhdXRv
IGxpdmUgPSBsaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+
Ynl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgIHJldHVybiBsaXZlLmNvbnRhaW5zKG9wZXJh
bmQpOworICAgICAgICAgICAgYXV0byBiaXRNYXAgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQo
KmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAg
IHJldHVybiBiaXRNYXAuZ2V0KG9wZXJhbmRJbmRleCAtIHRtcE9mZnNldCk7CiAgICAgICAgIH0K
IAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIo
KSAtIGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKaW5kZXggNTJiMzcxNzQzYWQ4NmEyOGJhZDYyZDFlZWE5YzBkZTE0Nzg4MDA1My4u
ODYzNjIyN2YzOTQ4MzM1ZGIzZDg0MGU4MWQzZmEwYzVjYmJhN2Y5ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaApAQCAtOTA0LDkgKzkwNCwxMCBAQCBwdWJsaWM6CiAKICAgICAg
ICAgICAgIGlmIChjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtVG1wcygpKTsKLSAgICAgICAg
ICAgICAgICBhdXRvIGxpdmUgPSBsaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29k
ZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBmb3IgKE9wZXJh
bmQgb3BlcmFuZCA6IGxpdmUpCi0gICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVy
YW5kKGlubGluZUNhbGxGcmFtZSwgb3BlcmFuZCkpOworICAgICAgICAgICAgICAgIGF1dG8gbGl2
ZVRtcHMgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0
ci0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgICAgICBsaXZlVG1wcy5mb3JFYWNoU2V0
Qml0KFsmXSAoc2l6ZV90IHRtcCkgeworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFw
T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQ6OnRtcCh0bXApKSk7CisgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TW92SGludFJlbW92YWxQaGFzZS5jcHAKaW5kZXggZDQzMDdlZDg3MzA2ZjQ0NjYyMGI3ODFiMGYw
MmQ1Y2E0NTNjOWJhYi4uY2M4ZjllMTc1ZGZhOWNhOGMwOGU1YzcyMDM4YzY0NGYxZGViN2MyZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFs
UGhhc2UuY3BwCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgTG9jYWxzOiAiLCBtX3N0YXRlLCAiXG4iKTsK
KyAgICAgICAgICAgIGRhdGFMb2coIiAgICBMb2NhbHMgYXQgIiwgYmxvY2stPnRlcm1pbmFsKCkt
Pm9yaWdpbi5mb3JFeGl0LCAiOiAiLCBtX3N0YXRlLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAg
IC8vIEFzc3VtZSB0aGF0IGJsb2NrcyBhZnRlciB1cyBleGl0LgogICAgICAgICBjdXJyZW50RXBv
Y2guYnVtcCgpOwpAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gTW92SGludCkgewogICAgICAgICAgICAgICAgIEVwb2NoIGxvY2FsRXBvY2gg
PSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpOwogICAgICAgICAgICAg
ICAgIGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCAiLCBub2RlLCAiOiBjdXJyZW50ID0gIiwgY3Vy
cmVudEVwb2NoLCAiLCBsb2NhbCA9ICIsIGxvY2FsRXBvY2gsICJcbiIpOworICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgQXQgIiwgbm9kZSwgIiAoIiwgbm9kZS0+dW5saW5rZWRPcGVy
YW5kKCksICIpOiBjdXJyZW50ID0gIiwgY3VycmVudEVwb2NoLCAiLCBsb2NhbCA9ICIsIGxvY2Fs
RXBvY2gsICJcbiIpOwogICAgICAgICAgICAgICAgIGlmICghbG9jYWxFcG9jaCB8fCBsb2NhbEVw
b2NoID09IGN1cnJlbnRFcG9jaCkgewogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhab21iaWVIaW50KTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkgPSBFZGdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAppbmRleCA3
MTYxZmJmMjY4ZjM1MDE5Mjk3OGEyZjg1MmQ1MWNjOGIxMDllNzM1Li41YWRlOWM5NWEwNGVjNjU0
YmUyOTJlYWQxMTU1NGI4NDlmYWU2OTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAKQEAgLTc1OCw3ICs3NTgsNyBAQCB2b2lkIFBsYW46OmNsZWFuTXVzdEhhbmRsZVZhbHVl
c0lmTmVjZXNzYXJ5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5h
dGl2ZSA9IG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIEZhc3RCaXRWZWN0b3IgbGl2
ZW5lc3MgPSBhbHRlcm5hdGl2ZS0+bGl2ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0
Qnl0ZWNvZGVJbmRleChhbHRlcm5hdGl2ZSwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAg
IEZhc3RCaXRWZWN0b3IgbGl2ZW5lc3MgPSBhbHRlcm5hdGl2ZS0+bGl2ZW5lc3NBbmFseXNpcygp
LmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24oYWx0ZXJuYXRpdmUsIG1fb3NyRW50cnlCeXRl
Y29kZUluZGV4KTsKIAogICAgIGZvciAodW5zaWduZWQgbG9jYWwgPSBtX211c3RIYW5kbGVWYWx1
ZXMubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgaWYgKCFsaXZlbmVzc1ts
b2NhbF0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29k
ZS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCmluZGV4IDgy
Mzc0YjdmYmU4NmQ1Nzg4YjNhNDA1ODE1OGE4OThkNmE2YTIwOGMuLjA1ZDA5ODgwNjkwNmVhODIy
MzAyZGMyMTAxNjJhYzhlMDllNjg2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0
b3IvT3Bjb2RlLnJiCkBAIC0xMzAsMTUgKzEzMCwxOCBAQCBjbGFzcyBPcGNvZGUKICAgICAgICAg
PDwtRU9GCiBzdHJ1Y3QgI3tjYXBpdGFsaXplZF9uYW1lfSA6IHB1YmxpYyBJbnN0cnVjdGlvbiB7
CiAgICAgI3tvcGNvZGVJRH0KKyAgICAje2xlbmd0aFZhbHVlfQogICAgICN7dGVtcHN9CiAgICAg
I3tjaGVja3BvaW50VmFsdWVzfQogCisKICN7ZW1pdHRlcn0KICN7ZHVtcGVyfQogI3tjb25zdHJ1
Y3RvcnN9CiAje3NldHRlcnN9I3ttZXRhZGF0YV9zdHJ1Y3RfYW5kX2FjY2Vzc29yfQogI3ttZW1i
ZXJzfQogfTsKKyN7Y2hlY2twb2ludFNpemVBc3NlcnR9CiBFT0YKICAgICBlbmQKIApAQCAtMTQ2
LDEyICsxNDksMjIgQEAgRU9GCiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2RlSURU
eXBlfSBvcGNvZGVJRCA9ICN7bmFtZX07IgogICAgIGVuZAogCisgICAgZGVmIGxlbmd0aFZhbHVl
CisgICAgICAgICJzdGF0aWMgY29uc3RleHByIHNpemVfdCBsZW5ndGggPSAje2xlbmd0aH07Igor
ICAgIGVuZAorCiAgICAgZGVmIGNoZWNrcG9pbnRWYWx1ZXMKICAgICAgICAgcmV0dXJuIGlmIEBj
aGVja3BvaW50cy5uaWw/CiAKICAgICAgICAgWyJlbnVtIENoZWNrcG9pbnRzIDogdWludDhfdCB7
Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsgfGNoZWNrcG9pbnR8ICIgICAgICAgICN7Y2hlY2tw
b2ludH0sIiB9KS5jb25jYXQoWyIgICAgICAgIG51bWJlck9mQ2hlY2twb2ludHMsIiwgIiAgICB9
OyJdKS5qb2luKCJcbiIpCiAgICAgZW5kCiAKKyAgICBkZWYgY2hlY2twb2ludFNpemVBc3NlcnQK
KyAgICAgICAgcmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CisKKyAgICAgICAgInN0YXRpY19h
c3NlcnQoI3tjYXBpdGFsaXplZF9uYW1lfTo6bGVuZ3RoID4gI3tjYXBpdGFsaXplZF9uYW1lfTo6
bnVtYmVyT2ZDaGVja3BvaW50cywgXCJGdWxsQnl0ZWNvZGVMaXZlc3MgcmVsaWVzIG9uIHRoZSBs
ZW5ndGggb2YgI3tjYXBpdGFsaXplZF9uYW1lfSBiZWluZyBncmVhdGVyIHRoYW4gdGhlIG51bWJl
ciBvZiBjaGVja3BvaW50c1wiKTsiCisgICAgZW5kCisKICAgICBkZWYgdGVtcHMKICAgICAgICAg
cmV0dXJuIGlmIEB0bXBzLm5pbD8KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9TZWN0aW9uLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9T
ZWN0aW9uLnJiCmluZGV4IGY4MzgwZWQ1NzVkMzEzYzZlYTA2YWI1ZDcyYzI1YTg2Nzc2ZDljYzgu
LmQ5ZTk5NGVlYWQ2MzQ4Y2MzODg5MTEyYTEyY2Y1YTFjYzMwNDEwMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKQEAgLTg0LDEzICs4NCwxNSBAQCBjbGFz
cyBTZWN0aW9uCiAKICAgICAgIGlmIGNvbmZpZ1s6ZW1pdF9pbl9zdHJ1Y3RzX2ZpbGVdCiAgICAg
ICAgICAgaSA9IDAKKyAgICAgICAgICBvdXQud3JpdGUoInN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgI3tjb25maWdbOm1hY3JvX25hbWVfY29tcG9uZW50XS5kb3duY2FzZX1DaGVja3BvaW50Q291
bnRUYWJsZVtdID0ge1xuIikKICAgICAgICAgICB3aGlsZSB0cnVlCiAgICAgICAgICAgICAgIGlm
ICFvcGNvZGVzW2ldLmNoZWNrcG9pbnRzCi0gICAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIgor
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ9O1xuXG4iCiAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiNkZWZpbmUgTlVNQkVSX09GXyN7Y29uZmlnWzptYWNyb19uYW1lX2NvbXBvbmVudF19X1dJ
VEhfQ0hFQ0tQT0lOVFMgI3tpfVxuIgogICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAg
ICAgICAgZW5kCiAKKyAgICAgICAgICAgICAgb3V0LndyaXRlKCIgICAgI3tvcGNvZGVzW2ldLmNo
ZWNrcG9pbnRzLmxlbmd0aH0sXG4iKQogICAgICAgICAgICAgICBpICs9IDEKICAgICAgICAgICBl
bmQKICAgICAgICAgICBvdXQgPDwgIlxuIgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAxZTRjMGRjZWJhOWRmNzQxNWI1ZTYyNzQzYmU5MzYx
NjcxMDMyN2JlLi43MzllZTAxNjU4YzI2OTQ4ZjhiOTI3NGY5ZGQwMDQ5ZDliNDA1ZjhiIDEwMDY0
NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDIwLTA2LTI0ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUu
Y29tPgorCisgICAgICAgIEJ5dGVjb2RlIFVzZURlZiBzaG91bGQgYmUgYXdhcmUgb2YgY2hlY2tw
b2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MzU2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
c3RyZXNzL2Zvci1vZi1uZWVkcy1ieXRlY29kZS11c2UtYXQtY2hlY2twb2ludC1hZnRlci1kZWYu
anM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAyMC0wNi0yMyAgTWFyayBMYW0gIDxtYXJr
LmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgSGFuZGxlIHN0cmluZyBvdmVyZmxvdyBpbiBERkcg
Z3JhcGggZHVtcCB3aGlsZSB2YWxpZGF0aW5nIEFJLgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvZm9yLW9mLW5lZWRzLWJ5dGVjb2RlLXVzZS1hdC1jaGVja3BvaW50LWFmdGVyLWRlZi5qcyBi
L0pTVGVzdHMvc3RyZXNzL2Zvci1vZi1uZWVkcy1ieXRlY29kZS11c2UtYXQtY2hlY2twb2ludC1h
ZnRlci1kZWYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDAxODM1MWQ5YmY3M2Q3NDdmNzY4MTNkMTYzZDYwNzQz
ZDgxZDYwNgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1vZi1uZWVkcy1i
eXRlY29kZS11c2UtYXQtY2hlY2twb2ludC1hZnRlci1kZWYuanMKQEAgLTAsMCArMSwxNCBAQAor
Ly9AIHJlcXVpcmVPcHRpb25zKCItLWppdFBvbGljeVNjYWxlPTAiLCAiLS12YWxpZGF0ZUZUTE9T
UkV4aXRMaXZlbmVzcz0xIikKKworZnVuY3Rpb24gZm9vKCkgeworICBmb3IgKGxldCBpPTA7IGk8
MTAwOyBpKyspIHsKKyAgICBsZXQgdTggPSBuZXcgVWludDhBcnJheSg0KTsKKyAgICBmb3IgKGxl
dCBxIG9mIHU4KSB7fQorICAgIGxldCB1MzIgPSBuZXcgVWludDMyQXJyYXkoMik7CisgICAgZm9y
IChsZXQgcSBvZiB1MzIpIHt9CisgIH0KK30KKworZm9yIChsZXQgaT0wOyBpPDEwMDsgaSsrKSB7
CisgIGZvbygpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402669</attachid>
            <date>2020-06-24 12:00:51 -0700</date>
            <delta_ts>2020-06-24 14:39:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213566-20200624120050.patch</filename>
            <type>text/plain</type>
            <size>57986</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzNDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
OWU0YWRjNTIzYWU1NzU4MjY3NTQ5NTc2OTllNTYyZTcyZWFhNmQ3Li43OThkZDg0ODg1Mzk3Mjdm
MzYwZjEzZDUzMjI4ZDEzYjNmY2FlODkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTMgQEAKKzIwMjAtMDYtMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnl0ZWNvZGUgVXNlRGVmIHNob3VsZCBiZSBhd2FyZSBvZiBjaGVj
a3BvaW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjEzNTY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UHJldmlvdXNseSwgd2UgdHJpZWQgdG8gc29sdmUgdGVhY2hpbmcgREZHIGFib3V0IHVzZXMgYW5k
IGRlZnMgb2YKKyAgICAgICAgbG9jYWxzIGFjcm9zcyBjaGVja3BvaW50cyBieSBhc2tpbmcgd2hh
dCBsb2NhbHMgd2VyZSBkZWYnZCBhdCBzb21lCisgICAgICAgIGNoZWNrcG9pbnQuIEhvd2V2ZXIs
IHRoaXMgd2FzIHN1YnRseSB3cm9uZyBiZWNhdXNlIHdlIGRpZG4ndAorICAgICAgICByZXBvcnQg
YSB1c2UgYXQgZWFjaCBzdWJzZXF1ZW50IGNoZWNrcG9pbnQgc28gREZHIHRob3VnaHQgdGhlCisg
ICAgICAgIGxvY2FsIHdhcyBraWxsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZXZlcnRzIHRo
YXQgY2hhbmdlIGFuZCBpbnN0ZWFkIHRlYWNoZXMgQnl0ZWNvZGVVc2VEZWYKKyAgICAgICAgYWJv
dXQgY2hlY2twb2ludHMuIFJpZ2h0IG5vdywgQnl0ZWNvZGVVc2VEZWYgb25seSBrbm93cyBhYm91
dAorICAgICAgICBsb2NhbHMgYXQgY2hlY2twb2ludHMgYnV0IGluIHRoZSBmdXR1cmUgd2UgbWF5
IHRlYWNoIGl0IGFib3V0IHRtcHMKKyAgICAgICAgYXQgd2VsbC4KKworICAgICAgICBTaW5jZSB0
aGUgdmVjdG9ycyBjb250YWluaW5nIG91ciBsaXZlbmVzcyBiaXRtYXBzIHdlcmUgYWxyZWFkeQor
ICAgICAgICBzcGFyc2UgKHRoZXkgYXJlIGluZGV4ZWQgYnkgdGhlIGJ5dGVjb2RlIG9mZnNldCkg
d2UgY2FuIHJldXNlIHRoZQorICAgICAgICBnYXBzIHRvIGhvbGQgb3VyIGNoZWNrcG9pbnQgbGl2
ZW5lc3MgaW5mb3JtYXRpb24uIFRvIG1ha2Ugc3VyZSB3ZQorICAgICAgICBkb24ndCBvdmVybGFw
IGJldHdlZW4gdGhlIG5leHQgYnl0ZWNvZGUgYW5kIGEgY2hlY2twb2ludCBmb3IgdGhlCisgICAg
ICAgIGN1cnJlbnQgYnl0ZWNvZGUgdGhlcmUgaXMgbm93IGEgc3RhdGljIGFzc2VydCB0aGF0IHRo
ZSBsZW5ndGggb2YKKyAgICAgICAgdGhlIGJ5dGVjb2RlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbnVt
YmVyIG9mIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFzc3VtcHRpb24gaXMgdHJ1ZSBmb3Ig
ZXhpc3RpbmcgYnl0ZWNvZGVzIHdpdGggY2hlY2twb2ludHMgYW5kCisgICAgICAgIGxpa2VseSB0
byBiZSB0cnVlIGFueXdheSBmb3IgZnV0dXJlIG9uZXMuCisKKyAgICAgICAgTWFueSBvZiB0aGUg
Qnl0ZWNvZGVMaXZlbmVzc1Byb3BlZ2F0aW9uIGZ1bmN0aW9ucyBoYXZlIGJlZW4KKyAgICAgICAg
cmVuYW1lZCB0byByZWZsZWN0IHRoYXQgdGhleSBvcGVyYXRlIG92ZXIgdGhlIGZ1bGwgaW5zdHJ1
Y3Rpb24sCisgICAgICAgIGluY2x1ZGluZyBjaGVja3BvaW50cywgcmF0aGVyIHRoYW4ganVzdCB0
aGUgQnl0ZWNvZGVJbmRleCBwYXNzZWQuCisKKyAgICAgICAgTGFzdGx5LCB0aGlzIHBhdGNoIG1h
a2VzIGEgc3BlY3VsYXRpdmUgZml4IHRvIGZvckFsbEtpbGxlZE9wZXJhbmRzIHdoZXJlIHdlCisg
ICAgICAgIHdvdWxkbid0IHJlcG9ydCB0aGF0IGFsbCB0bXBzIGRpZSBhdCB0aGUgZW5kIG9mIGVh
Y2ggYnl0ZWNvZGUuIEkgY2FuJ3QgdGhpbmsKKyAgICAgICAgb2YgYSBjYXNlIHdoZXJlIHRoaXMg
d291bGQgYnJlYWsgdGhpbmdzIGJ1dCBpdCdzIHByb2JhYmx5IGdvb2QgaHlnaWVuZS4KKworICAg
ICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6R2VuZXJhdG9yTGl2ZW5lc3NBbmFseXNpczo6cnVuKToKKyAgICAgICAgKiBieXRlY29k
ZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OkJ5dGVjb2Rl
SW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpjaGVja3BvaW50IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6d2l0aENoZWNrcG9pbnQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpwYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKToKKyAgICAgICAgKEpTQzo6dG1wTGl2ZW5lc3NG
b3JDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpn
ZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjps
aXZlbmVzc0ZvckNoZWNrcG9pbnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXhEZWYpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRl
eFVzZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92
ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24p
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2spOgorICAgICAgICAoSlND
OjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rp
b24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVy
SW5zdHJ1Y3Rpb25EZWYpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2UpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJ
bkV4Y2VwdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVu
ZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJ
bmRleEltcGwpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBs
KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpj
b21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRl
Y29kZUluZGV4U2xvdyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsaWRhdGUpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmg6CisgICAgICAgIChKU0M6OkZ1
bGxCeXRlY29kZUxpdmVuZXNzOjpnZXRMaXZlbmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1
bGxCeXRlY29kZUxpdmVuZXNzOjp0b0luZGV4KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVj
dGlvbi5oOgorICAgICAgICAoSlNDOjpCYXNlSW5zdHJ1Y3Rpb246Om51bWJlck9mQ2hlY2twb2lu
dHMgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW5zdHJ1Y3Rpb25TdHJlYW06Omluc3RydWN0aW9uQ291bnQgY29uc3QpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmg6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Zm9yQWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAg
ICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNl
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6Y2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkpOgorICAgICAgICAqIGdlbmVyYXRv
ci9PcGNvZGUucmI6CisgICAgICAgICogZ2VuZXJhdG9yL1NlY3Rpb24ucmI6CisKKyAgICAgICAg
KiBieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChKU0M6
OkdlbmVyYXRvckxpdmVuZXNzQW5hbHlzaXM6OnJ1bik6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVJbmRleC5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Y2hlY2twb2ludCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OndpdGhDaGVja3BvaW50IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVJbmRleDo6cGFjayk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjpkdW1wUmVzdWx0cyk6CisgICAgICAgIChKU0M6OnRtcExpdmVuZXNzRm9yQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGl2ZW5l
c3NGb3JDaGVja3BvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
OjpnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2
ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4RGVmKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXhVc2Up
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0
ZWNvZGVJbmRleFVzZUluRXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
TGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZl
bmVzc0Zvckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3Bh
Z2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3Ry
dWN0aW9uRGVmKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3Bh
Z2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uVXNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uVXNlSW5FeGNl
cHRpb25IYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1By
b3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNz
SW5mb0F0Qnl0ZWNvZGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNv
ZGVVc2VEZWYuY3BwOgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJ
bXBsKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0
ZVVzZXNGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJ
bmRleFNsb3cpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbGlkYXRlKToKKyAgICAgICAg
KiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOgorICAgICAgICAoSlNDOjpGdWxsQnl0
ZWNvZGVMaXZlbmVzczo6Z2V0TGl2ZW5lc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpGdWxsQnl0
ZWNvZGVMaXZlbmVzczo6dG9JbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24u
aDoKKyAgICAgICAgKEpTQzo6QmFzZUluc3RydWN0aW9uOjpudW1iZXJPZkNoZWNrcG9pbnRzIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZpbmFsaXplKToKKyAgICAgICAgKiBkZmcvREZHRm9y
QWxsS2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5kcyk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNM
aXZlSW5CeXRlY29kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2Fy
eSk6CisgICAgICAgICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3Iv
U2VjdGlvbi5yYjoKKwogMjAyMC0wNi0yNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtKU0NdIENsb2JiZXJpemUgbWlzc2VzIGB3cml0ZShIZWFwKWAgcmVw
b3J0IGluIHNvbWUgbm9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCmluZGV4IDZmYmEyMjk3
YzI5MWZlNDhlYjk5M2NmYTdlZmY2MzkxY2M0Zjg2NjMuLmE4ZTU2ZDBjZDM5NGJjMWI3YWMwNTI2
YmU4NjY3ZWFjOGJkZDdlNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcApAQCAtMTk0LDcg
KzE5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcnVuTGl2ZW5lc3NGaXhwb2ludChjb2RlQmxvY2ss
IGluc3RydWN0aW9ucywgbV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSk7CiAKICAgICAgICAg
Zm9yIChZaWVsZERhdGEmIGRhdGEgOiBtX2dlbmVyYXRvcmlmaWNhdGlvbi55aWVsZHMoKSkKLSAg
ICAgICAgICAgIGRhdGEubGl2ZW5lc3MgPSBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCksIEJ5
dGVjb2RlSW5kZXgobV9nZW5lcmF0b3JpZmljYXRpb24uaW5zdHJ1Y3Rpb25zKCkuYXQoZGF0YS5w
b2ludCkubmV4dCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICBkYXRhLmxpdmVuZXNzID0gZ2V0
TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9nZW5l
cmF0b3JpZmljYXRpb24uZ3JhcGgoKSwgQnl0ZWNvZGVJbmRleChtX2dlbmVyYXRvcmlmaWNhdGlv
bi5pbnN0cnVjdGlvbnMoKS5hdChkYXRhLnBvaW50KS5uZXh0KCkub2Zmc2V0KCkpKTsKICAgICB9
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
SW5kZXguaAppbmRleCA2ZTI2NmQzZGFmM2IxMjVlODczNjc1NzU0MDUyYzMxM2MwZTVhNTcxLi45
YmM4NDM0ZTBmOWIzOGIyOGExYjgxMWUwZTAxZmVlMjAxYjhiYjg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTM0LDYgKzM0LDkgQEAg
Y2xhc3MgUHJpbnRTdHJlYW07CiAKIG5hbWVzcGFjZSBKU0MgewogCit1c2luZyBDaGVja3BvaW50
ID0gdWludDhfdDsKK3N0YXRpYyBjb25zdGV4cHIgQ2hlY2twb2ludCBub0NoZWNrcG9pbnRzID0g
MDsKKwogY2xhc3MgQnl0ZWNvZGVJbmRleCB7CiBwdWJsaWM6CiAgICAgQnl0ZWNvZGVJbmRleCgp
ID0gZGVmYXVsdDsKQEAgLTQyLDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAg
ICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90
IGNoZWNrcG9pbnQgPSAwKQorICAgIGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQsIENoZWNrcG9pbnQgY2hlY2twb2ludCA9IG5vQ2hlY2twb2ludHMpCiAgICAg
ICAgIDogbV9wYWNrZWRCaXRzKHBhY2soYnl0ZWNvZGVPZmZzZXQsIGNoZWNrcG9pbnQpKQogICAg
IHsKICAgICAgICAgQVNTRVJUKCp0aGlzKTsKQEAgLTU0LDcgKzU3LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hlY2twb2ludFNoaWZ0ID0gV1RGOjpnZXRNU0JT
ZXRDb25zdGV4cHIobnVtYmVyT2ZDaGVja3BvaW50cyk7CiAKICAgICB1aW50MzJfdCBvZmZzZXQo
KSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgPj4gY2hlY2twb2ludFNoaWZ0OyB9Ci0gICAg
dWludDhfdCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYgY2hlY2tw
b2ludE1hc2s7IH0KKyAgICBDaGVja3BvaW50IGNoZWNrcG9pbnQoKSBjb25zdCB7IHJldHVybiBt
X3BhY2tlZEJpdHMgJiBjaGVja3BvaW50TWFzazsgfQogICAgIHVpbnQzMl90IGFzQml0cygpIGNv
bnN0IHsgcmV0dXJuIG1fcGFja2VkQml0czsgfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIFdURjo6aW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CkBAIC02Miw3ICs2NSw3IEBA
IHB1YmxpYzoKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1
cm4gKnRoaXMgPT0gZGVsZXRlZFZhbHVlKCk7IH0KIAogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4
IGZyb21CaXRzKHVpbnQzMl90IGJpdHMpOwotICAgIEJ5dGVjb2RlSW5kZXggd2l0aENoZWNrcG9p
bnQodW5zaWduZWQgY2hlY2twb2ludCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChvZmZz
ZXQoKSwgY2hlY2twb2ludCk7IH0KKyAgICBCeXRlY29kZUluZGV4IHdpdGhDaGVja3BvaW50KENo
ZWNrcG9pbnQgY2hlY2twb2ludCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChvZmZzZXQo
KSwgY2hlY2twb2ludCk7IH0KIAogICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgogICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52
YWxpZE9mZnNldCAmJiBtX3BhY2tlZEJpdHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0K
QEAgLTgwLDEyICs4MywxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDMyX3QgaW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKTsKIAotICAgIHN0YXRpYyB1aW50MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5k
ZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7CisgICAgc3RhdGljIHVpbnQzMl90IHBhY2sodWludDMy
X3QgYnl0ZWNvZGVJbmRleCwgQ2hlY2twb2ludCk7CiAKICAgICB1aW50MzJfdCBtX3BhY2tlZEJp
dHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCi1pbmxpbmUgdWludDMyX3QgQnl0ZWNvZGVJbmRl
eDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1aW50OF90IGNoZWNrcG9pbnQpCitpbmxp
bmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCBD
aGVja3BvaW50IGNoZWNrcG9pbnQpCiB7CiAgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJP
ZkNoZWNrcG9pbnRzKTsKICAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNo
aWZ0KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCmluZGV4IDQyYTYzNWVjOGUzZTQ4NzEyNDkzMzNhYjg4NTA2YzU3NmZiNjczYjkuLjhi
NWQ2ZjViYmU2NTI2ZDUwNjY5OWY1NjRhN2E0NGYwMTkzNDRlNDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgotI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDQsNTcg
KzQzLDQ1IEBAIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgICAgICBkdW1wUmVzdWx0cyhjb2RlQmxvY2sp
OwogfQogCi12b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRC
eXRlY29kZUluZGV4KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCkKLXsKLSAgICBCeXRlY29kZUJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOwotICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKCFibG9jay0+
aXNFbnRyeUJsb2NrKCkpOwotICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwotICAg
IHJlc3VsdC5yZXNpemUoYmxvY2stPm91dCgpLm51bUJpdHMoKSk7Ci0gICAgY29tcHV0ZUxvY2Fs
TGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKSwgbV9ncmFwaCwgKmJsb2NrLCBieXRlY29kZUluZGV4LCByZXN1bHQpOwotfQotCi1GYXN0
Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZUluZGV4KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCi17Ci0gICAgRmFzdEJpdFZlY3RvciBvdXQ7Ci0gICAgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZUluZGV4KGNvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCwgb3V0KTsKLSAgICByZXR1cm4gb3V0
OwotfQotCiB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUZ1bGxMaXZlbmVz
cyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIHJlc3VsdCkKIHsK
ICAgICBGYXN0Qml0VmVjdG9yIG91dDsKIAotICAgIHJlc3VsdC5tX2JlZm9yZVVzZVZlY3Rvci5y
ZXNpemUoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotICAgIHJlc3VsdC5tX2Fm
dGVyVXNlVmVjdG9yLnJlc2l6ZShjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7Cisg
ICAgc2l6ZV90IHNpemUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBy
ZXN1bHQubV91c2VzQmVmb3JlLnJlc2l6ZShzaXplKTsKKyAgICByZXN1bHQubV91c2VzQWZ0ZXIu
cmVzaXplKHNpemUpOwogICAgIAogICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6
IG1fZ3JhcGguYmFzaWNCbG9ja3NJblJldmVyc2VPcmRlcigpKSB7CiAgICAgICAgIGlmIChibG9j
ay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIAogICAgICAgICBvdXQgPSBibG9jay5vdXQoKTsKLSAgICAgICAgCi0g
ICAgICAgIGF1dG8gdXNlID0gWyZdICh1bnNpZ25lZCBiaXRJbmRleCkgewotICAgICAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgdXNlIGZ1bmN0b3IsIHNvIHdlIHNldCB0aGUgYml0LgotICAgICAgICAg
ICAgb3V0W2JpdEluZGV4XSA9IHRydWU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgYXV0byBkZWYg
PSBbJl0gKHVuc2lnbmVkIGJpdEluZGV4KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBk
ZWYgZnVuY3Rvciwgc28gd2UgY2xlYXIgdGhlIGJpdC4KLSAgICAgICAgICAgIG91dFtiaXRJbmRl
eF0gPSBmYWxzZTsKLSAgICAgICAgfTsKLQogICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpOwogICAgICAgICB1bnNpZ25lZCBjdXJzb3IgPSBibG9j
ay50b3RhbExlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay5kZWx0YSgp
LnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgY3Vyc29yIC09IGJsb2NrLmRlbHRhKClbaV07
CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KGJsb2NrLmxlYWRlck9mZnNldCgpICsgY3Vyc29yKTsKLQotICAgICAgICAgICAgc3RlcE92ZXJJ
bnN0cnVjdGlvbkRlZihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJ
bmRleCwgZGVmKTsKLSAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJbkV4Y2VwdGlv
bkhhbmRsZXIoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ3JhcGgsIGJ5dGVjb2RlSW5kZXgs
IHVzZSk7Ci0gICAgICAgICAgICByZXN1bHQubV9hZnRlclVzZVZlY3RvcltieXRlY29kZUluZGV4
Lm9mZnNldCgpXSA9IG91dDsgLy8gQWZ0ZXJVc2UgcG9pbnQuCi0gICAgICAgICAgICBzdGVwT3Zl
ckluc3RydWN0aW9uVXNlKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dyYXBoLCBieXRlY29k
ZUluZGV4LCB1c2UpOwotICAgICAgICAgICAgcmVzdWx0Lm1fYmVmb3JlVXNlVmVjdG9yW2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCldID0gb3V0OyAvLyBCZWZvcmVVc2UgcG9pbnQuCisgICAgICAgICAg
ICBmb3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZUlu
ZGV4KS0+bnVtYmVyT2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAg
ICAgICAgYnl0ZWNvZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXgud2l0aENoZWNrcG9pbnQoY2hlY2tw
b2ludCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIHVzZSA9IFsmXSAoQ2hlY2twb2ludCB0YXJn
ZXQsIHVuc2lnbmVkIGJpdEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIHVzZSBmdW5jdG9yLCBzbyB3ZSBzZXQgdGhlIGJpdC4KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGNoZWNrcG9pbnQgPT0gdGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0W2Jp
dEluZGV4XSA9IHRydWU7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1
dG8gZGVmID0gWyZdIChDaGVja3BvaW50IHRhcmdldCwgdW5zaWduZWQgYml0SW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmIGZ1bmN0b3IsIHNvIHdlIGNsZWFy
IHRoZSBiaXQuCisgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja3BvaW50ID09IHRhcmdldCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dFtiaXRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgc3RlcE92ZXJCeXRlY29kZUluZGV4RGVmKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dyYXBoLCBieXRlY29kZUluZGV4LCBkZWYpOworICAg
ICAgICAgICAgICAgIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZUluRXhjZXB0aW9uSGFuZGxlcihj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQubV91c2VzQWZ0ZXJbcmVzdWx0LnRvSW5kZXgoYnl0ZWNvZGVJ
bmRleCldID0gb3V0OyAvLyBBZnRlclVzZSBwb2ludC4KKyAgICAgICAgICAgICAgICBzdGVwT3Zl
ckJ5dGVjb2RlSW5kZXhVc2UoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ3JhcGgsIGJ5dGVj
b2RlSW5kZXgsIHVzZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1fdXNlc0JlZm9yZVtyZXN1
bHQudG9JbmRleChieXRlY29kZUluZGV4KV0gPSBvdXQ7IC8vIEJlZm9yZVVzZSBwb2ludC4KKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE1MCw3ICsxMzcsNyBAQCB2b2lk
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiAgICAgICAgICAgICBjb25zdCBhdXRvIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0
aW9ucy5hdChieXRlY29kZU9mZnNldCk7CiAKICAgICAgICAgICAgIGRhdGFMb2dGKCJMaXZlIHZh
cmlhYmxlczoiKTsKLSAgICAgICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUJlZm9yZSA9IGdldExp
dmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpKTsKKyAgICAgICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUJlZm9yZSA9IGdldExp
dmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
T2Zmc2V0KSk7CiAgICAgICAgICAgICBkdW1wQml0VmVjdG9yKGxpdmVCZWZvcmUpOwogICAgICAg
ICAgICAgZGF0YUxvZ0YoIlxuIik7CiAgICAgICAgICAgICBjb2RlQmxvY2stPmR1bXBCeXRlY29k
ZShXVEY6OmRhdGFGaWxlKCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xNzYsMTQgKzE2Mywx
MCBAQCBjb25zdGV4cHIgYm9vbCBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKEVudW1UeXBlMSB2
MSwgRW51bVR5cGUyIHYyKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZTI+KHYx
KSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjIpOwogfQogCi1WZWN0b3I8T3BlcmFuZCwgbWF4
TnVtQ2hlY2twb2ludFRtcHM+IGxpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2sm
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorQml0bWFwPG1heE51bUNo
ZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiBj
b2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBWZWN0b3I8T3Bl
cmFuZCwgbWF4TnVtQ2hlY2twb2ludFRtcHM+IHJlc3VsdDsKLSAgICB1aW50OF90IGNoZWNrcG9p
bnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLQotICAgIGF1dG8gc2NvcGVFeGl0ID0g
bWFrZVNjb3BlRXhpdChbJl0gewotICAgICAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA8PSBtYXhO
dW1DaGVja3BvaW50VG1wcyk7Ci0gICAgfSk7CisgICAgQml0bWFwPG1heE51bUNoZWNrcG9pbnRU
bXBzPiByZXN1bHQ7CisgICAgQ2hlY2twb2ludCBjaGVja3BvaW50ID0gYnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCk7CiAKICAgICBpZiAoIWNoZWNrcG9pbnQpCiAgICAgICAgIHJldHVybiByZXN1
bHQ7CkBAIC0xOTUsMTYgKzE3OCwxNCBAQCBWZWN0b3I8T3BlcmFuZCwgbWF4TnVtQ2hlY2twb2lu
dFRtcHM+IGxpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZAogICAgICAg
ICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6
bWFrZUNhbGwsIE9wVGFpbENhbGxWYXJhcmdzOjptYWtlQ2FsbCkgJiYgZW51bVZhbHVlc0VxdWFs
QXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1RoaXMsIE9wVGFpbENh
bGxWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAgc3RhdGljX2Fzc2Vy
dChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBPcENv
bnN0cnVjdFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9w
Q2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhpcywgT3BDb25zdHJ1Y3RWYXJhcmdzOjph
cmdDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gT3BDYWxs
VmFyYXJnczo6bWFrZUNhbGwpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKE9wZXJhbmQ6OnRt
cChPcENhbGxWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgICAgIHJl
c3VsdC5zZXQoT3BDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7Ci0gICAg
ICAgIGlmIChjaGVja3BvaW50ID09IE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0KQotICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChjb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRl
eCktPmFzPE9wSXRlcmF0b3JPcGVuPigpLm1faXRlcmF0b3IpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKLSAgICAgICAgcmVzdWx0
LmFwcGVuZChPcGVyYW5kOjp0bXAoT3BJdGVyYXRvck5leHQ6Om5leHRSZXN1bHQpKTsKKyAgICAg
ICAgcmVzdWx0LnNldChPcEl0ZXJhdG9yTmV4dDo6bmV4dFJlc3VsdCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKaW5kZXggYmU1
ZWUyZmNkM2E2NGU1NjNhZWExZjNmMjIyNzkxZTQ2OGJiNjEwNC4uYTIwNDE3ZjIyY2IxYjJkMzc3
NmIwOWE2NzcxMzljMjI3ZDI2MGMyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaApAQCAtNTEsMjYgKzUx
LDI2IEBAIGVudW0gY2xhc3MgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50IDogdWludDhfdCB7CiBj
bGFzcyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb24gewogcHVibGljOgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0b3I+Ci0gICAgc3RhdGlj
IHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvblVzZShDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVu
Y3RvciYpOworICAgIHN0YXRpYyB2b2lkIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZShDb2RlQmxv
Y2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNv
ZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0b3I+Ci0gICAgc3RhdGljIHZvaWQgc3RlcE92ZXJJ
bnN0cnVjdGlvblVzZUluRXhjZXB0aW9uSGFuZGxlcihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNl
RnVuY3RvciYpOworICAgIHN0YXRpYyB2b2lkIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZUluRXhj
ZXB0aW9uSGFuZGxlcihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBC
eXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci0gICAg
c3RhdGljIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbkRlZihDb2RlQmxvY2tUeXBlKiwgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3Qg
RGVmRnVuY3RvciYpOworICAgIHN0YXRpYyB2b2lkIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleERlZihD
b2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwg
Qnl0ZWNvZGVJbmRleCwgY29uc3QgRGVmRnVuY3RvciYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVuY3RvciwgdHlwZW5hbWUgRGVmRnVuY3Rv
cj4KLSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBj
b25zdCBVc2VGdW5jdG9yJiwgY29uc3QgRGVmRnVuY3RvciYpOworICAgIHN0YXRpYyB2b2lkIHN0
ZXBPdmVyQnl0ZWNvZGVJbmRleChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYsIGNv
bnN0IERlZkZ1bmN0b3ImKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+
CiAgICAgc3RhdGljIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgRmFz
dEJpdFZlY3RvciYgb3V0KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUs
IHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLSAgICBzdGF0aWMgYm9vbCBjb21wdXRlTG9jYWxMaXZl
bmVzc0ZvckJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYs
IEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUJhc2ljQmxvY2smLCBCeXRlY29kZUluZGV4LCBGYXN0
Qml0VmVjdG9yJiByZXN1bHQpOworICAgIHN0YXRpYyBib29sIGNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9ySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVj
b2RlR3JhcGgmLCBCeXRlY29kZUJhc2ljQmxvY2smLCBCeXRlY29kZUluZGV4LCBGYXN0Qml0VmVj
dG9yJiByZXN1bHQpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlw
ZW5hbWUgSW5zdHJ1Y3Rpb25zPgogICAgIHN0YXRpYyBib29sIGNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVjb2RlR3Jh
cGgmLCBCeXRlY29kZUJhc2ljQmxvY2smKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLSAgICBzdGF0aWMgRmFzdEJpdFZlY3Rv
ciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrVHlwZSosIGNvbnN0IElu
c3RydWN0aW9ucyYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4KTsKKyAgICBzdGF0aWMg
RmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUq
LCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCk7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlv
bnM+CiAgICAgc3RhdGljIHZvaWQgcnVuTGl2ZW5lc3NGaXhwb2ludChDb2RlQmxvY2tUeXBlKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYpOwpAQCAtODMsNyArODMsNyBAQCBw
dWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjsKICAg
ICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKik7CiAgICAgCi0gICAgRmFzdEJp
dFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrKiwgQnl0ZWNv
ZGVJbmRleCk7CisgICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9u
KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpIHsgcmV0
dXJuIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVj
dGlvbihjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3JhcGgsIGJ5dGVj
b2RlSW5kZXgpOyB9CiAgICAgCiAgICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKENvZGVCbG9j
ayosIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpOwogCkBAIC05MiwxMiArOTIsMTAgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGR1bXBSZXN1bHRzKENvZGVCbG9jayopOwogCi0g
ICAgdm9pZCBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrKiwgQnl0ZWNv
ZGVJbmRleCwgRmFzdEJpdFZlY3RvciYpOwotCiAgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwog
fTsKIAotVmVjdG9yPE9wZXJhbmQsIG1heE51bUNoZWNrcG9pbnRUbXBzPiBsaXZlbmVzc0ZvckNo
ZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiwgQnl0ZWNvZGVJbmRleCk7CitCaXRtYXA8bWF4TnVt
Q2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2sm
LCBCeXRlY29kZUluZGV4KTsKIAogaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQg
b3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShj
b25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzSW5saW5lcy5oCmluZGV4IGM2MDk2NWJjYzk3YTdiODk5MGRiOThmZDIzZDk5YjVlMDhmOWNk
ZDUuLmQ4OTE1OTY0ZjkyOThiMzFhYWM5MWU1NDFlZjJlNmJlYzhmNWI2N2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJ
bmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQnl0
ZWNvZGVHcmFwaC5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgorI2lu
Y2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiSW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAKQEAgLTU4LDQ3ICs1OSw0OSBAQCBpbmxpbmUgYm9v
bCBpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4K
LWlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVj
dGlvbkRlZihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4RGVmKENvZGVCbG9ja1R5cGUqIGNvZGVC
bG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFw
aCYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQog
ewogICAgIGF1dG8qIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlSW5kZXgp
LnB0cigpOwogICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleCgKICAgICAgICAgY29kZUJs
b2NrLCBpbnN0cnVjdGlvbiwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
eworICAgICAgICBbJl0gKENoZWNrcG9pbnQgY2hlY2twb2ludCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhvcGVy
YW5kKSkKLSAgICAgICAgICAgICAgICBkZWYob3BlcmFuZC50b0xvY2FsKCkpOworICAgICAgICAg
ICAgICAgIGRlZihjaGVja3BvaW50LCBvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgICAgIH0pOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBVc2VGdW5jdG9y
PgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3Ry
dWN0aW9uVXNlKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCwgY29uc3QgVXNlRnVuY3RvciYgdXNlKQoraW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVz
c1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXhVc2UoQ29kZUJsb2NrVHlwZSogY29k
ZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdy
YXBoJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJiB1c2Up
CiB7CiAgICAgYXV0byogaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoYnl0ZWNvZGVJbmRl
eCkucHRyKCk7CiAgICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KAogICAgICAgICBjb2Rl
QmxvY2ssIGluc3RydWN0aW9uLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KSB7CisgICAgICAgIFsmXSAoQ2hlY2twb2ludCBjaGVja3BvaW50LCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgewogICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKG9w
ZXJhbmQpKQotICAgICAgICAgICAgICAgIHVzZShvcGVyYW5kLnRvTG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgdXNlKGNoZWNrcG9pbnQsIG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICAgICAgfSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0
b3I+Ci1pbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5z
dHJ1Y3Rpb25Vc2VJbkV4Y2VwdGlvbkhhbmRsZXIoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSkKK2lubGluZSB2b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNl
cHRpb25IYW5kbGVyKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
LCBjb25zdCBVc2VGdW5jdG9yJiB1c2UpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGNlcHRp
b24gaGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAotICAgIC8v
IGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBsaXZlLWluIG9m
IHRoaXMgcGFydGljdWxhciBieXRlY29kZS4KKyAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9j
ayB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgQnl0ZWNv
ZGVJbmRleC4KICAgICBpZiAoYXV0byogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkpIHsKICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBoYW5kbGVyQmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFu
ZGxlci0+dGFyZ2V0KTsKICAgICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7Ci0gICAgICAgIGhh
bmRsZXJCbG9jay0+aW4oKS5mb3JFYWNoU2V0Qml0KHVzZSk7CisgICAgICAgIGhhbmRsZXJCbG9j
ay0+aW4oKS5mb3JFYWNoU2V0Qml0KFsmXSAodW5zaWduZWQgaSkgeworICAgICAgICAgICAgdXNl
KGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICwgaSk7CisgICAgICAgIH0pOwogICAgIH0KIH0K
IAogLy8gU2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gYnl0ZWNvZGUgdXNlL2RlZiwgd2hpY2ggZGV0
ZXJtaW5lcyBkZWZzIGZpcnN0IGFuZCB0aGVuIHVzZXMsIGFuZCBpbmNsdWRlcwogLy8gZXhjZXB0
aW9uIGhhbmRsZXJzIGluIHRoZSB1c2VzLgogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZSwgdHlwZW5hbWUgVXNlRnVuY3RvciwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4KLWlubGluZSB2b2lk
IEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxv
Y2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMs
IEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0
IFVzZUZ1bmN0b3ImIHVzZSwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQoraW5saW5lIHZvaWQgQnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXgoQ29kZUJsb2Nr
VHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBC
eXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBV
c2VGdW5jdG9yJiB1c2UsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKIHsKLSAgICAvLyBUaGlzIGFi
c3RyYWN0bHkgZXhlY3V0ZSB0aGUgaW5zdHJ1Y3Rpb24gaW4gcmV2ZXJzZS4gSW5zdHJ1Y3Rpb25z
IGxvZ2ljYWxseSBmaXJzdCB1c2Ugb3BlcmFuZHMgYW5kCisgICAgLy8gVGhpcyBhYnN0cmFjdGx5
IGV4ZWN1dGVzIHRoZSBCeXRlY29kZUluZGV4IGluIHJldmVyc2UuIEluc3RydWN0aW9ucyBsb2dp
Y2FsbHkgZmlyc3QgdXNlIG9wZXJhbmRzIGFuZAogICAgIC8vIHRoZW4gZGVmaW5lIG9wZXJhbmRz
LiBUaGlzIGxvZ2ljYWwgb3JkZXJpbmcgaXMgbmVjZXNzYXJ5IGZvciBvcGVyYXRpb25zIHRoYXQg
dXNlIGFuZCBkZWYgdGhlIHNhbWUKICAgICAvLyBvcGVyYW5kLCBsaWtlOgogICAgIC8vCkBAIC0x
MTMsMzEgKzExNiwzNyBAQCBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246
OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZQogICAgIC8vIHVzZXMgYmVm
b3JlIGRlZnMsIHRoZW4gdGhlIGFkZCBvcGVyYXRpb24gYWJvdmUgd291bGQgYXBwZWFyIHRvIG5v
dCBoYXZlIGxvYzEgbGl2ZSwgc2luY2Ugd2UnZAogICAgIC8vIGZpcnN0IGFkZCBpdCB0byB0aGUg
b3V0IHNldCAodGhlIHVzZSksIGFuZCB0aGVuIHdlJ2QgcmVtb3ZlIGl0ICh0aGUgZGVmKS4KIAot
ICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25EZWYoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBo
LCBieXRlY29kZUluZGV4LCBkZWYpOwotICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJbkV4Y2Vw
dGlvbkhhbmRsZXIoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZUluZGV4
LCB1c2UpOwotICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2UoY29kZUJsb2NrLCBpbnN0cnVjdGlv
bnMsIGdyYXBoLCBieXRlY29kZUluZGV4LCB1c2UpOworICAgIHN0ZXBPdmVyQnl0ZWNvZGVJbmRl
eERlZihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIGRlZik7
CisgICAgc3RlcE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKKyAgICBzdGVwT3Zl
ckJ5dGVjb2RlSW5kZXhVc2UoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29k
ZUluZGV4LCB1c2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgogaW5s
aW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9u
KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgRmFzdEJpdFZlY3RvciYgb3V0KQogewotICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oCi0gICAg
ICAgIGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVJbmRleCwKLSAgICAg
ICAgWyZdICh1bnNpZ25lZCBiaXRJbmRleCkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUg
dXNlIGZ1bmN0b3IsIHNvIHdlIHNldCB0aGUgYml0LgotICAgICAgICAgICAgb3V0W2JpdEluZGV4
XSA9IHRydWU7Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXSAodW5zaWduZWQgYml0SW5kZXgpIHsK
LSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRlZiBmdW5jdG9yLCBzbyB3ZSBjbGVhciB0aGUg
Yml0LgotICAgICAgICAgICAgb3V0W2JpdEluZGV4XSA9IGZhbHNlOwotICAgICAgICB9KTsKKyAg
ICBhdXRvIG51bWJlck9mQ2hlY2twb2ludHMgPSBpbnN0cnVjdGlvbnMuYXQoYnl0ZWNvZGVJbmRl
eCktPm51bWJlck9mQ2hlY2twb2ludHMoKTsKKyAgICBmb3IgKENoZWNrcG9pbnQgdGFyZ2V0ID0g
bnVtYmVyT2ZDaGVja3BvaW50czsgdGFyZ2V0LS07KSB7CisgICAgICAgIHN0ZXBPdmVyQnl0ZWNv
ZGVJbmRleCgKKyAgICAgICAgICAgIGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0
ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIFsmXSAoQ2hlY2twb2ludCBjaGVja3BvaW50LCB1bnNp
Z25lZCBiaXRJbmRleCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHVzZSBmdW5j
dG9yLCBzbyB3ZSBzZXQgdGhlIGJpdC4KKyAgICAgICAgICAgICAgICBpZiAoY2hlY2twb2ludCA9
PSB0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIG91dFtiaXRJbmRleF0gPSB0cnVlOworICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXSAoQ2hlY2twb2ludCBjaGVja3BvaW50LCB1bnNp
Z25lZCBiaXRJbmRleCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRlZiBmdW5j
dG9yLCBzbyB3ZSBjbGVhciB0aGUgYml0LgorICAgICAgICAgICAgICAgIGlmIChjaGVja3BvaW50
ID09IHRhcmdldCkKKyAgICAgICAgICAgICAgICAgICAgb3V0W2JpdEluZGV4XSA9IGZhbHNlOwor
ICAgICAgICAgICAgfSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+Ci1pbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChDb2RlQmxv
Y2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRl
Y29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jaywgQnl0ZWNvZGVJbmRl
eCB0YXJnZXRJbmRleCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQoraW5saW5lIGJvb2wgQnl0ZWNv
ZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0Zvckluc3RydWN0aW9u
KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlv
bnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrLCBCeXRl
Y29kZUluZGV4IHRhcmdldEluZGV4LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCiB7CiAgICAgQVNT
RVJUKCFibG9jay5pc0V4aXRCbG9jaygpKTsKICAgICBBU1NFUlQoIWJsb2NrLmlzRW50cnlCbG9j
aygpKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCF0YXJnZXRJbmRleC5jaGVja3BvaW50KCks
ICJjb21wdXRlTG9jYWxMaXZlbmVzc0Zvckluc3RydWN0aW9uIGNhbid0IGJlIHVzZWQgdG8gYXNr
IHF1ZXN0aW9ucyBhYm91dCBjaGVja3BvaW50cyIpOwogCiAgICAgRmFzdEJpdFZlY3RvciBvdXQg
PSBibG9jay5vdXQoKTsKIApAQCAtMTU4LDE5ICsxNjcsMjAgQEAgaW5saW5lIGJvb2wgQnl0ZWNv
ZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKENvZGVC
bG9ja1QKIHsKICAgICBpZiAoYmxvY2suaXNFeGl0QmxvY2soKSB8fCBibG9jay5pc0VudHJ5Qmxv
Y2soKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb21wdXRlTG9jYWxMaXZl
bmVzc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBibG9j
aywgQnl0ZWNvZGVJbmRleChibG9jay5sZWFkZXJPZmZzZXQoKSksIGJsb2NrLmluKCkpOworICAg
IHJldHVybiBjb21wdXRlTG9jYWxMaXZlbmVzc0Zvckluc3RydWN0aW9uKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2ssIEJ5dGVjb2RlSW5kZXgoYmxvY2subGVhZGVyT2Zmc2V0
KCkpLCBibG9jay5pbigpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwg
dHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPgotaW5saW5lIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZl
bmVzc1Byb3BhZ2F0aW9uOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2Nr
VHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNv
ZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKK2lubGluZSBGYXN0
Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRJ
bnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYg
aW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQogeworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpLCAiZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbiBjYW4ndCBiZSB1c2VkIHRvIGFz
ayBxdWVzdGlvbnMgYWJvdXQgY2hlY2twb2ludHMiKTsKICAgICBCeXRlY29kZUJhc2ljQmxvY2sq
IGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKICAgICBBU1NFUlQoYmxvY2spOwogICAgIEFTU0VSVCghYmxvY2stPmlz
RW50cnlCbG9jaygpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKICAgICBG
YXN0Qml0VmVjdG9yIG91dDsKICAgICBvdXQucmVzaXplKGJsb2NrLT5vdXQoKS5udW1CaXRzKCkp
OwotICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIGlu
c3RydWN0aW9ucywgZ3JhcGgsICpibG9jaywgYnl0ZWNvZGVJbmRleCwgb3V0KTsKKyAgICBjb21w
dXRlTG9jYWxMaXZlbmVzc0Zvckluc3RydWN0aW9uKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBn
cmFwaCwgKmJsb2NrLCBieXRlY29kZUluZGV4LCBvdXQpOwogICAgIHJldHVybiBvdXQ7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3Bw
CmluZGV4IGNlNDcwYzkyMmU4ODNmZTAxN2YwOGQ2YjJmMzY3MjQ1NzNkZTgxOWUuLjI5MDg5YTlk
ODMxMGJmZWQzMDE1MjMzMDI3YThjNjAxNzU1YzU2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcApAQCAtMjksMTAgKzI5LDExIEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBDQUxMX0ZVTkNUT1IoX19hcmcpIFwKLSAgICBm
dW5jdG9yKF9fYnl0ZWNvZGUubV8jI19fYXJnKTsKKyAgICBmdW5jdG9yKG5vQ2hlY2twb2ludHMs
IF9fYnl0ZWNvZGUubV8jI19fYXJnKTsKIAogI2RlZmluZSBVU0VTX09SX0RFRlMoX19vcGNvZGUs
IC4uLikgXAogICAgIGNhc2UgX19vcGNvZGU6Om9wY29kZUlEOiB7IFwKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChfX29wY29kZTo6b3Bjb2RlSUQgPj0gTlVNQkVSX09GX0JZVEVDT0RFX1dJVEhfQ0hF
Q0tQT0lOVFMsICJEb24ndCB1c2UgdGhpcyBtYWNybyBmb3IgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBj
aGVja3BvaW50cy4iKTsgXAogICAgICAgICBhdXRvIF9fYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8X19vcGNvZGU+KCk7IFwKICAgICAgICAgV1RGX0xBWllfRk9SX0VBQ0hfVEVSTShDQUxMX0ZV
TkNUT1IsIF9fVkFfQVJHU19fKSBcCiAgICAgICAgIHJldHVybjsgXApAQCAtNDEsMjYgKzQyLDMx
IEBAIG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBVU0VTIFVTRVNfT1JfREVGUwogI2RlZmluZSBE
RUZTIFVTRVNfT1JfREVGUwogCi12b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwo
VmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3RvcikKK3Zv
aWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVS
ZWdpc3RlciwgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBjb25zdCBGdW5jdGlvbjx2
b2lkKENoZWNrcG9pbnQsIFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5jdG9yKQogewogICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAKLSAgICBhdXRvIGhhbmRs
ZU5ld0FycmF5TGlrZSA9IFsmXShhdXRvIG9wKSB7CisgICAgYXV0byBoYW5kbGVOZXdBcnJheUxp
a2UgPSBbJl0gKGF1dG8gb3ApIHsKICAgICAgICAgaW50IGJhc2UgPSBvcC5tX2FyZ3Yub2Zmc2V0
KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihvcC5tX2Fy
Z2MpOyBpKyspCi0gICAgICAgICAgICBmdW5jdG9yKFZpcnR1YWxSZWdpc3RlciB7IGJhc2UgLSBp
IH0pOworICAgICAgICAgICAgZnVuY3Rvcihub0NoZWNrcG9pbnRzLCBWaXJ0dWFsUmVnaXN0ZXIg
eyBiYXNlIC0gaSB9KTsKICAgICB9OwogCi0gICAgYXV0byBoYW5kbGVPcENhbGxMaWtlID0gWyZd
KGF1dG8gb3ApIHsKLSAgICAgICAgZnVuY3RvcihvcC5tX2NhbGxlZSk7CisgICAgYXV0byBoYW5k
bGVPcENhbGxMaWtlID0gWyZdIChhdXRvIG9wKSB7CisgICAgICAgIGZ1bmN0b3Iobm9DaGVja3Bv
aW50cywgb3AubV9jYWxsZWUpOwogICAgICAgICBpbnQgbGFzdEFyZyA9IC1zdGF0aWNfY2FzdDxp
bnQ+KG9wLm1fYXJndikgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOwogICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4ob3AubV9hcmdjKTsgaSsrKQot
ICAgICAgICAgICAgZnVuY3RvcihWaXJ0dWFsUmVnaXN0ZXIgeyBsYXN0QXJnICsgaSB9KTsKKyAg
ICAgICAgICAgIGZ1bmN0b3Iobm9DaGVja3BvaW50cywgVmlydHVhbFJlZ2lzdGVyIHsgbGFzdEFy
ZyArIGkgfSk7CiAgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpCi0gICAgICAg
ICAgICBmdW5jdG9yKHNjb3BlUmVnaXN0ZXIpOworICAgICAgICAgICAgZnVuY3Rvcihub0NoZWNr
cG9pbnRzLCBzY29wZVJlZ2lzdGVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH07CiAKKyAgICBh
dXRvIHVzZUF0RWFjaENoZWNrcG9pbnQgPSBbJl0gKGF1dG8gb3AsIGF1dG8uLi4gdmlydHVhbFJl
Z2lzdGVycykgeworICAgICAgICBmb3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IDA7IGNoZWNr
cG9pbnQgPCBkZWNsdHlwZShvcCk6Om51bWJlck9mQ2hlY2twb2ludHM7ICsrY2hlY2twb2ludCkK
KyAgICAgICAgICAgIChmdW5jdG9yKGNoZWNrcG9pbnQsIHZpcnR1YWxSZWdpc3RlcnMpLCAuLi4p
OworICAgIH07CisKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgY2FzZSBvcF93aWRlMTY6
CiAgICAgY2FzZSBvcF93aWRlMzI6CkBAIC0yNTAsOSArMjU2LDIyIEBAIHZvaWQgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29u
c3QgSW5zdHJ1CiAgICAgVVNFUyhPcEhhc1N0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0
eSwgZW51bWVyYXRvcikKICAgICBVU0VTKE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHksIGJhc2Us
IHByb3BlcnR5LCBlbnVtZXJhdG9yKQogICAgIFVTRVMoT3BJblN0cnVjdHVyZVByb3BlcnR5LCBi
YXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKLSAgICBVU0VTKE9wQ29uc3RydWN0VmFyYXJncywg
Y2FsbGVlLCB0aGlzVmFsdWUsIGFyZ3VtZW50cykKLSAgICBVU0VTKE9wQ2FsbFZhcmFyZ3MsIGNh
bGxlZSwgdGhpc1ZhbHVlLCBhcmd1bWVudHMpCi0gICAgVVNFUyhPcFRhaWxDYWxsVmFyYXJncywg
Y2FsbGVlLCB0aGlzVmFsdWUsIGFyZ3VtZW50cykKKworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJn
cz4oKTsKKyAgICAgICAgdXNlQXRFYWNoQ2hlY2twb2ludChieXRlY29kZSwgYnl0ZWNvZGUubV9j
YWxsZWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBieXRlY29kZS5tX2FyZ3VtZW50cyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVGFpbENhbGxWYXJhcmdzPigp
OworICAgICAgICB1c2VBdEVhY2hDaGVja3BvaW50KGJ5dGVjb2RlLCBieXRlY29kZS5tX2NhbGxl
ZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUsIGJ5dGVjb2RlLm1fYXJndW1lbnRzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpOwor
ICAgICAgICB1c2VBdEVhY2hDaGVja3BvaW50KGJ5dGVjb2RlLCBieXRlY29kZS5tX2NhbGxlZSwg
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIGJ5dGVjb2RlLm1fYXJndW1lbnRzKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAogICAgIFVTRVMoT3BHZXREaXJlY3RQbmFtZSwgYmFzZSwgcHJvcGVydHks
IGluZGV4LCBlbnVtZXJhdG9yKQogCkBAIC0yNjUsOCArMjg0LDIxIEBAIHZvaWQgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29u
c3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGdlbmVyYXRvciwgYXJndW1lbnQpCiAKLSAg
ICBVU0VTKE9wSXRlcmF0b3JPcGVuLCBzeW1ib2xJdGVyYXRvciwgaXRlcmFibGUpCi0gICAgVVNF
UyhPcEl0ZXJhdG9yTmV4dCwgaXRlcmF0b3IsIG5leHQsIGl0ZXJhYmxlKQorICAgIGNhc2Ugb3Bf
aXRlcmF0b3Jfb3BlbjogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JPcGVuPigpOworICAgICAgICBmdW5jdG9yKE9wSXRlcmF0b3JPcGVuOjpzeW1i
b2xDYWxsLCBieXRlY29kZS5tX3N5bWJvbEl0ZXJhdG9yKTsKKyAgICAgICAgZnVuY3RvcihPcEl0
ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbCwgYnl0ZWNvZGUubV9pdGVyYWJsZSk7CisgICAgICAgIGZ1
bmN0b3IoT3BJdGVyYXRvck9wZW46OmdldE5leHQsIGJ5dGVjb2RlLm1faXRlcmF0b3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Cisg
ICAgICAgIHVzZUF0RWFjaENoZWNrcG9pbnQoYnl0ZWNvZGUsIGJ5dGVjb2RlLm1faXRlcmF0b3Ip
OworICAgICAgICBmdW5jdG9yKE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dCwgYnl0ZWNvZGUu
bV9uZXh0KTsKKyAgICAgICAgZnVuY3RvcihPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQsIGJ5
dGVjb2RlLm1faXRlcmFibGUpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgY2FzZSBv
cF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CiAgICAgICAgIGhhbmRsZU5ld0FycmF5TGlrZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCkpOwpAQCAtMjc5LDcgKzMxMSw3IEBA
IHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BTdHJjYXQ+KCk7CiAgICAgICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9zcmMu
b2Zmc2V0KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9jb3VudDsg
aSsrKQotICAgICAgICAgICAgZnVuY3RvcihWaXJ0dWFsUmVnaXN0ZXIgeyBiYXNlIC0gaSB9KTsK
KyAgICAgICAgICAgIGZ1bmN0b3Iobm9DaGVja3BvaW50cywgVmlydHVhbFJlZ2lzdGVyIHsgYmFz
ZSAtIGkgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMwMiw3ICszMzQsNyBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBjb21wdXRlRGVmc0ZvckJ5
dGVjb2RlSW5kZXhJbXBsKHVuc2lnbmVkIG51bVZhcnMsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3RvcikK
K3ZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0aW9uPHZvaWQoQ2hlY2tw
b2ludCwgVmlydHVhbFJlZ2lzdGVyKT4mIGZ1bmN0b3IpCiB7CiAgICAgc3dpdGNoIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3Bfd2lkZTE2OgpAQCAtNDEyLDEwICs0NDQs
MjMgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKHVuc2lnbmVkIG51bVZh
cnMsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnUKICAgICBERUZTKE9wTmV3QXN5bmNHZW5lcmF0
b3JGdW5jRXhwLCBkc3QpCiAgICAgREVGUyhPcE5ld0FzeW5jRnVuYywgZHN0KQogICAgIERFRlMo
T3BOZXdBc3luY0Z1bmNFeHAsIGRzdCkKLSAgICBERUZTKE9wQ2FsbFZhcmFyZ3MsIGRzdCkKLSAg
ICBERUZTKE9wVGFpbENhbGxWYXJhcmdzLCBkc3QpCisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdz
PigpOworICAgICAgICBmdW5jdG9yKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBieXRlY29kZS5t
X2RzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFy
YXJnczogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVGFpbENh
bGxWYXJhcmdzPigpOworICAgICAgICBmdW5jdG9yKE9wVGFpbENhbGxWYXJhcmdzOjptYWtlQ2Fs
bCwgYnl0ZWNvZGUubV9kc3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3Bf
Y29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCk7CisgICAgICAgIGZ1bmN0b3IoT3BDb25zdHJ1Y3RW
YXJhcmdzOjptYWtlQ2FsbCwgYnl0ZWNvZGUubV9kc3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgREVGUyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgZHN0KQotICAgIERFRlMo
T3BDb25zdHJ1Y3RWYXJhcmdzLCBkc3QpCiAgICAgREVGUyhPcEdldEZyb21TY29wZSwgZHN0KQog
ICAgIERFRlMoT3BDYWxsLCBkc3QpCiAgICAgREVGUyhPcFRhaWxDYWxsLCBkc3QpCkBAIC01MDEs
MTIgKzU0NiwyOCBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWdu
ZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogCiAgICAgREVGUyhPcENhdGNo
LCBleGNlcHRpb24sIHRocm93blZhbHVlKQogCi0gICAgREVGUyhPcEl0ZXJhdG9yT3BlbiwgaXRl
cmF0b3IsIG5leHQpCi0gICAgREVGUyhPcEl0ZXJhdG9yTmV4dCwgZG9uZSwgdmFsdWUpCisgICAg
Y2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisKKyAgICAgICAgZnVuY3RvcihPcEl0ZXJhdG9y
T3Blbjo6c3ltYm9sQ2FsbCwgYnl0ZWNvZGUubV9pdGVyYXRvcik7CisgICAgICAgIGZ1bmN0b3Io
T3BJdGVyYXRvck9wZW46OmdldE5leHQsIGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKworICAgICAgICBm
dW5jdG9yKE9wSXRlcmF0b3JOZXh0OjpnZXREb25lLCBieXRlY29kZS5tX2RvbmUpOworICAgICAg
ICAvLyBXZSBuZWVkIHRvIGNsYWltIHdlIHNldCBtX3ZhbHVlIGhlcmUgYmVjYXVzZSB3ZSBjb3Vs
ZCBlYXJseSBleGl0IGZyb20gdGhlIGJ5dGVjb2RlIGlmIHdlIGFyZSBkb25lLgorICAgICAgICBm
dW5jdG9yKE9wSXRlcmF0b3JOZXh0OjpnZXREb25lLCBieXRlY29kZS5tX3ZhbHVlKTsKKworICAg
ICAgICBmdW5jdG9yKE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZSwgYnl0ZWNvZGUubV92YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBjYXNlIG9wX2VudGVyOiB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bVZhcnM7IGktLTspCi0gICAgICAgICAgICBmdW5jdG9yKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iobm9DaGVja3Bv
aW50cywgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZVVzZURlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNl
RGVmLmgKaW5kZXggYjNiMDBhOTkyMzczM2QzMWFjODRlNWQ4ODJkYTkwM2U5YmVkYzdmYi4uOWI0
NDE3MWQ1OTZjM2NmNDNlMjc2OGE0MjNmMmY0ZDgyNzNhYjVlMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKQEAgLTMyLDIxICszMiwyMyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJ
bXBsKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBGdW5jdGlvbjx2
b2lkKFZpcnR1YWxSZWdpc3Rlcik+Jik7Ci12b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRl
eEltcGwodW5zaWduZWQsIGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgRnVuY3Rpb248dm9pZChW
aXJ0dWFsUmVnaXN0ZXIpPiYpOwordm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBs
KFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBGdW5jdGlvbjx2b2lk
KENoZWNrcG9pbnQsIFZpcnR1YWxSZWdpc3Rlcik+Jik7Cit2b2lkIGNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVJbmRleEltcGwodW5zaWduZWQsIGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgRnVuY3Rp
b248dm9pZChDaGVja3BvaW50LCBWaXJ0dWFsUmVnaXN0ZXIpPiYpOwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCbG9jaz4KLXZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KEJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgY29uc3QgRnVuY3Rpb248dm9p
ZChWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3RvcikKK3ZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29k
ZUluZGV4KEJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
Y29uc3QgRnVuY3Rpb248dm9pZChDaGVja3BvaW50LCBWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3Rv
cikKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwot
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9lbnRlciAmJiAoY29kZUJsb2NrLT53YXNDb21waWxlZFdp
dGhEZWJ1Z2dpbmdPcGNvZGVzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpKSAmJiBjb2RlQmxv
Y2stPnNjb3BlUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpCi0gICAgICAgIGZ1bmN0b3IoY29kZUJsb2Nr
LT5zY29wZVJlZ2lzdGVyKCkpOworICAgIGlmIChvcGNvZGVJRCAhPSBvcF9lbnRlciAmJiAoY29k
ZUJsb2NrLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgfHwgY29kZUJsb2NrLT51
c2VzRXZhbCgpKSAmJiBjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpIHsKKyAg
ICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBpbnN0cnVjdGlvbi0+bnVtYmVyT2ZD
aGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KQorICAgICAgICAgICAgZnVuY3RvcihjaGVja3Bv
aW50LCBjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSk7CisgICAgfQogCiAgICAgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4SW1wbChjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSwgaW5zdHJ1
Y3Rpb24sIGZ1bmN0b3IpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaz4KLXZvaWQgY29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KEJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYg
ZnVuY3RvcikKK3ZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KEJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZChD
aGVja3BvaW50LCBWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3RvcikKIHsKICAgICBjb21wdXRlRGVm
c0ZvckJ5dGVjb2RlSW5kZXhJbXBsKGNvZGVCbG9jay0+bnVtVmFycygpLCBpbnN0cnVjdGlvbiwg
ZnVuY3Rvcik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCmluZGV4IDkxODA1YzQyNzgyZTRkYTc4N2U2Mzk2ZTYwMzhkYWM5ZDgzMjY4NDguLjQxNmIz
NDFkMDNhNWFhNzE5YzcwMDJkZDJiYjQ1MDY2ZjBjZGUyZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVk
ZSAiQmFzaWNCbG9ja0xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVEdW1wZXIuaCIKLSNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMu
aCIKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0
cnVjdHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCkBAIC0xOTIzLDcgKzE5MjMs
NyBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRl
Y29kZUluZGV4U2xvdyhjb25zdCBPcENhdGNoJgogICAgIC8vIGludG8gdGhlIERGRy4KIAogICAg
IGF1dG8gbmV4dE9mZnNldCA9IGluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLm5leHQo
KS5vZmZzZXQoKTsKLSAgICBGYXN0Qml0VmVjdG9yIGxpdmVMb2NhbHMgPSBieXRlY29kZUxpdmVu
ZXNzLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleCh0aGlzLCBCeXRlY29kZUluZGV4KG5l
eHRPZmZzZXQpKTsKKyAgICBGYXN0Qml0VmVjdG9yIGxpdmVMb2NhbHMgPSBieXRlY29kZUxpdmVu
ZXNzLmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24odGhpcywgQnl0ZWNvZGVJbmRleChuZXh0
T2Zmc2V0KSk7CiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gbGl2ZU9wZXJhbmRzOwogICAg
IGxpdmVPcGVyYW5kcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxpdmVMb2NhbHMuYml0Q291bnQo
KSk7CiAgICAgbGl2ZUxvY2Fscy5mb3JFYWNoU2V0Qml0KFsmXSAodW5zaWduZWQgbGl2ZUxvY2Fs
KSB7CkBAIC0zMTA5LDcgKzMxMDksNyBAQCB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogewog
ICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBk
aXJlY3RseSBmcm9tIHNjcmF0Y2ggc28gaXQgZG9lc24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3Rw
cmludC4KICAgICAKLSAgICBGYXN0Qml0VmVjdG9yIGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRM
aXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgodGhpcywgQnl0ZWNvZGVJbmRleCgwKSk7CisgICAg
RmFzdEJpdFZlY3RvciBsaXZlQXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0
cnVjdGlvbih0aGlzLCBCeXRlY29kZUluZGV4KDApKTsKICAgICAKICAgICBpZiAobGl2ZUF0SGVh
ZC5udW1CaXRzKCkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX251bUNhbGxlZUxvY2FscykpIHsK
ICAgICAgICAgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAppbmRleCA3OTE0NTNm
M2ZkNzIzNDM2ZWUwZWQ1MTkwZjBiYzI3ZDdkYTIzMDViLi43OTg2MmI4YTY3MDE4NzFjOWIzZGIz
NjMwZjg2NmVkZDNhOWQwNmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaApAQCAtMzUsMTggKzM1LDE5IEBAIGNsYXNz
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKIGNsYXNzIENvZGVCbG9jazsKIAogLy8gTm90ZTog
RnVsbCBieXRlY29kZSBsaXZlbmVzcyBkb2VzIG5vdCB0cmFjayBhbnkgaW5mb3JtYXRpb24gYWJv
dXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBzLgotLy8gSWYgeW91IHdhbnQgdG1wIGxpdmVuZXNzIGZv
ciBhIGNoZWNrcG9pbnQgYXNrIGxpdmVuZXNzRm9yQ2hlY2twb2ludC4KKy8vIElmIHlvdSB3YW50
IHRtcCBsaXZlbmVzcyBmb3IgYSBjaGVja3BvaW50IGFzayB0bXBMaXZlbmVzc0ZvckNoZWNrcG9p
bnQuCiBjbGFzcyBGdWxsQnl0ZWNvZGVMaXZlbmVzcyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgZ2V0TGl2ZW5lc3MoQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQp
IGNvbnN0CiAgICAgewotICAgICAgICAvLyBGSVhNRTogV2hhdCBzaG91bGQgdGhpcyBkbyB3aGVu
IHdlIGhhdmUgY2hlY2twb2ludHM/CisgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkg
YWJvdXQgb3ZlcmZsb3dpbmcgaW50byB0aGUgbmV4dCBieXRlY29kZW9mZnNldCBpbiBvdXIgdmVj
dG9ycyBiZWNhdXNlIHdlCisgICAgICAgIC8vIHN0YXRpYyBhc3NlcnQgdGhhdCBieXRlY29kZSBs
ZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgY2hlY2twb2ludHMgaW4gQnl0ZWNv
ZGVTdHJ1Y3RzLmgKICAgICAgICAgc3dpdGNoIChwb2ludCkgewogICAgICAgICBjYXNlIExpdmVu
ZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlOgotICAgICAgICAgICAgcmV0dXJuIG1fYmVm
b3JlVXNlVmVjdG9yW2J5dGVjb2RlSW5kZXgub2Zmc2V0KCldOworICAgICAgICAgICAgcmV0dXJu
IG1fdXNlc0JlZm9yZVt0b0luZGV4KGJ5dGVjb2RlSW5kZXgpXTsKICAgICAgICAgY2FzZSBMaXZl
bmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkFmdGVyVXNlOgotICAgICAgICAgICAgcmV0dXJuIG1fYWZ0
ZXJVc2VWZWN0b3JbYnl0ZWNvZGVJbmRleC5vZmZzZXQoKV07CisgICAgICAgICAgICByZXR1cm4g
bV91c2VzQWZ0ZXJbdG9JbmRleChieXRlY29kZUluZGV4KV07CiAgICAgICAgIH0KICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC01OSwxMCArNjAsMTIgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOwogICAgIAorICAgIHN0YXRpYyBzaXplX3QgdG9JbmRleChCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpIHsgcmV0dXJuIGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKTsgfQorCiAgICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3Mgdmll
dyBtZWNoYW5pc20gdG8gbWFrZSB0aGVtIGNvbXBhY3QuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDQyNzxQYXN0ZT4KLSAgICBWZWN0b3I8RmFzdEJp
dFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYmVmb3JlVXNlVmVjdG9yOwotICAg
IFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRlclVz
ZVZlY3RvcjsKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA0NDI3CisgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX3VzZXNCZWZvcmU7CisgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX3VzZXNBZnRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAppbmRleCAzZDcwY2Q1NDNl
Y2ZhZTkwMjI1MDI5NjAxYTBkNDA1ZWM2NzFiMmQwLi5mNjNhZDI5ZjIwZjUxZTZjNjA5ZmNjYjlk
YmNiNTU4OTZlMzIyZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdHJ1Y3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb24uaApAQCAtMzksNiArMzksNyBAQCBzdHJ1Y3QgSlNPcGNvZGVUcmFpdHMgewogICAg
IHN0YXRpYyBjb25zdGV4cHIgT3Bjb2RlSUQgd2lkZTMyID0gb3Bfd2lkZTMyOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQqIG9wY29kZUxlbmd0aHMgPSA6OkpTQzo6b3Bjb2Rl
TGVuZ3RoczsKICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIGNvbnN0KiBvcGNvZGVO
YW1lcyA9IDo6SlNDOjpvcGNvZGVOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2hl
Y2twb2ludENvdW50VGFibGUgPSBieXRlY29kZUNoZWNrcG9pbnRDb3VudFRhYmxlOwogfTsKIAog
c3RydWN0IFdhc21PcGNvZGVUcmFpdHMgewpAQCAtNTAsNiArNTEsNyBAQCBzdHJ1Y3QgV2FzbU9w
Y29kZVRyYWl0cyB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBPcGNvZGVJRCB3aWRlMzIgPSB3YXNt
X3dpZGUzMjsKICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkKiBvcGNvZGVMZW5n
dGhzID0gd2FzbU9wY29kZUxlbmd0aHM7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFy
KiBjb25zdCogb3Bjb2RlTmFtZXMgPSB3YXNtT3Bjb2RlTmFtZXM7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBhdXRvIGNoZWNrcG9pbnRDb3VudFRhYmxlID0gd2FzbUNoZWNrcG9pbnRDb3VudFRhYmxl
OwogfTsKIAogCkBAIC0xMjIsNiArMTI0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9w
Y29kZUlEPFRyYWl0cz4oKSA8IFRyYWl0czo6bnVtYmVyT2ZCeXRlY29kZXNXaXRoQ2hlY2twb2lu
dHM7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzID0gSlNPcGNvZGVUcmFp
dHM+CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGVja3BvaW50cygpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIWhhc0NoZWNrcG9pbnRzPFRyYWl0cz4oKSkKKyAgICAgICAgICAgIHJldHVybiAx
OworICAgICAgICByZXR1cm4gVHJhaXRzOjpjaGVja3BvaW50Q291bnRUYWJsZVtvcGNvZGVJRDxU
cmFpdHM+KCldOworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9IEpTT3Bj
b2RlVHJhaXRzPgogICAgIGludCBzaXplU2hpZnRBbW91bnQoKSBjb25zdAogICAgIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKaW5kZXggZTY0NmQwNGFiOTM5ZmZiNzY3MjRjYzBhOGQ0NTFmMjhkYTNmMGVkMi4u
ZGE4NGJmN2Q2NWE5MDk2ZjMxYjc3OGZiOThhYWNmYWVkYWE3ZDFkOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKQEAgLTUyMTUsNyArNTIxNSw3IEBAIHZvaWQgRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyCiAgICAgZm9y
ICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyBpc1ZhbGlkKCkg
JiYgb2Zmc2V0IDwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0OykgewogICAgICAgICBhdXRvIGluc3Ry
dWN0aW9uID0gZ2VuZXJhdG9yLmluc3RydWN0aW9ucygpLmF0KG9mZnNldCk7CiAgICAgICAgIEFT
U0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wRW50ZXI+KCkpOwotICAgICAgICBjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbi5wdHIoKSwgWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbi5wdHIoKSwgWyZdIChDaGVja3BvaW50LCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgaWYgKGxvY2FsKCktPnZpcnR1YWxSZWdpc3Rl
cigpID09IG9wZXJhbmQpCiAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAgICB9
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAppbmRleCA4MGNk
NzNkZTY2MzUxNjNmNTJjYjY4YWQ5OWIyZjViNTg4YmUxYzQ0Li44ZDc4NTk1MjQwZWNhOTZmODJj
ZDk1Yjg0ZGUzYjhmM2RhM2IzM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZvckFsbEtpbGxzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
b3JBbGxLaWxscy5oCkBAIC03OSwxOCArNzksMjEgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5k
cyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QK
ICAgICAgICAgICAgIEFTU0VSVChiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSAh
PSBhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKTsKICAgICAgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSA9PSBhZnRlci5i
eXRlY29kZUluZGV4KCkub2Zmc2V0KCkgfHwgbm9kZUFmdGVyLT5vcCgpID09IEV4aXRPSyB8fCBu
b2RlQWZ0ZXItPm9wKCkgPT0gSW52YWxpZGF0aW9uUG9pbnQsICJXaGVuIHRoZSBERkcgZG9lcyBj
b2RlIG1vdGlvbiBpdCBzaG91bGQgY2hhbmdlIHRoZSBmb3JFeGl0IG9yaWdpbiB0byBtYXRjaCB0
aGUgc3Vycm91bmRpbmcgYnl0ZWNvZGVzLiIpOwogCi0gICAgICAgICAgICBhdXRvIGNoZWNrcG9p
bnRMaXZlQmVmb3JlID0gbGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGJlZm9yZS5i
eXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgYXV0byBjaGVja3BvaW50TGl2ZUFmdGVyID0g
bGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSk7
CisgICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQo
KmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBhdXRvIGxp
dmVBZnRlciA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBhZnRlci5ieXRl
Y29kZUluZGV4KCkpOworICAgICAgICAgICAgbGl2ZUFmdGVyLmludmVydCgpOworICAgICAgICAg
ICAgbGl2ZUJlZm9yZS5maWx0ZXIobGl2ZUFmdGVyKTsKIAotICAgICAgICAgICAgRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7
Ci0gICAgICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQWZ0ZXIgPSBmdWxsTGl2ZW5l
c3MuZ2V0TGl2ZW5lc3MoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9u
UG9pbnQ6OkJlZm9yZVVzZSk7CisgICAgICAgICAgICBsaXZlQmVmb3JlLmZvckVhY2hTZXRCaXQo
WyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQo
YmVmb3JlSW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kOjp0bXAodG1wKSkpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50
KCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBtb3Zpbmcgb24gdG8gYW5vdGhlciBieXRlY29k
ZSwgYWxsIHRlbXBzIHNob3VsZCBiZSBkZWFkIG5vdy4KKyAgICAgICAgICAgIGF1dG8gbGl2ZUJl
Zm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBiZWZvcmUuYnl0ZWNv
ZGVJbmRleCgpKTsKIAotICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiBjaGVja3Bv
aW50TGl2ZUJlZm9yZSkgewotICAgICAgICAgICAgICAgIGlmIChjaGVja3BvaW50TGl2ZUFmdGVy
LmNvbnRhaW5zKG9wZXJhbmQpIHx8ICghb3BlcmFuZC5pc1RtcCgpICYmIGxpdmVBZnRlcltvcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpXSkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGJlZm9yZUlubGlu
ZUNhbGxGcmFtZSwgb3BlcmFuZCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRtcCkg
eworICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGJlZm9yZUlubGluZUNhbGxG
cmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkpKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAK
ICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVu
ZXNzRm9yKGNvZGVCbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmlu
ZGV4IDUwMzQxMjAxZWJkMjBmMzZiZDM2ODAzNjllMjkzOGZmNzQzMjMyMTAuLjhlODQ2Y2JlOWQ0
ZDFjN2UxNjliY2Q4NmY3YTc1MDQ0YTkxZDhmNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCkBAIC0xMTUyLDggKzExNTIsOCBAQCBib29sIEdyYXBoOjppc0xpdmVJbkJ5
dGVjb2RlKE9wZXJhbmQgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAg
ICAgaWYgKCFjb2RlQmxvY2stPm51bVRtcHMoKSB8fCBvcGVyYW5kSW5kZXggPCB0bXBPZmZzZXQp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGF1dG8gbGl2ZSA9IGxp
dmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUlu
ZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIGxpdmUuY29udGFpbnMob3BlcmFuZCk7CisgICAg
ICAgICAgICBhdXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2Nr
LCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIGJp
dE1hcC5nZXQob3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsKICAgICAgICAgfQogCiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gY29kZU9y
aWdpblB0ci0+c3RhY2tPZmZzZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApp
bmRleCA1MmIzNzE3NDNhZDg2YTI4YmFkNjJkMWVlYTljMGRlMTQ3ODgwMDUzLi44NjM2MjI3ZjM5
NDgzMzVkYjNkODQwZTgxZDNmYTBjNWNiYmE3ZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCkBAIC05MDQsOSArOTA0LDEwIEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgaWYg
KGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKICAgICAgICAg
ICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1UbXBzKCkpOwotICAgICAgICAgICAgICAgIGF1
dG8gbGl2ZSA9IGxpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRy
LT5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5k
IDogbGl2ZSkKLSAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoaW5saW5l
Q2FsbEZyYW1lLCBvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgYXV0byBsaXZlVG1wcyA9IHRt
cExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29k
ZUluZGV4KCkpOworICAgICAgICAgICAgICAgIGxpdmVUbXBzLmZvckVhY2hTZXRCaXQoWyZdIChz
aXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGlu
bGluZUNhbGxGcmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkpKTsKKyAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRS
ZW1vdmFsUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVt
b3ZhbFBoYXNlLmNwcAppbmRleCBkNDMwN2VkODczMDZmNDQ2NjIwYjc4MWIwZjAyZDVjYTQ1M2M5
YmFiLi5jYzhmOWUxNzVkZmE5Y2E4YzA4ZTVjNzIwMzhjNjQ0ZjFkZWI3YzJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAK
QEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgICAgICAKICAg
ICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBMb2NhbHM6ICIsIG1fc3RhdGUsICJcbiIpOworICAgICAgICAg
ICAgZGF0YUxvZygiICAgIExvY2FscyBhdCAiLCBibG9jay0+dGVybWluYWwoKS0+b3JpZ2luLmZv
ckV4aXQsICI6ICIsIG1fc3RhdGUsICJcbiIpOwogICAgICAgICAKICAgICAgICAgLy8gQXNzdW1l
IHRoYXQgYmxvY2tzIGFmdGVyIHVzIGV4aXQuCiAgICAgICAgIGN1cnJlbnRFcG9jaC5idW1wKCk7
CkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBNb3ZIaW50KSB7CiAgICAgICAgICAgICAgICAgRXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUu
b3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKERG
R01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgIEF0ICIsIG5vZGUsICI6IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gs
ICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBBdCAiLCBub2RlLCAiICgiLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgIik6
IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2FsRXBvY2ggPT0gY3Vy
cmVudEVwb2NoKSB7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKFpvbWJpZUhpbnQpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVk
Z2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCmluZGV4IDcxNjFmYmYyNjhm
MzUwMTkyOTc4YTJmODUyZDUxY2M4YjEwOWU3MzUuLjVhZGU5Yzk1YTA0ZWM2NTRiZTI5MmVhZDEx
NTU0Yjg0OWZhZTY5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcApAQCAt
NzU4LDcgKzc1OCw3IEBAIHZvaWQgUGxhbjo6Y2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3Nh
cnkoKQogICAgICAgICByZXR1cm47CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0gbV9j
b2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0gICAgRmFzdEJpdFZlY3RvciBsaXZlbmVzcyA9IGFs
dGVybmF0aXZlLT5saXZlbmVzc0FuYWx5c2lzKCkuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUlu
ZGV4KGFsdGVybmF0aXZlLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgRmFzdEJpdFZl
Y3RvciBsaXZlbmVzcyA9IGFsdGVybmF0aXZlLT5saXZlbmVzc0FuYWx5c2lzKCkuZ2V0TGl2ZW5l
c3NJbmZvQXRJbnN0cnVjdGlvbihhbHRlcm5hdGl2ZSwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgp
OwogCiAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IG1fbXVzdEhhbmRsZVZhbHVlcy5udW1iZXJP
ZkxvY2FscygpOyBsb2NhbC0tOykgewogICAgICAgICBpZiAoIWxpdmVuZXNzW2xvY2FsXSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKaW5kZXggODIzNzRiN2ZiZTg2
ZDU3ODhiM2E0MDU4MTU4YTg5OGQ2YTZhMjA4Yy4uMDVkMDk4ODA2OTA2ZWE4MjIzMDJkYzIxMDE2
MmFjOGUwOWU2ODZkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9PcGNvZGUucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUu
cmIKQEAgLTEzMCwxNSArMTMwLDE4IEBAIGNsYXNzIE9wY29kZQogICAgICAgICA8PC1FT0YKIHN0
cnVjdCAje2NhcGl0YWxpemVkX25hbWV9IDogcHVibGljIEluc3RydWN0aW9uIHsKICAgICAje29w
Y29kZUlEfQorICAgICN7bGVuZ3RoVmFsdWV9CiAgICAgI3t0ZW1wc30KICAgICAje2NoZWNrcG9p
bnRWYWx1ZXN9CiAKKwogI3tlbWl0dGVyfQogI3tkdW1wZXJ9CiAje2NvbnN0cnVjdG9yc30KICN7
c2V0dGVyc30je21ldGFkYXRhX3N0cnVjdF9hbmRfYWNjZXNzb3J9CiAje21lbWJlcnN9CiB9Owor
I3tjaGVja3BvaW50U2l6ZUFzc2VydH0KIEVPRgogICAgIGVuZAogCkBAIC0xNDYsMTIgKzE0OSwy
MiBAQCBFT0YKICAgICAgICAgInN0YXRpYyBjb25zdGV4cHIgI3tvcGNvZGVJRFR5cGV9IG9wY29k
ZUlEID0gI3tuYW1lfTsiCiAgICAgZW5kCiAKKyAgICBkZWYgbGVuZ3RoVmFsdWUKKyAgICAgICAg
InN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGxlbmd0aCA9ICN7bGVuZ3RofTsiCisgICAgZW5kCisK
ICAgICBkZWYgY2hlY2twb2ludFZhbHVlcwogICAgICAgICByZXR1cm4gaWYgQGNoZWNrcG9pbnRz
Lm5pbD8KIAogICAgICAgICBbImVudW0gQ2hlY2twb2ludHMgOiB1aW50OF90IHsiXS5jb25jYXQo
Y2hlY2twb2ludHMubWFweyB8Y2hlY2twb2ludHwgIiAgICAgICAgI3tjaGVja3BvaW50fSwiIH0p
LmNvbmNhdChbIiAgICAgICAgbnVtYmVyT2ZDaGVja3BvaW50cywiLCAiICAgIH07Il0pLmpvaW4o
IlxuIikKICAgICBlbmQKIAorICAgIGRlZiBjaGVja3BvaW50U2l6ZUFzc2VydAorICAgICAgICBy
ZXR1cm4gaWYgQGNoZWNrcG9pbnRzLm5pbD8KKworICAgICAgICAic3RhdGljX2Fzc2VydCgje2Nh
cGl0YWxpemVkX25hbWV9OjpsZW5ndGggPiAje2NhcGl0YWxpemVkX25hbWV9OjpudW1iZXJPZkNo
ZWNrcG9pbnRzLCBcIkZ1bGxCeXRlY29kZUxpdmVzcyByZWxpZXMgb24gdGhlIGxlbmd0aCBvZiAj
e2NhcGl0YWxpemVkX25hbWV9IGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGNoZWNr
cG9pbnRzXCIpOyIKKyAgICBlbmQKKwogICAgIGRlZiB0ZW1wcwogICAgICAgICByZXR1cm4gaWYg
QHRtcHMubmlsPwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L1NlY3Rpb24ucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIK
aW5kZXggZjgzODBlZDU3NWQzMTNjNmVhMDZhYjVkNzJjMjVhODY3NzZkOWNjOC4uZDllOTk0ZWVh
ZDYzNDhjYzM4ODkxMTJhMTJjZjVhMWNjMzA0MTAzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgpAQCAtODQsMTMgKzg0LDE1IEBAIGNsYXNzIFNlY3Rpb24K
IAogICAgICAgaWYgY29uZmlnWzplbWl0X2luX3N0cnVjdHNfZmlsZV0KICAgICAgICAgICBpID0g
MAorICAgICAgICAgIG91dC53cml0ZSgic3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCAje2NvbmZp
Z1s6bWFjcm9fbmFtZV9jb21wb25lbnRdLmRvd25jYXNlfUNoZWNrcG9pbnRDb3VudFRhYmxlW10g
PSB7XG4iKQogICAgICAgICAgIHdoaWxlIHRydWUKICAgICAgICAgICAgICAgaWYgIW9wY29kZXNb
aV0uY2hlY2twb2ludHMKLSAgICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAg
ICAgICAgICBvdXQgPDwgIn07XG5cbiIKICAgICAgICAgICAgICAgICAgIG91dCA8PCAiI2RlZmlu
ZSBOVU1CRVJfT0ZfI3tjb25maWdbOm1hY3JvX25hbWVfY29tcG9uZW50XX1fV0lUSF9DSEVDS1BP
SU5UUyAje2l9XG4iCiAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICBlbmQK
IAorICAgICAgICAgICAgICBvdXQud3JpdGUoIiAgICAje29wY29kZXNbaV0uY2hlY2twb2ludHMu
bGVuZ3RofSxcbiIpCiAgICAgICAgICAgICAgIGkgKz0gMQogICAgICAgICAgIGVuZAogICAgICAg
ICAgIG91dCA8PCAiXG4iCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDc3NGQ2ZTk4MmVmOWM3NDlmYjE1OTI3YjM0NmE3MWZjMTVlZjk3NGIu
LjE5Zjg3ZjYyZjAyZTNkNWM0ZjQ3ZTE1ZTQ1OWNmODQ2ZDNiNGNhNjAgMTAwNjQ0Ci0tLSBhL0pT
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMjAtMDYtMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAg
ICAgICAgQnl0ZWNvZGUgVXNlRGVmIHNob3VsZCBiZSBhd2FyZSBvZiBjaGVja3BvaW50cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNTY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvZm9y
LW9mLW5lZWRzLWJ5dGVjb2RlLXVzZS1hdC1jaGVja3BvaW50LWFmdGVyLWRlZi5qczoKKyAgICAg
ICAgKGZvbyk6CisKKzIwMjAtMDYtMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnl0ZWNvZGUgVXNlRGVmIHNob3VsZCBiZSBhd2FyZSBvZiBjaGVj
a3BvaW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjEzNTY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBzdHJlc3MvZm9yLW9mLW5lZWRzLWJ5dGVjb2RlLXVzZS1hdC1jaGVja3BvaW50LWFmdGVyLWRl
Zi5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorCiAyMDIwLTA2LTI0ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQ2xvYmJlcml6ZSBtaXNzZXMg
YHdyaXRlKEhlYXApYCByZXBvcnQgaW4gc29tZSBub2RlcwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9z
dHJlc3MvZm9yLW9mLW5lZWRzLWJ5dGVjb2RlLXVzZS1hdC1jaGVja3BvaW50LWFmdGVyLWRlZi5q
cyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1vZi1uZWVkcy1ieXRlY29kZS11c2UtYXQtY2hlY2twb2lu
dC1hZnRlci1kZWYuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDAxODM1MWQ5YmY3M2Q3NDdmNzY4MTNkMTYzZDYw
NzQzZDgxZDYwNgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1vZi1uZWVk
cy1ieXRlY29kZS11c2UtYXQtY2hlY2twb2ludC1hZnRlci1kZWYuanMKQEAgLTAsMCArMSwxNCBA
QAorLy9AIHJlcXVpcmVPcHRpb25zKCItLWppdFBvbGljeVNjYWxlPTAiLCAiLS12YWxpZGF0ZUZU
TE9TUkV4aXRMaXZlbmVzcz0xIikKKworZnVuY3Rpb24gZm9vKCkgeworICBmb3IgKGxldCBpPTA7
IGk8MTAwOyBpKyspIHsKKyAgICBsZXQgdTggPSBuZXcgVWludDhBcnJheSg0KTsKKyAgICBmb3Ig
KGxldCBxIG9mIHU4KSB7fQorICAgIGxldCB1MzIgPSBuZXcgVWludDMyQXJyYXkoMik7CisgICAg
Zm9yIChsZXQgcSBvZiB1MzIpIHt9CisgIH0KK30KKworZm9yIChsZXQgaT0wOyBpPDEwMDsgaSsr
KSB7CisgIGZvbygpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402689</attachid>
            <date>2020-06-24 14:39:38 -0700</date>
            <delta_ts>2020-07-06 17:21:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213566-20200624143937.patch</filename>
            <type>text/plain</type>
            <size>56495</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzNDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
OWU0YWRjNTIzYWU1NzU4MjY3NTQ5NTc2OTllNTYyZTcyZWFhNmQ3Li43OThkZDg0ODg1Mzk3Mjdm
MzYwZjEzZDUzMjI4ZDEzYjNmY2FlODkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTMgQEAKKzIwMjAtMDYtMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnl0ZWNvZGUgVXNlRGVmIHNob3VsZCBiZSBhd2FyZSBvZiBjaGVj
a3BvaW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjEzNTY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UHJldmlvdXNseSwgd2UgdHJpZWQgdG8gc29sdmUgdGVhY2hpbmcgREZHIGFib3V0IHVzZXMgYW5k
IGRlZnMgb2YKKyAgICAgICAgbG9jYWxzIGFjcm9zcyBjaGVja3BvaW50cyBieSBhc2tpbmcgd2hh
dCBsb2NhbHMgd2VyZSBkZWYnZCBhdCBzb21lCisgICAgICAgIGNoZWNrcG9pbnQuIEhvd2V2ZXIs
IHRoaXMgd2FzIHN1YnRseSB3cm9uZyBiZWNhdXNlIHdlIGRpZG4ndAorICAgICAgICByZXBvcnQg
YSB1c2UgYXQgZWFjaCBzdWJzZXF1ZW50IGNoZWNrcG9pbnQgc28gREZHIHRob3VnaHQgdGhlCisg
ICAgICAgIGxvY2FsIHdhcyBraWxsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZXZlcnRzIHRo
YXQgY2hhbmdlIGFuZCBpbnN0ZWFkIHRlYWNoZXMgQnl0ZWNvZGVVc2VEZWYKKyAgICAgICAgYWJv
dXQgY2hlY2twb2ludHMuIFJpZ2h0IG5vdywgQnl0ZWNvZGVVc2VEZWYgb25seSBrbm93cyBhYm91
dAorICAgICAgICBsb2NhbHMgYXQgY2hlY2twb2ludHMgYnV0IGluIHRoZSBmdXR1cmUgd2UgbWF5
IHRlYWNoIGl0IGFib3V0IHRtcHMKKyAgICAgICAgYXQgd2VsbC4KKworICAgICAgICBTaW5jZSB0
aGUgdmVjdG9ycyBjb250YWluaW5nIG91ciBsaXZlbmVzcyBiaXRtYXBzIHdlcmUgYWxyZWFkeQor
ICAgICAgICBzcGFyc2UgKHRoZXkgYXJlIGluZGV4ZWQgYnkgdGhlIGJ5dGVjb2RlIG9mZnNldCkg
d2UgY2FuIHJldXNlIHRoZQorICAgICAgICBnYXBzIHRvIGhvbGQgb3VyIGNoZWNrcG9pbnQgbGl2
ZW5lc3MgaW5mb3JtYXRpb24uIFRvIG1ha2Ugc3VyZSB3ZQorICAgICAgICBkb24ndCBvdmVybGFw
IGJldHdlZW4gdGhlIG5leHQgYnl0ZWNvZGUgYW5kIGEgY2hlY2twb2ludCBmb3IgdGhlCisgICAg
ICAgIGN1cnJlbnQgYnl0ZWNvZGUgdGhlcmUgaXMgbm93IGEgc3RhdGljIGFzc2VydCB0aGF0IHRo
ZSBsZW5ndGggb2YKKyAgICAgICAgdGhlIGJ5dGVjb2RlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbnVt
YmVyIG9mIGNoZWNrcG9pbnRzLiBUaGlzCisgICAgICAgIGFzc3VtcHRpb24gaXMgdHJ1ZSBmb3Ig
ZXhpc3RpbmcgYnl0ZWNvZGVzIHdpdGggY2hlY2twb2ludHMgYW5kCisgICAgICAgIGxpa2VseSB0
byBiZSB0cnVlIGFueXdheSBmb3IgZnV0dXJlIG9uZXMuCisKKyAgICAgICAgTWFueSBvZiB0aGUg
Qnl0ZWNvZGVMaXZlbmVzc1Byb3BlZ2F0aW9uIGZ1bmN0aW9ucyBoYXZlIGJlZW4KKyAgICAgICAg
cmVuYW1lZCB0byByZWZsZWN0IHRoYXQgdGhleSBvcGVyYXRlIG92ZXIgdGhlIGZ1bGwgaW5zdHJ1
Y3Rpb24sCisgICAgICAgIGluY2x1ZGluZyBjaGVja3BvaW50cywgcmF0aGVyIHRoYW4ganVzdCB0
aGUgQnl0ZWNvZGVJbmRleCBwYXNzZWQuCisKKyAgICAgICAgTGFzdGx5LCB0aGlzIHBhdGNoIG1h
a2VzIGEgc3BlY3VsYXRpdmUgZml4IHRvIGZvckFsbEtpbGxlZE9wZXJhbmRzIHdoZXJlIHdlCisg
ICAgICAgIHdvdWxkbid0IHJlcG9ydCB0aGF0IGFsbCB0bXBzIGRpZSBhdCB0aGUgZW5kIG9mIGVh
Y2ggYnl0ZWNvZGUuIEkgY2FuJ3QgdGhpbmsKKyAgICAgICAgb2YgYSBjYXNlIHdoZXJlIHRoaXMg
d291bGQgYnJlYWsgdGhpbmdzIGJ1dCBpdCdzIHByb2JhYmx5IGdvb2QgaHlnaWVuZS4KKworICAg
ICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6R2VuZXJhdG9yTGl2ZW5lc3NBbmFseXNpczo6cnVuKToKKyAgICAgICAgKiBieXRlY29k
ZS9CeXRlY29kZUluZGV4Lmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OkJ5dGVjb2Rl
SW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpjaGVja3BvaW50IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6d2l0aENoZWNrcG9pbnQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpwYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKToKKyAgICAgICAgKEpTQzo6dG1wTGl2ZW5lc3NG
b3JDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpn
ZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjps
aXZlbmVzc0ZvckNoZWNrcG9pbnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXhEZWYpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRl
eFVzZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92
ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24p
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2spOgorICAgICAgICAoSlND
OjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rp
b24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVy
SW5zdHJ1Y3Rpb25EZWYpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2UpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJ
bkV4Y2VwdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVu
ZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJ
bmRleEltcGwpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBs
KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpj
b21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRl
Y29kZUluZGV4U2xvdyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsaWRhdGUpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmg6CisgICAgICAgIChKU0M6OkZ1
bGxCeXRlY29kZUxpdmVuZXNzOjpnZXRMaXZlbmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1
bGxCeXRlY29kZUxpdmVuZXNzOjp0b0luZGV4KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVj
dGlvbi5oOgorICAgICAgICAoSlNDOjpCYXNlSW5zdHJ1Y3Rpb246Om51bWJlck9mQ2hlY2twb2lu
dHMgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW5zdHJ1Y3Rpb25TdHJlYW06Omluc3RydWN0aW9uQ291bnQgY29uc3QpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmg6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6CisgICAgICAgICogZGZnL0RGR0ZvckFsbEtpbGxzLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Zm9yQWxsS2lsbGVkT3BlcmFuZHMpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAg
ICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNl
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6Y2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkpOgorICAgICAgICAqIGdlbmVyYXRv
ci9PcGNvZGUucmI6CisgICAgICAgICogZ2VuZXJhdG9yL1NlY3Rpb24ucmI6CisKKyAgICAgICAg
KiBieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChKU0M6
OkdlbmVyYXRvckxpdmVuZXNzQW5hbHlzaXM6OnJ1bik6CisgICAgICAgICogYnl0ZWNvZGUvQnl0
ZWNvZGVJbmRleC5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4OjpCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6Y2hlY2twb2ludCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OndpdGhDaGVja3BvaW50IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVJbmRleDo6cGFjayk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzOjpkdW1wUmVzdWx0cyk6CisgICAgICAgIChKU0M6OnRtcExpdmVuZXNzRm9yQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGl2ZW5l
c3NGb3JDaGVja3BvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
OjpnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2
ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4RGVmKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXhVc2Up
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0
ZWNvZGVJbmRleFVzZUluRXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
TGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZl
bmVzc0Zvckluc3RydWN0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3Bh
Z2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3Ry
dWN0aW9uRGVmKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3Bh
Z2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uVXNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uVXNlSW5FeGNl
cHRpb25IYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1By
b3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlSW5kZXgpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNz
SW5mb0F0Qnl0ZWNvZGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNv
ZGVVc2VEZWYuY3BwOgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJ
bXBsKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0
ZVVzZXNGb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVJ
bmRleFNsb3cpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbGlkYXRlKToKKyAgICAgICAg
KiBieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOgorICAgICAgICAoSlNDOjpGdWxsQnl0
ZWNvZGVMaXZlbmVzczo6Z2V0TGl2ZW5lc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpGdWxsQnl0
ZWNvZGVMaXZlbmVzczo6dG9JbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24u
aDoKKyAgICAgICAgKEpTQzo6QmFzZUluc3RydWN0aW9uOjpudW1iZXJPZkNoZWNrcG9pbnRzIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZpbmFsaXplKToKKyAgICAgICAgKiBkZmcvREZHRm9y
QWxsS2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxLaWxsZWRPcGVyYW5kcyk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNM
aXZlSW5CeXRlY29kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2Fy
eSk6CisgICAgICAgICogZ2VuZXJhdG9yL09wY29kZS5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3Iv
U2VjdGlvbi5yYjoKKwogMjAyMC0wNi0yNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtKU0NdIENsb2JiZXJpemUgbWlzc2VzIGB3cml0ZShIZWFwKWAgcmVw
b3J0IGluIHNvbWUgbm9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCmluZGV4IDZmYmEyMjk3
YzI5MWZlNDhlYjk5M2NmYTdlZmY2MzkxY2M0Zjg2NjMuLmE4ZTU2ZDBjZDM5NGJjMWI3YWMwNTI2
YmU4NjY3ZWFjOGJkZDdlNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcApAQCAtMTk0LDcg
KzE5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcnVuTGl2ZW5lc3NGaXhwb2ludChjb2RlQmxvY2ss
IGluc3RydWN0aW9ucywgbV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSk7CiAKICAgICAgICAg
Zm9yIChZaWVsZERhdGEmIGRhdGEgOiBtX2dlbmVyYXRvcmlmaWNhdGlvbi55aWVsZHMoKSkKLSAg
ICAgICAgICAgIGRhdGEubGl2ZW5lc3MgPSBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCksIEJ5
dGVjb2RlSW5kZXgobV9nZW5lcmF0b3JpZmljYXRpb24uaW5zdHJ1Y3Rpb25zKCkuYXQoZGF0YS5w
b2ludCkubmV4dCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICBkYXRhLmxpdmVuZXNzID0gZ2V0
TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9nZW5l
cmF0b3JpZmljYXRpb24uZ3JhcGgoKSwgQnl0ZWNvZGVJbmRleChtX2dlbmVyYXRvcmlmaWNhdGlv
bi5pbnN0cnVjdGlvbnMoKS5hdChkYXRhLnBvaW50KS5uZXh0KCkub2Zmc2V0KCkpKTsKICAgICB9
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
SW5kZXguaAppbmRleCA2ZTI2NmQzZGFmM2IxMjVlODczNjc1NzU0MDUyYzMxM2MwZTVhNTcxLi45
YmM4NDM0ZTBmOWIzOGIyOGExYjgxMWUwZTAxZmVlMjAxYjhiYjg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKQEAgLTM0LDYgKzM0LDkgQEAg
Y2xhc3MgUHJpbnRTdHJlYW07CiAKIG5hbWVzcGFjZSBKU0MgewogCit1c2luZyBDaGVja3BvaW50
ID0gdWludDhfdDsKK3N0YXRpYyBjb25zdGV4cHIgQ2hlY2twb2ludCBub0NoZWNrcG9pbnRzID0g
MDsKKwogY2xhc3MgQnl0ZWNvZGVJbmRleCB7CiBwdWJsaWM6CiAgICAgQnl0ZWNvZGVJbmRleCgp
ID0gZGVmYXVsdDsKQEAgLTQyLDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAg
ICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCB1aW50OF90
IGNoZWNrcG9pbnQgPSAwKQorICAgIGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQsIENoZWNrcG9pbnQgY2hlY2twb2ludCA9IG5vQ2hlY2twb2ludHMpCiAgICAg
ICAgIDogbV9wYWNrZWRCaXRzKHBhY2soYnl0ZWNvZGVPZmZzZXQsIGNoZWNrcG9pbnQpKQogICAg
IHsKICAgICAgICAgQVNTRVJUKCp0aGlzKTsKQEAgLTU0LDcgKzU3LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgY2hlY2twb2ludFNoaWZ0ID0gV1RGOjpnZXRNU0JT
ZXRDb25zdGV4cHIobnVtYmVyT2ZDaGVja3BvaW50cyk7CiAKICAgICB1aW50MzJfdCBvZmZzZXQo
KSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgPj4gY2hlY2twb2ludFNoaWZ0OyB9Ci0gICAg
dWludDhfdCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYgY2hlY2tw
b2ludE1hc2s7IH0KKyAgICBDaGVja3BvaW50IGNoZWNrcG9pbnQoKSBjb25zdCB7IHJldHVybiBt
X3BhY2tlZEJpdHMgJiBjaGVja3BvaW50TWFzazsgfQogICAgIHVpbnQzMl90IGFzQml0cygpIGNv
bnN0IHsgcmV0dXJuIG1fcGFja2VkQml0czsgfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIFdURjo6aW50SGFzaChtX3BhY2tlZEJpdHMpOyB9CkBAIC02Miw3ICs2NSw3IEBA
IHB1YmxpYzoKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1
cm4gKnRoaXMgPT0gZGVsZXRlZFZhbHVlKCk7IH0KIAogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4
IGZyb21CaXRzKHVpbnQzMl90IGJpdHMpOwotICAgIEJ5dGVjb2RlSW5kZXggd2l0aENoZWNrcG9p
bnQodW5zaWduZWQgY2hlY2twb2ludCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChvZmZz
ZXQoKSwgY2hlY2twb2ludCk7IH0KKyAgICBCeXRlY29kZUluZGV4IHdpdGhDaGVja3BvaW50KENo
ZWNrcG9pbnQgY2hlY2twb2ludCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChvZmZzZXQo
KSwgY2hlY2twb2ludCk7IH0KIAogICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgogICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52
YWxpZE9mZnNldCAmJiBtX3BhY2tlZEJpdHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0K
QEAgLTgwLDEyICs4MywxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDMyX3QgaW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKTsKIAotICAgIHN0YXRpYyB1aW50MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5k
ZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7CisgICAgc3RhdGljIHVpbnQzMl90IHBhY2sodWludDMy
X3QgYnl0ZWNvZGVJbmRleCwgQ2hlY2twb2ludCk7CiAKICAgICB1aW50MzJfdCBtX3BhY2tlZEJp
dHMgeyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCi1pbmxpbmUgdWludDMyX3QgQnl0ZWNvZGVJbmRl
eDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1aW50OF90IGNoZWNrcG9pbnQpCitpbmxp
bmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCBD
aGVja3BvaW50IGNoZWNrcG9pbnQpCiB7CiAgICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJP
ZkNoZWNrcG9pbnRzKTsKICAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNo
aWZ0KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCmluZGV4IDQyYTYzNWVjOGUzZTQ4NzEyNDkzMzNhYjg4NTA2YzU3NmZiNjczYjkuLjhi
NWQ2ZjViYmU2NTI2ZDUwNjY5OWY1NjRhN2E0NGYwMTkzNDRlNDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgotI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDQsNTcg
KzQzLDQ1IEBAIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgICAgICBkdW1wUmVzdWx0cyhjb2RlQmxvY2sp
OwogfQogCi12b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRC
eXRlY29kZUluZGV4KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCkKLXsKLSAgICBCeXRlY29kZUJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOwotICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKCFibG9jay0+
aXNFbnRyeUJsb2NrKCkpOwotICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwotICAg
IHJlc3VsdC5yZXNpemUoYmxvY2stPm91dCgpLm51bUJpdHMoKSk7Ci0gICAgY29tcHV0ZUxvY2Fs
TGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKSwgbV9ncmFwaCwgKmJsb2NrLCBieXRlY29kZUluZGV4LCByZXN1bHQpOwotfQotCi1GYXN0
Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZUluZGV4KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgpCi17Ci0gICAgRmFzdEJpdFZlY3RvciBvdXQ7Ci0gICAgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZUluZGV4KGNvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCwgb3V0KTsKLSAgICByZXR1cm4gb3V0
OwotfQotCiB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUZ1bGxMaXZlbmVz
cyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIHJlc3VsdCkKIHsK
ICAgICBGYXN0Qml0VmVjdG9yIG91dDsKIAotICAgIHJlc3VsdC5tX2JlZm9yZVVzZVZlY3Rvci5y
ZXNpemUoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotICAgIHJlc3VsdC5tX2Fm
dGVyVXNlVmVjdG9yLnJlc2l6ZShjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7Cisg
ICAgc2l6ZV90IHNpemUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBy
ZXN1bHQubV91c2VzQmVmb3JlLnJlc2l6ZShzaXplKTsKKyAgICByZXN1bHQubV91c2VzQWZ0ZXIu
cmVzaXplKHNpemUpOwogICAgIAogICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jayA6
IG1fZ3JhcGguYmFzaWNCbG9ja3NJblJldmVyc2VPcmRlcigpKSB7CiAgICAgICAgIGlmIChibG9j
ay5pc0VudHJ5QmxvY2soKSB8fCBibG9jay5pc0V4aXRCbG9jaygpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIAogICAgICAgICBvdXQgPSBibG9jay5vdXQoKTsKLSAgICAgICAgCi0g
ICAgICAgIGF1dG8gdXNlID0gWyZdICh1bnNpZ25lZCBiaXRJbmRleCkgewotICAgICAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgdXNlIGZ1bmN0b3IsIHNvIHdlIHNldCB0aGUgYml0LgotICAgICAgICAg
ICAgb3V0W2JpdEluZGV4XSA9IHRydWU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgYXV0byBkZWYg
PSBbJl0gKHVuc2lnbmVkIGJpdEluZGV4KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBk
ZWYgZnVuY3Rvciwgc28gd2UgY2xlYXIgdGhlIGJpdC4KLSAgICAgICAgICAgIG91dFtiaXRJbmRl
eF0gPSBmYWxzZTsKLSAgICAgICAgfTsKLQogICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpOwogICAgICAgICB1bnNpZ25lZCBjdXJzb3IgPSBibG9j
ay50b3RhbExlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay5kZWx0YSgp
LnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgY3Vyc29yIC09IGJsb2NrLmRlbHRhKClbaV07
CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KGJsb2NrLmxlYWRlck9mZnNldCgpICsgY3Vyc29yKTsKLQotICAgICAgICAgICAgc3RlcE92ZXJJ
bnN0cnVjdGlvbkRlZihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJ
bmRleCwgZGVmKTsKLSAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJbkV4Y2VwdGlv
bkhhbmRsZXIoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ3JhcGgsIGJ5dGVjb2RlSW5kZXgs
IHVzZSk7Ci0gICAgICAgICAgICByZXN1bHQubV9hZnRlclVzZVZlY3RvcltieXRlY29kZUluZGV4
Lm9mZnNldCgpXSA9IG91dDsgLy8gQWZ0ZXJVc2UgcG9pbnQuCi0gICAgICAgICAgICBzdGVwT3Zl
ckluc3RydWN0aW9uVXNlKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dyYXBoLCBieXRlY29k
ZUluZGV4LCB1c2UpOwotICAgICAgICAgICAgcmVzdWx0Lm1fYmVmb3JlVXNlVmVjdG9yW2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCldID0gb3V0OyAvLyBCZWZvcmVVc2UgcG9pbnQuCisgICAgICAgICAg
ICBmb3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZUlu
ZGV4KS0+bnVtYmVyT2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAg
ICAgICAgYnl0ZWNvZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXgud2l0aENoZWNrcG9pbnQoY2hlY2tw
b2ludCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIHVzZSA9IFsmXSAoQ2hlY2twb2ludCB0YXJn
ZXQsIHVuc2lnbmVkIGJpdEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIHVzZSBmdW5jdG9yLCBzbyB3ZSBzZXQgdGhlIGJpdC4KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGNoZWNrcG9pbnQgPT0gdGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0W2Jp
dEluZGV4XSA9IHRydWU7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1
dG8gZGVmID0gWyZdIChDaGVja3BvaW50IHRhcmdldCwgdW5zaWduZWQgYml0SW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmIGZ1bmN0b3IsIHNvIHdlIGNsZWFy
IHRoZSBiaXQuCisgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja3BvaW50ID09IHRhcmdldCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dFtiaXRJbmRleF0gPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgc3RlcE92ZXJCeXRlY29kZUluZGV4RGVmKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dyYXBoLCBieXRlY29kZUluZGV4LCBkZWYpOworICAg
ICAgICAgICAgICAgIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZUluRXhjZXB0aW9uSGFuZGxlcihj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQubV91c2VzQWZ0ZXJbcmVzdWx0LnRvSW5kZXgoYnl0ZWNvZGVJ
bmRleCldID0gb3V0OyAvLyBBZnRlclVzZSBwb2ludC4KKyAgICAgICAgICAgICAgICBzdGVwT3Zl
ckJ5dGVjb2RlSW5kZXhVc2UoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ3JhcGgsIGJ5dGVj
b2RlSW5kZXgsIHVzZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1fdXNlc0JlZm9yZVtyZXN1
bHQudG9JbmRleChieXRlY29kZUluZGV4KV0gPSBvdXQ7IC8vIEJlZm9yZVVzZSBwb2ludC4KKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE1MCw3ICsxMzcsNyBAQCB2b2lk
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiAgICAgICAgICAgICBjb25zdCBhdXRvIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0
aW9ucy5hdChieXRlY29kZU9mZnNldCk7CiAKICAgICAgICAgICAgIGRhdGFMb2dGKCJMaXZlIHZh
cmlhYmxlczoiKTsKLSAgICAgICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUJlZm9yZSA9IGdldExp
dmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpKTsKKyAgICAgICAgICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUJlZm9yZSA9IGdldExp
dmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
T2Zmc2V0KSk7CiAgICAgICAgICAgICBkdW1wQml0VmVjdG9yKGxpdmVCZWZvcmUpOwogICAgICAg
ICAgICAgZGF0YUxvZ0YoIlxuIik7CiAgICAgICAgICAgICBjb2RlQmxvY2stPmR1bXBCeXRlY29k
ZShXVEY6OmRhdGFGaWxlKCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xNzYsMTQgKzE2Mywx
MCBAQCBjb25zdGV4cHIgYm9vbCBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKEVudW1UeXBlMSB2
MSwgRW51bVR5cGUyIHYyKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZTI+KHYx
KSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjIpOwogfQogCi1WZWN0b3I8T3BlcmFuZCwgbWF4
TnVtQ2hlY2twb2ludFRtcHM+IGxpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2sm
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQorQml0bWFwPG1heE51bUNo
ZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiBj
b2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBWZWN0b3I8T3Bl
cmFuZCwgbWF4TnVtQ2hlY2twb2ludFRtcHM+IHJlc3VsdDsKLSAgICB1aW50OF90IGNoZWNrcG9p
bnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLQotICAgIGF1dG8gc2NvcGVFeGl0ID0g
bWFrZVNjb3BlRXhpdChbJl0gewotICAgICAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA8PSBtYXhO
dW1DaGVja3BvaW50VG1wcyk7Ci0gICAgfSk7CisgICAgQml0bWFwPG1heE51bUNoZWNrcG9pbnRU
bXBzPiByZXN1bHQ7CisgICAgQ2hlY2twb2ludCBjaGVja3BvaW50ID0gYnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCk7CiAKICAgICBpZiAoIWNoZWNrcG9pbnQpCiAgICAgICAgIHJldHVybiByZXN1
bHQ7CkBAIC0xOTUsMTYgKzE3OCwxNCBAQCBWZWN0b3I8T3BlcmFuZCwgbWF4TnVtQ2hlY2twb2lu
dFRtcHM+IGxpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZAogICAgICAg
ICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6
bWFrZUNhbGwsIE9wVGFpbENhbGxWYXJhcmdzOjptYWtlQ2FsbCkgJiYgZW51bVZhbHVlc0VxdWFs
QXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1RoaXMsIE9wVGFpbENh
bGxWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAgc3RhdGljX2Fzc2Vy
dChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBPcENv
bnN0cnVjdFZhcmFyZ3M6Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9w
Q2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhpcywgT3BDb25zdHJ1Y3RWYXJhcmdzOjph
cmdDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gT3BDYWxs
VmFyYXJnczo6bWFrZUNhbGwpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKE9wZXJhbmQ6OnRt
cChPcENhbGxWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgICAgIHJl
c3VsdC5zZXQoT3BDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7Ci0gICAg
ICAgIGlmIChjaGVja3BvaW50ID09IE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0KQotICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChjb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRl
eCktPmFzPE9wSXRlcmF0b3JPcGVuPigpLm1faXRlcmF0b3IpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKLSAgICAgICAgcmVzdWx0
LmFwcGVuZChPcGVyYW5kOjp0bXAoT3BJdGVyYXRvck5leHQ6Om5leHRSZXN1bHQpKTsKKyAgICAg
ICAgcmVzdWx0LnNldChPcEl0ZXJhdG9yTmV4dDo6bmV4dFJlc3VsdCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKaW5kZXggYmU1
ZWUyZmNkM2E2NGU1NjNhZWExZjNmMjIyNzkxZTQ2OGJiNjEwNC4uYTIwNDE3ZjIyY2IxYjJkMzc3
NmIwOWE2NzcxMzljMjI3ZDI2MGMyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaApAQCAtNTEsMjYgKzUx
LDI2IEBAIGVudW0gY2xhc3MgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50IDogdWludDhfdCB7CiBj
bGFzcyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb24gewogcHVibGljOgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0b3I+Ci0gICAgc3RhdGlj
IHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvblVzZShDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVu
Y3RvciYpOworICAgIHN0YXRpYyB2b2lkIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZShDb2RlQmxv
Y2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNv
ZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0b3I+Ci0gICAgc3RhdGljIHZvaWQgc3RlcE92ZXJJ
bnN0cnVjdGlvblVzZUluRXhjZXB0aW9uSGFuZGxlcihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNl
RnVuY3RvciYpOworICAgIHN0YXRpYyB2b2lkIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZUluRXhj
ZXB0aW9uSGFuZGxlcihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBC
eXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci0gICAg
c3RhdGljIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbkRlZihDb2RlQmxvY2tUeXBlKiwgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3Qg
RGVmRnVuY3RvciYpOworICAgIHN0YXRpYyB2b2lkIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleERlZihD
b2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwg
Qnl0ZWNvZGVJbmRleCwgY29uc3QgRGVmRnVuY3RvciYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVuY3RvciwgdHlwZW5hbWUgRGVmRnVuY3Rv
cj4KLSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBj
b25zdCBVc2VGdW5jdG9yJiwgY29uc3QgRGVmRnVuY3RvciYpOworICAgIHN0YXRpYyB2b2lkIHN0
ZXBPdmVyQnl0ZWNvZGVJbmRleChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYsIGNv
bnN0IERlZkZ1bmN0b3ImKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+
CiAgICAgc3RhdGljIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCwgRmFz
dEJpdFZlY3RvciYgb3V0KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUs
IHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLSAgICBzdGF0aWMgYm9vbCBjb21wdXRlTG9jYWxMaXZl
bmVzc0ZvckJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYs
IEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUJhc2ljQmxvY2smLCBCeXRlY29kZUluZGV4LCBGYXN0
Qml0VmVjdG9yJiByZXN1bHQpOworICAgIHN0YXRpYyBib29sIGNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9ySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVj
b2RlR3JhcGgmLCBCeXRlY29kZUJhc2ljQmxvY2smLCBCeXRlY29kZUluZGV4LCBGYXN0Qml0VmVj
dG9yJiByZXN1bHQpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlw
ZW5hbWUgSW5zdHJ1Y3Rpb25zPgogICAgIHN0YXRpYyBib29sIGNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVjb2RlR3Jh
cGgmLCBCeXRlY29kZUJhc2ljQmxvY2smKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLSAgICBzdGF0aWMgRmFzdEJpdFZlY3Rv
ciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrVHlwZSosIGNvbnN0IElu
c3RydWN0aW9ucyYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4KTsKKyAgICBzdGF0aWMg
RmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUq
LCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCk7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlv
bnM+CiAgICAgc3RhdGljIHZvaWQgcnVuTGl2ZW5lc3NGaXhwb2ludChDb2RlQmxvY2tUeXBlKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYpOwpAQCAtODMsNyArODMsNyBAQCBw
dWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjsKICAg
ICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKik7CiAgICAgCi0gICAgRmFzdEJp
dFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrKiwgQnl0ZWNv
ZGVJbmRleCk7CisgICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9u
KENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpIHsgcmV0
dXJuIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVj
dGlvbihjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3JhcGgsIGJ5dGVj
b2RlSW5kZXgpOyB9CiAgICAgCiAgICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKENvZGVCbG9j
ayosIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpOwogCkBAIC05MiwxMiArOTIsMTAgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGR1bXBSZXN1bHRzKENvZGVCbG9jayopOwogCi0g
ICAgdm9pZCBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2NrKiwgQnl0ZWNv
ZGVJbmRleCwgRmFzdEJpdFZlY3RvciYpOwotCiAgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwog
fTsKIAotVmVjdG9yPE9wZXJhbmQsIG1heE51bUNoZWNrcG9pbnRUbXBzPiBsaXZlbmVzc0ZvckNo
ZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiwgQnl0ZWNvZGVJbmRleCk7CitCaXRtYXA8bWF4TnVt
Q2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2sm
LCBCeXRlY29kZUluZGV4KTsKIAogaW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQg
b3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShj
b25zdCBGYXN0Qml0VmVjdG9yJiBvdXQsIGludCBvcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzSW5saW5lcy5oCmluZGV4IGM2MDk2NWJjYzk3YTdiODk5MGRiOThmZDIzZDk5YjVlMDhmOWNk
ZDUuLmQ4OTE1OTY0ZjkyOThiMzFhYWM5MWU1NDFlZjJlNmJlYzhmNWI2N2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJ
bmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQnl0
ZWNvZGVHcmFwaC5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgorI2lu
Y2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiSW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAKQEAgLTU4LDQ3ICs1OSw0OSBAQCBpbmxpbmUgYm9v
bCBpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4K
LWlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVj
dGlvbkRlZihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4RGVmKENvZGVCbG9ja1R5cGUqIGNvZGVC
bG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFw
aCYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQog
ewogICAgIGF1dG8qIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlSW5kZXgp
LnB0cigpOwogICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleCgKICAgICAgICAgY29kZUJs
b2NrLCBpbnN0cnVjdGlvbiwKLSAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
eworICAgICAgICBbJl0gKENoZWNrcG9pbnQgY2hlY2twb2ludCwgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhvcGVy
YW5kKSkKLSAgICAgICAgICAgICAgICBkZWYob3BlcmFuZC50b0xvY2FsKCkpOworICAgICAgICAg
ICAgICAgIGRlZihjaGVja3BvaW50LCBvcGVyYW5kLnRvTG9jYWwoKSk7CiAgICAgICAgIH0pOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBVc2VGdW5jdG9y
PgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3Ry
dWN0aW9uVXNlKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCwgY29uc3QgVXNlRnVuY3RvciYgdXNlKQoraW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVz
c1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXhVc2UoQ29kZUJsb2NrVHlwZSogY29k
ZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdy
YXBoJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJiB1c2Up
CiB7CiAgICAgYXV0byogaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoYnl0ZWNvZGVJbmRl
eCkucHRyKCk7CiAgICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KAogICAgICAgICBjb2Rl
QmxvY2ssIGluc3RydWN0aW9uLAotICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KSB7CisgICAgICAgIFsmXSAoQ2hlY2twb2ludCBjaGVja3BvaW50LCBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkgewogICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKG9w
ZXJhbmQpKQotICAgICAgICAgICAgICAgIHVzZShvcGVyYW5kLnRvTG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgdXNlKGNoZWNrcG9pbnQsIG9wZXJhbmQudG9Mb2NhbCgpKTsKICAgICAgICAgfSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0
b3I+Ci1pbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5z
dHJ1Y3Rpb25Vc2VJbkV4Y2VwdGlvbkhhbmRsZXIoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSkKK2lubGluZSB2b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNl
cHRpb25IYW5kbGVyKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
LCBjb25zdCBVc2VGdW5jdG9yJiB1c2UpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGNlcHRp
b24gaGFuZGxlciwgd2Ugd2FudCB0aGUgbGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAotICAgIC8v
IGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2NrIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBsaXZlLWluIG9m
IHRoaXMgcGFydGljdWxhciBieXRlY29kZS4KKyAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9j
ayB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgQnl0ZWNv
ZGVJbmRleC4KICAgICBpZiAoYXV0byogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkpIHsKICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBoYW5kbGVyQmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFu
ZGxlci0+dGFyZ2V0KTsKICAgICAgICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7Ci0gICAgICAgIGhh
bmRsZXJCbG9jay0+aW4oKS5mb3JFYWNoU2V0Qml0KHVzZSk7CisgICAgICAgIGhhbmRsZXJCbG9j
ay0+aW4oKS5mb3JFYWNoU2V0Qml0KFsmXSAodW5zaWduZWQgaSkgeworICAgICAgICAgICAgdXNl
KGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICwgaSk7CisgICAgICAgIH0pOwogICAgIH0KIH0K
IAogLy8gU2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gYnl0ZWNvZGUgdXNlL2RlZiwgd2hpY2ggZGV0
ZXJtaW5lcyBkZWZzIGZpcnN0IGFuZCB0aGVuIHVzZXMsIGFuZCBpbmNsdWRlcwogLy8gZXhjZXB0
aW9uIGhhbmRsZXJzIGluIHRoZSB1c2VzLgogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZSwgdHlwZW5hbWUgVXNlRnVuY3RvciwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4KLWlubGluZSB2b2lk
IEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxv
Y2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMs
IEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0
IFVzZUZ1bmN0b3ImIHVzZSwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQoraW5saW5lIHZvaWQgQnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXgoQ29kZUJsb2Nr
VHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBC
eXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBV
c2VGdW5jdG9yJiB1c2UsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKIHsKLSAgICAvLyBUaGlzIGFi
c3RyYWN0bHkgZXhlY3V0ZSB0aGUgaW5zdHJ1Y3Rpb24gaW4gcmV2ZXJzZS4gSW5zdHJ1Y3Rpb25z
IGxvZ2ljYWxseSBmaXJzdCB1c2Ugb3BlcmFuZHMgYW5kCisgICAgLy8gVGhpcyBhYnN0cmFjdGx5
IGV4ZWN1dGVzIHRoZSBCeXRlY29kZUluZGV4IGluIHJldmVyc2UuIEluc3RydWN0aW9ucyBsb2dp
Y2FsbHkgZmlyc3QgdXNlIG9wZXJhbmRzIGFuZAogICAgIC8vIHRoZW4gZGVmaW5lIG9wZXJhbmRz
LiBUaGlzIGxvZ2ljYWwgb3JkZXJpbmcgaXMgbmVjZXNzYXJ5IGZvciBvcGVyYXRpb25zIHRoYXQg
dXNlIGFuZCBkZWYgdGhlIHNhbWUKICAgICAvLyBvcGVyYW5kLCBsaWtlOgogICAgIC8vCkBAIC0x
MTMsMzEgKzExNiwzNyBAQCBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246
OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZQogICAgIC8vIHVzZXMgYmVm
b3JlIGRlZnMsIHRoZW4gdGhlIGFkZCBvcGVyYXRpb24gYWJvdmUgd291bGQgYXBwZWFyIHRvIG5v
dCBoYXZlIGxvYzEgbGl2ZSwgc2luY2Ugd2UnZAogICAgIC8vIGZpcnN0IGFkZCBpdCB0byB0aGUg
b3V0IHNldCAodGhlIHVzZSksIGFuZCB0aGVuIHdlJ2QgcmVtb3ZlIGl0ICh0aGUgZGVmKS4KIAot
ICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25EZWYoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBo
LCBieXRlY29kZUluZGV4LCBkZWYpOwotICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJbkV4Y2Vw
dGlvbkhhbmRsZXIoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZUluZGV4
LCB1c2UpOwotICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2UoY29kZUJsb2NrLCBpbnN0cnVjdGlv
bnMsIGdyYXBoLCBieXRlY29kZUluZGV4LCB1c2UpOworICAgIHN0ZXBPdmVyQnl0ZWNvZGVJbmRl
eERlZihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIGRlZik7
CisgICAgc3RlcE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKKyAgICBzdGVwT3Zl
ckJ5dGVjb2RlSW5kZXhVc2UoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29k
ZUluZGV4LCB1c2UpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgogaW5s
aW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9u
KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgRmFzdEJpdFZlY3RvciYgb3V0KQogewotICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oCi0gICAg
ICAgIGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVJbmRleCwKLSAgICAg
ICAgWyZdICh1bnNpZ25lZCBiaXRJbmRleCkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUg
dXNlIGZ1bmN0b3IsIHNvIHdlIHNldCB0aGUgYml0LgotICAgICAgICAgICAgb3V0W2JpdEluZGV4
XSA9IHRydWU7Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXSAodW5zaWduZWQgYml0SW5kZXgpIHsK
LSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRlZiBmdW5jdG9yLCBzbyB3ZSBjbGVhciB0aGUg
Yml0LgotICAgICAgICAgICAgb3V0W2JpdEluZGV4XSA9IGZhbHNlOwotICAgICAgICB9KTsKKyAg
ICBhdXRvIG51bWJlck9mQ2hlY2twb2ludHMgPSBpbnN0cnVjdGlvbnMuYXQoYnl0ZWNvZGVJbmRl
eCktPm51bWJlck9mQ2hlY2twb2ludHMoKTsKKyAgICBmb3IgKENoZWNrcG9pbnQgdGFyZ2V0ID0g
bnVtYmVyT2ZDaGVja3BvaW50czsgdGFyZ2V0LS07KSB7CisgICAgICAgIHN0ZXBPdmVyQnl0ZWNv
ZGVJbmRleCgKKyAgICAgICAgICAgIGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0
ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIFsmXSAoQ2hlY2twb2ludCBjaGVja3BvaW50LCB1bnNp
Z25lZCBiaXRJbmRleCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHVzZSBmdW5j
dG9yLCBzbyB3ZSBzZXQgdGhlIGJpdC4KKyAgICAgICAgICAgICAgICBpZiAoY2hlY2twb2ludCA9
PSB0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIG91dFtiaXRJbmRleF0gPSB0cnVlOworICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXSAoQ2hlY2twb2ludCBjaGVja3BvaW50LCB1bnNp
Z25lZCBiaXRJbmRleCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRlZiBmdW5j
dG9yLCBzbyB3ZSBjbGVhciB0aGUgYml0LgorICAgICAgICAgICAgICAgIGlmIChjaGVja3BvaW50
ID09IHRhcmdldCkKKyAgICAgICAgICAgICAgICAgICAgb3V0W2JpdEluZGV4XSA9IGZhbHNlOwor
ICAgICAgICAgICAgfSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+Ci1pbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChDb2RlQmxv
Y2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRl
Y29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrJiBibG9jaywgQnl0ZWNvZGVJbmRl
eCB0YXJnZXRJbmRleCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQoraW5saW5lIGJvb2wgQnl0ZWNv
ZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0Zvckluc3RydWN0aW9u
KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlv
bnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUJhc2ljQmxvY2smIGJsb2NrLCBCeXRl
Y29kZUluZGV4IHRhcmdldEluZGV4LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCiB7CiAgICAgQVNT
RVJUKCFibG9jay5pc0V4aXRCbG9jaygpKTsKICAgICBBU1NFUlQoIWJsb2NrLmlzRW50cnlCbG9j
aygpKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCF0YXJnZXRJbmRleC5jaGVja3BvaW50KCks
ICJjb21wdXRlTG9jYWxMaXZlbmVzc0Zvckluc3RydWN0aW9uIGNhbid0IGJlIHVzZWQgdG8gYXNr
IHF1ZXN0aW9ucyBhYm91dCBjaGVja3BvaW50cyIpOwogCiAgICAgRmFzdEJpdFZlY3RvciBvdXQg
PSBibG9jay5vdXQoKTsKIApAQCAtMTU4LDE5ICsxNjcsMjAgQEAgaW5saW5lIGJvb2wgQnl0ZWNv
ZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKENvZGVC
bG9ja1QKIHsKICAgICBpZiAoYmxvY2suaXNFeGl0QmxvY2soKSB8fCBibG9jay5pc0VudHJ5Qmxv
Y2soKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb21wdXRlTG9jYWxMaXZl
bmVzc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBibG9j
aywgQnl0ZWNvZGVJbmRleChibG9jay5sZWFkZXJPZmZzZXQoKSksIGJsb2NrLmluKCkpOworICAg
IHJldHVybiBjb21wdXRlTG9jYWxMaXZlbmVzc0Zvckluc3RydWN0aW9uKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2ssIEJ5dGVjb2RlSW5kZXgoYmxvY2subGVhZGVyT2Zmc2V0
KCkpLCBibG9jay5pbigpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwg
dHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPgotaW5saW5lIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZl
bmVzc1Byb3BhZ2F0aW9uOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoQ29kZUJsb2Nr
VHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNv
ZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKK2lubGluZSBGYXN0
Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRJ
bnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYg
aW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQogeworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpLCAiZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbiBjYW4ndCBiZSB1c2VkIHRvIGFz
ayBxdWVzdGlvbnMgYWJvdXQgY2hlY2twb2ludHMiKTsKICAgICBCeXRlY29kZUJhc2ljQmxvY2sq
IGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKICAgICBBU1NFUlQoYmxvY2spOwogICAgIEFTU0VSVCghYmxvY2stPmlz
RW50cnlCbG9jaygpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKICAgICBG
YXN0Qml0VmVjdG9yIG91dDsKICAgICBvdXQucmVzaXplKGJsb2NrLT5vdXQoKS5udW1CaXRzKCkp
OwotICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIGlu
c3RydWN0aW9ucywgZ3JhcGgsICpibG9jaywgYnl0ZWNvZGVJbmRleCwgb3V0KTsKKyAgICBjb21w
dXRlTG9jYWxMaXZlbmVzc0Zvckluc3RydWN0aW9uKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBn
cmFwaCwgKmJsb2NrLCBieXRlY29kZUluZGV4LCBvdXQpOwogICAgIHJldHVybiBvdXQ7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3Bw
CmluZGV4IGNlNDcwYzkyMmU4ODNmZTAxN2YwOGQ2YjJmMzY3MjQ1NzNkZTgxOWUuLjI5MDg5YTlk
ODMxMGJmZWQzMDE1MjMzMDI3YThjNjAxNzU1YzU2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcApAQCAtMjksMTAgKzI5LDExIEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBDQUxMX0ZVTkNUT1IoX19hcmcpIFwKLSAgICBm
dW5jdG9yKF9fYnl0ZWNvZGUubV8jI19fYXJnKTsKKyAgICBmdW5jdG9yKG5vQ2hlY2twb2ludHMs
IF9fYnl0ZWNvZGUubV8jI19fYXJnKTsKIAogI2RlZmluZSBVU0VTX09SX0RFRlMoX19vcGNvZGUs
IC4uLikgXAogICAgIGNhc2UgX19vcGNvZGU6Om9wY29kZUlEOiB7IFwKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChfX29wY29kZTo6b3Bjb2RlSUQgPj0gTlVNQkVSX09GX0JZVEVDT0RFX1dJVEhfQ0hF
Q0tQT0lOVFMsICJEb24ndCB1c2UgdGhpcyBtYWNybyBmb3IgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBj
aGVja3BvaW50cy4iKTsgXAogICAgICAgICBhdXRvIF9fYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8X19vcGNvZGU+KCk7IFwKICAgICAgICAgV1RGX0xBWllfRk9SX0VBQ0hfVEVSTShDQUxMX0ZV
TkNUT1IsIF9fVkFfQVJHU19fKSBcCiAgICAgICAgIHJldHVybjsgXApAQCAtNDEsMjYgKzQyLDMx
IEBAIG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBVU0VTIFVTRVNfT1JfREVGUwogI2RlZmluZSBE
RUZTIFVTRVNfT1JfREVGUwogCi12b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwo
VmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3RvcikKK3Zv
aWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVS
ZWdpc3RlciwgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBjb25zdCBGdW5jdGlvbjx2
b2lkKENoZWNrcG9pbnQsIFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5jdG9yKQogewogICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAKLSAgICBhdXRvIGhhbmRs
ZU5ld0FycmF5TGlrZSA9IFsmXShhdXRvIG9wKSB7CisgICAgYXV0byBoYW5kbGVOZXdBcnJheUxp
a2UgPSBbJl0gKGF1dG8gb3ApIHsKICAgICAgICAgaW50IGJhc2UgPSBvcC5tX2FyZ3Yub2Zmc2V0
KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihvcC5tX2Fy
Z2MpOyBpKyspCi0gICAgICAgICAgICBmdW5jdG9yKFZpcnR1YWxSZWdpc3RlciB7IGJhc2UgLSBp
IH0pOworICAgICAgICAgICAgZnVuY3Rvcihub0NoZWNrcG9pbnRzLCBWaXJ0dWFsUmVnaXN0ZXIg
eyBiYXNlIC0gaSB9KTsKICAgICB9OwogCi0gICAgYXV0byBoYW5kbGVPcENhbGxMaWtlID0gWyZd
KGF1dG8gb3ApIHsKLSAgICAgICAgZnVuY3RvcihvcC5tX2NhbGxlZSk7CisgICAgYXV0byBoYW5k
bGVPcENhbGxMaWtlID0gWyZdIChhdXRvIG9wKSB7CisgICAgICAgIGZ1bmN0b3Iobm9DaGVja3Bv
aW50cywgb3AubV9jYWxsZWUpOwogICAgICAgICBpbnQgbGFzdEFyZyA9IC1zdGF0aWNfY2FzdDxp
bnQ+KG9wLm1fYXJndikgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOwogICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4ob3AubV9hcmdjKTsgaSsrKQot
ICAgICAgICAgICAgZnVuY3RvcihWaXJ0dWFsUmVnaXN0ZXIgeyBsYXN0QXJnICsgaSB9KTsKKyAg
ICAgICAgICAgIGZ1bmN0b3Iobm9DaGVja3BvaW50cywgVmlydHVhbFJlZ2lzdGVyIHsgbGFzdEFy
ZyArIGkgfSk7CiAgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpCi0gICAgICAg
ICAgICBmdW5jdG9yKHNjb3BlUmVnaXN0ZXIpOworICAgICAgICAgICAgZnVuY3Rvcihub0NoZWNr
cG9pbnRzLCBzY29wZVJlZ2lzdGVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH07CiAKKyAgICBh
dXRvIHVzZUF0RWFjaENoZWNrcG9pbnQgPSBbJl0gKGF1dG8gb3AsIGF1dG8uLi4gdmlydHVhbFJl
Z2lzdGVycykgeworICAgICAgICBmb3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IDA7IGNoZWNr
cG9pbnQgPCBkZWNsdHlwZShvcCk6Om51bWJlck9mQ2hlY2twb2ludHM7ICsrY2hlY2twb2ludCkK
KyAgICAgICAgICAgIChmdW5jdG9yKGNoZWNrcG9pbnQsIHZpcnR1YWxSZWdpc3RlcnMpLCAuLi4p
OworICAgIH07CisKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgY2FzZSBvcF93aWRlMTY6
CiAgICAgY2FzZSBvcF93aWRlMzI6CkBAIC0yNTAsOSArMjU2LDIyIEBAIHZvaWQgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29u
c3QgSW5zdHJ1CiAgICAgVVNFUyhPcEhhc1N0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0
eSwgZW51bWVyYXRvcikKICAgICBVU0VTKE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHksIGJhc2Us
IHByb3BlcnR5LCBlbnVtZXJhdG9yKQogICAgIFVTRVMoT3BJblN0cnVjdHVyZVByb3BlcnR5LCBi
YXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKLSAgICBVU0VTKE9wQ29uc3RydWN0VmFyYXJncywg
Y2FsbGVlLCB0aGlzVmFsdWUsIGFyZ3VtZW50cykKLSAgICBVU0VTKE9wQ2FsbFZhcmFyZ3MsIGNh
bGxlZSwgdGhpc1ZhbHVlLCBhcmd1bWVudHMpCi0gICAgVVNFUyhPcFRhaWxDYWxsVmFyYXJncywg
Y2FsbGVlLCB0aGlzVmFsdWUsIGFyZ3VtZW50cykKKworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJn
cz4oKTsKKyAgICAgICAgdXNlQXRFYWNoQ2hlY2twb2ludChieXRlY29kZSwgYnl0ZWNvZGUubV9j
YWxsZWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBieXRlY29kZS5tX2FyZ3VtZW50cyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczogeworICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVGFpbENhbGxWYXJhcmdzPigp
OworICAgICAgICB1c2VBdEVhY2hDaGVja3BvaW50KGJ5dGVjb2RlLCBieXRlY29kZS5tX2NhbGxl
ZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUsIGJ5dGVjb2RlLm1fYXJndW1lbnRzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpOwor
ICAgICAgICB1c2VBdEVhY2hDaGVja3BvaW50KGJ5dGVjb2RlLCBieXRlY29kZS5tX2NhbGxlZSwg
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIGJ5dGVjb2RlLm1fYXJndW1lbnRzKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAogICAgIFVTRVMoT3BHZXREaXJlY3RQbmFtZSwgYmFzZSwgcHJvcGVydHks
IGluZGV4LCBlbnVtZXJhdG9yKQogCkBAIC0yNjUsOCArMjg0LDIxIEBAIHZvaWQgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29u
c3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGdlbmVyYXRvciwgYXJndW1lbnQpCiAKLSAg
ICBVU0VTKE9wSXRlcmF0b3JPcGVuLCBzeW1ib2xJdGVyYXRvciwgaXRlcmFibGUpCi0gICAgVVNF
UyhPcEl0ZXJhdG9yTmV4dCwgaXRlcmF0b3IsIG5leHQsIGl0ZXJhYmxlKQorICAgIGNhc2Ugb3Bf
aXRlcmF0b3Jfb3BlbjogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JPcGVuPigpOworICAgICAgICBmdW5jdG9yKE9wSXRlcmF0b3JPcGVuOjpzeW1i
b2xDYWxsLCBieXRlY29kZS5tX3N5bWJvbEl0ZXJhdG9yKTsKKyAgICAgICAgZnVuY3RvcihPcEl0
ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbCwgYnl0ZWNvZGUubV9pdGVyYWJsZSk7CisgICAgICAgIGZ1
bmN0b3IoT3BJdGVyYXRvck9wZW46OmdldE5leHQsIGJ5dGVjb2RlLm1faXRlcmF0b3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Cisg
ICAgICAgIHVzZUF0RWFjaENoZWNrcG9pbnQoYnl0ZWNvZGUsIGJ5dGVjb2RlLm1faXRlcmF0b3Ip
OworICAgICAgICBmdW5jdG9yKE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dCwgYnl0ZWNvZGUu
bV9uZXh0KTsKKyAgICAgICAgZnVuY3RvcihPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQsIGJ5
dGVjb2RlLm1faXRlcmFibGUpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgY2FzZSBv
cF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6CiAgICAgICAgIGhhbmRsZU5ld0FycmF5TGlrZShpbnN0
cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCkpOwpAQCAtMjc5LDcgKzMxMSw3IEBA
IHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BTdHJjYXQ+KCk7CiAgICAgICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9zcmMu
b2Zmc2V0KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9jb3VudDsg
aSsrKQotICAgICAgICAgICAgZnVuY3RvcihWaXJ0dWFsUmVnaXN0ZXIgeyBiYXNlIC0gaSB9KTsK
KyAgICAgICAgICAgIGZ1bmN0b3Iobm9DaGVja3BvaW50cywgVmlydHVhbFJlZ2lzdGVyIHsgYmFz
ZSAtIGkgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMwMiw3ICszMzQsNyBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIH0KIH0KIAotdm9pZCBjb21wdXRlRGVmc0ZvckJ5
dGVjb2RlSW5kZXhJbXBsKHVuc2lnbmVkIG51bVZhcnMsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3RvcikK
K3ZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0aW9uPHZvaWQoQ2hlY2tw
b2ludCwgVmlydHVhbFJlZ2lzdGVyKT4mIGZ1bmN0b3IpCiB7CiAgICAgc3dpdGNoIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3Bfd2lkZTE2OgpAQCAtNDEyLDEwICs0NDQs
MjMgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKHVuc2lnbmVkIG51bVZh
cnMsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnUKICAgICBERUZTKE9wTmV3QXN5bmNHZW5lcmF0
b3JGdW5jRXhwLCBkc3QpCiAgICAgREVGUyhPcE5ld0FzeW5jRnVuYywgZHN0KQogICAgIERFRlMo
T3BOZXdBc3luY0Z1bmNFeHAsIGRzdCkKLSAgICBERUZTKE9wQ2FsbFZhcmFyZ3MsIGRzdCkKLSAg
ICBERUZTKE9wVGFpbENhbGxWYXJhcmdzLCBkc3QpCisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6
IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdz
PigpOworICAgICAgICBmdW5jdG9yKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBieXRlY29kZS5t
X2RzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFy
YXJnczogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVGFpbENh
bGxWYXJhcmdzPigpOworICAgICAgICBmdW5jdG9yKE9wVGFpbENhbGxWYXJhcmdzOjptYWtlQ2Fs
bCwgYnl0ZWNvZGUubV9kc3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3Bf
Y29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCk7CisgICAgICAgIGZ1bmN0b3IoT3BDb25zdHJ1Y3RW
YXJhcmdzOjptYWtlQ2FsbCwgYnl0ZWNvZGUubV9kc3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgREVGUyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgZHN0KQotICAgIERFRlMo
T3BDb25zdHJ1Y3RWYXJhcmdzLCBkc3QpCiAgICAgREVGUyhPcEdldEZyb21TY29wZSwgZHN0KQog
ICAgIERFRlMoT3BDYWxsLCBkc3QpCiAgICAgREVGUyhPcFRhaWxDYWxsLCBkc3QpCkBAIC01MDEs
MTIgKzU0NiwyOCBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWdu
ZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogCiAgICAgREVGUyhPcENhdGNo
LCBleGNlcHRpb24sIHRocm93blZhbHVlKQogCi0gICAgREVGUyhPcEl0ZXJhdG9yT3BlbiwgaXRl
cmF0b3IsIG5leHQpCi0gICAgREVGUyhPcEl0ZXJhdG9yTmV4dCwgZG9uZSwgdmFsdWUpCisgICAg
Y2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisKKyAgICAgICAgZnVuY3RvcihPcEl0ZXJhdG9y
T3Blbjo6c3ltYm9sQ2FsbCwgYnl0ZWNvZGUubV9pdGVyYXRvcik7CisgICAgICAgIGZ1bmN0b3Io
T3BJdGVyYXRvck9wZW46OmdldE5leHQsIGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKworICAgICAgICBm
dW5jdG9yKE9wSXRlcmF0b3JOZXh0OjpnZXREb25lLCBieXRlY29kZS5tX2RvbmUpOworICAgICAg
ICAvLyBXZSBuZWVkIHRvIGNsYWltIHdlIHNldCBtX3ZhbHVlIGhlcmUgYmVjYXVzZSB3ZSBjb3Vs
ZCBlYXJseSBleGl0IGZyb20gdGhlIGJ5dGVjb2RlIGlmIHdlIGFyZSBkb25lLgorICAgICAgICBm
dW5jdG9yKE9wSXRlcmF0b3JOZXh0OjpnZXREb25lLCBieXRlY29kZS5tX3ZhbHVlKTsKKworICAg
ICAgICBmdW5jdG9yKE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZSwgYnl0ZWNvZGUubV92YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBjYXNlIG9wX2VudGVyOiB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bVZhcnM7IGktLTspCi0gICAgICAgICAgICBmdW5jdG9yKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iobm9DaGVja3Bv
aW50cywgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZVVzZURlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNl
RGVmLmgKaW5kZXggYjNiMDBhOTkyMzczM2QzMWFjODRlNWQ4ODJkYTkwM2U5YmVkYzdmYi4uOWI0
NDE3MWQ1OTZjM2NmNDNlMjc2OGE0MjNmMmY0ZDgyNzNhYjVlMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKQEAgLTMyLDIxICszMiwyMyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJ
bXBsKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBGdW5jdGlvbjx2
b2lkKFZpcnR1YWxSZWdpc3Rlcik+Jik7Ci12b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRl
eEltcGwodW5zaWduZWQsIGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgRnVuY3Rpb248dm9pZChW
aXJ0dWFsUmVnaXN0ZXIpPiYpOwordm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBs
KFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBGdW5jdGlvbjx2b2lk
KENoZWNrcG9pbnQsIFZpcnR1YWxSZWdpc3Rlcik+Jik7Cit2b2lkIGNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVJbmRleEltcGwodW5zaWduZWQsIGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgRnVuY3Rp
b248dm9pZChDaGVja3BvaW50LCBWaXJ0dWFsUmVnaXN0ZXIpPiYpOwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCbG9jaz4KLXZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KEJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgY29uc3QgRnVuY3Rpb248dm9p
ZChWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3RvcikKK3ZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29k
ZUluZGV4KEJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
Y29uc3QgRnVuY3Rpb248dm9pZChDaGVja3BvaW50LCBWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3Rv
cikKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwot
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9lbnRlciAmJiAoY29kZUJsb2NrLT53YXNDb21waWxlZFdp
dGhEZWJ1Z2dpbmdPcGNvZGVzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpKSAmJiBjb2RlQmxv
Y2stPnNjb3BlUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpCi0gICAgICAgIGZ1bmN0b3IoY29kZUJsb2Nr
LT5zY29wZVJlZ2lzdGVyKCkpOworICAgIGlmIChvcGNvZGVJRCAhPSBvcF9lbnRlciAmJiAoY29k
ZUJsb2NrLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgfHwgY29kZUJsb2NrLT51
c2VzRXZhbCgpKSAmJiBjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKS5pc1ZhbGlkKCkpIHsKKyAg
ICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBpbnN0cnVjdGlvbi0+bnVtYmVyT2ZD
aGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KQorICAgICAgICAgICAgZnVuY3RvcihjaGVja3Bv
aW50LCBjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSk7CisgICAgfQogCiAgICAgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4SW1wbChjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSwgaW5zdHJ1
Y3Rpb24sIGZ1bmN0b3IpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaz4KLXZvaWQgY29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KEJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYg
ZnVuY3RvcikKK3ZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KEJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZChD
aGVja3BvaW50LCBWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3RvcikKIHsKICAgICBjb21wdXRlRGVm
c0ZvckJ5dGVjb2RlSW5kZXhJbXBsKGNvZGVCbG9jay0+bnVtVmFycygpLCBpbnN0cnVjdGlvbiwg
ZnVuY3Rvcik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCmluZGV4IDkxODA1YzQyNzgyZTRkYTc4N2U2Mzk2ZTYwMzhkYWM5ZDgzMjY4NDguLjQxNmIz
NDFkMDNhNWFhNzE5YzcwMDJkZDJiYjQ1MDY2ZjBjZGUyZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVk
ZSAiQmFzaWNCbG9ja0xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVEdW1wZXIuaCIKLSNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMu
aCIKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0
cnVjdHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCkBAIC0xOTIzLDcgKzE5MjMs
NyBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRl
Y29kZUluZGV4U2xvdyhjb25zdCBPcENhdGNoJgogICAgIC8vIGludG8gdGhlIERGRy4KIAogICAg
IGF1dG8gbmV4dE9mZnNldCA9IGluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLm5leHQo
KS5vZmZzZXQoKTsKLSAgICBGYXN0Qml0VmVjdG9yIGxpdmVMb2NhbHMgPSBieXRlY29kZUxpdmVu
ZXNzLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleCh0aGlzLCBCeXRlY29kZUluZGV4KG5l
eHRPZmZzZXQpKTsKKyAgICBGYXN0Qml0VmVjdG9yIGxpdmVMb2NhbHMgPSBieXRlY29kZUxpdmVu
ZXNzLmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24odGhpcywgQnl0ZWNvZGVJbmRleChuZXh0
T2Zmc2V0KSk7CiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gbGl2ZU9wZXJhbmRzOwogICAg
IGxpdmVPcGVyYW5kcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxpdmVMb2NhbHMuYml0Q291bnQo
KSk7CiAgICAgbGl2ZUxvY2Fscy5mb3JFYWNoU2V0Qml0KFsmXSAodW5zaWduZWQgbGl2ZUxvY2Fs
KSB7CkBAIC0zMTA5LDcgKzMxMDksNyBAQCB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogewog
ICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBk
aXJlY3RseSBmcm9tIHNjcmF0Y2ggc28gaXQgZG9lc24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3Rw
cmludC4KICAgICAKLSAgICBGYXN0Qml0VmVjdG9yIGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRM
aXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgodGhpcywgQnl0ZWNvZGVJbmRleCgwKSk7CisgICAg
RmFzdEJpdFZlY3RvciBsaXZlQXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0
cnVjdGlvbih0aGlzLCBCeXRlY29kZUluZGV4KDApKTsKICAgICAKICAgICBpZiAobGl2ZUF0SGVh
ZC5udW1CaXRzKCkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX251bUNhbGxlZUxvY2FscykpIHsK
ICAgICAgICAgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAppbmRleCA3OTE0NTNm
M2ZkNzIzNDM2ZWUwZWQ1MTkwZjBiYzI3ZDdkYTIzMDViLi43OTg2MmI4YTY3MDE4NzFjOWIzZGIz
NjMwZjg2NmVkZDNhOWQwNmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaApAQCAtMzUsMTggKzM1LDE5IEBAIGNsYXNz
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKIGNsYXNzIENvZGVCbG9jazsKIAogLy8gTm90ZTog
RnVsbCBieXRlY29kZSBsaXZlbmVzcyBkb2VzIG5vdCB0cmFjayBhbnkgaW5mb3JtYXRpb24gYWJv
dXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBzLgotLy8gSWYgeW91IHdhbnQgdG1wIGxpdmVuZXNzIGZv
ciBhIGNoZWNrcG9pbnQgYXNrIGxpdmVuZXNzRm9yQ2hlY2twb2ludC4KKy8vIElmIHlvdSB3YW50
IHRtcCBsaXZlbmVzcyBmb3IgYSBjaGVja3BvaW50IGFzayB0bXBMaXZlbmVzc0ZvckNoZWNrcG9p
bnQuCiBjbGFzcyBGdWxsQnl0ZWNvZGVMaXZlbmVzcyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgZ2V0TGl2ZW5lc3MoQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQp
IGNvbnN0CiAgICAgewotICAgICAgICAvLyBGSVhNRTogV2hhdCBzaG91bGQgdGhpcyBkbyB3aGVu
IHdlIGhhdmUgY2hlY2twb2ludHM/CisgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkg
YWJvdXQgb3ZlcmZsb3dpbmcgaW50byB0aGUgbmV4dCBieXRlY29kZW9mZnNldCBpbiBvdXIgdmVj
dG9ycyBiZWNhdXNlIHdlCisgICAgICAgIC8vIHN0YXRpYyBhc3NlcnQgdGhhdCBieXRlY29kZSBs
ZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgY2hlY2twb2ludHMgaW4gQnl0ZWNv
ZGVTdHJ1Y3RzLmgKICAgICAgICAgc3dpdGNoIChwb2ludCkgewogICAgICAgICBjYXNlIExpdmVu
ZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlOgotICAgICAgICAgICAgcmV0dXJuIG1fYmVm
b3JlVXNlVmVjdG9yW2J5dGVjb2RlSW5kZXgub2Zmc2V0KCldOworICAgICAgICAgICAgcmV0dXJu
IG1fdXNlc0JlZm9yZVt0b0luZGV4KGJ5dGVjb2RlSW5kZXgpXTsKICAgICAgICAgY2FzZSBMaXZl
bmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkFmdGVyVXNlOgotICAgICAgICAgICAgcmV0dXJuIG1fYWZ0
ZXJVc2VWZWN0b3JbYnl0ZWNvZGVJbmRleC5vZmZzZXQoKV07CisgICAgICAgICAgICByZXR1cm4g
bV91c2VzQWZ0ZXJbdG9JbmRleChieXRlY29kZUluZGV4KV07CiAgICAgICAgIH0KICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC01OSwxMCArNjAsMTIgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOwogICAgIAorICAgIHN0YXRpYyBzaXplX3QgdG9JbmRleChCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpIHsgcmV0dXJuIGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKTsgfQorCiAgICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3Mgdmll
dyBtZWNoYW5pc20gdG8gbWFrZSB0aGVtIGNvbXBhY3QuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDQyNzxQYXN0ZT4KLSAgICBWZWN0b3I8RmFzdEJp
dFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYmVmb3JlVXNlVmVjdG9yOwotICAg
IFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRlclVz
ZVZlY3RvcjsKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA0NDI3CisgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX3VzZXNCZWZvcmU7CisgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX3VzZXNBZnRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAppbmRleCAzZDcwY2Q1NDNl
Y2ZhZTkwMjI1MDI5NjAxYTBkNDA1ZWM2NzFiMmQwLi5mNjNhZDI5ZjIwZjUxZTZjNjA5ZmNjYjlk
YmNiNTU4OTZlMzIyZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdHJ1Y3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb24uaApAQCAtMzksNiArMzksNyBAQCBzdHJ1Y3QgSlNPcGNvZGVUcmFpdHMgewogICAg
IHN0YXRpYyBjb25zdGV4cHIgT3Bjb2RlSUQgd2lkZTMyID0gb3Bfd2lkZTMyOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQqIG9wY29kZUxlbmd0aHMgPSA6OkpTQzo6b3Bjb2Rl
TGVuZ3RoczsKICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIGNvbnN0KiBvcGNvZGVO
YW1lcyA9IDo6SlNDOjpvcGNvZGVOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2hl
Y2twb2ludENvdW50VGFibGUgPSBieXRlY29kZUNoZWNrcG9pbnRDb3VudFRhYmxlOwogfTsKIAog
c3RydWN0IFdhc21PcGNvZGVUcmFpdHMgewpAQCAtNTAsNiArNTEsNyBAQCBzdHJ1Y3QgV2FzbU9w
Y29kZVRyYWl0cyB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBPcGNvZGVJRCB3aWRlMzIgPSB3YXNt
X3dpZGUzMjsKICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkKiBvcGNvZGVMZW5n
dGhzID0gd2FzbU9wY29kZUxlbmd0aHM7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFy
KiBjb25zdCogb3Bjb2RlTmFtZXMgPSB3YXNtT3Bjb2RlTmFtZXM7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBhdXRvIGNoZWNrcG9pbnRDb3VudFRhYmxlID0gd2FzbUNoZWNrcG9pbnRDb3VudFRhYmxl
OwogfTsKIAogCkBAIC0xMjIsNiArMTI0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9w
Y29kZUlEPFRyYWl0cz4oKSA8IFRyYWl0czo6bnVtYmVyT2ZCeXRlY29kZXNXaXRoQ2hlY2twb2lu
dHM7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzID0gSlNPcGNvZGVUcmFp
dHM+CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGVja3BvaW50cygpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIWhhc0NoZWNrcG9pbnRzPFRyYWl0cz4oKSkKKyAgICAgICAgICAgIHJldHVybiAx
OworICAgICAgICByZXR1cm4gVHJhaXRzOjpjaGVja3BvaW50Q291bnRUYWJsZVtvcGNvZGVJRDxU
cmFpdHM+KCldOworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9IEpTT3Bj
b2RlVHJhaXRzPgogICAgIGludCBzaXplU2hpZnRBbW91bnQoKSBjb25zdAogICAgIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKaW5kZXggZTY0NmQwNGFiOTM5ZmZiNzY3MjRjYzBhOGQ0NTFmMjhkYTNmMGVkMi4u
ZGE4NGJmN2Q2NWE5MDk2ZjMxYjc3OGZiOThhYWNmYWVkYWE3ZDFkOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKQEAgLTUyMTUsNyArNTIxNSw3IEBAIHZvaWQgRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyCiAgICAgZm9y
ICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyBpc1ZhbGlkKCkg
JiYgb2Zmc2V0IDwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0OykgewogICAgICAgICBhdXRvIGluc3Ry
dWN0aW9uID0gZ2VuZXJhdG9yLmluc3RydWN0aW9ucygpLmF0KG9mZnNldCk7CiAgICAgICAgIEFT
U0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wRW50ZXI+KCkpOwotICAgICAgICBjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbi5wdHIoKSwgWyZdIChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbi5wdHIoKSwgWyZdIChDaGVja3BvaW50LCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgaWYgKGxvY2FsKCktPnZpcnR1YWxSZWdpc3Rl
cigpID09IG9wZXJhbmQpCiAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAgICB9
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAppbmRleCA4MGNk
NzNkZTY2MzUxNjNmNTJjYjY4YWQ5OWIyZjViNTg4YmUxYzQ0Li44ZDc4NTk1MjQwZWNhOTZmODJj
ZDk1Yjg0ZGUzYjhmM2RhM2IzM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZvckFsbEtpbGxzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
b3JBbGxLaWxscy5oCkBAIC03OSwxOCArNzksMjEgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5k
cyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QK
ICAgICAgICAgICAgIEFTU0VSVChiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSAh
PSBhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKTsKICAgICAgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSA9PSBhZnRlci5i
eXRlY29kZUluZGV4KCkub2Zmc2V0KCkgfHwgbm9kZUFmdGVyLT5vcCgpID09IEV4aXRPSyB8fCBu
b2RlQWZ0ZXItPm9wKCkgPT0gSW52YWxpZGF0aW9uUG9pbnQsICJXaGVuIHRoZSBERkcgZG9lcyBj
b2RlIG1vdGlvbiBpdCBzaG91bGQgY2hhbmdlIHRoZSBmb3JFeGl0IG9yaWdpbiB0byBtYXRjaCB0
aGUgc3Vycm91bmRpbmcgYnl0ZWNvZGVzLiIpOwogCi0gICAgICAgICAgICBhdXRvIGNoZWNrcG9p
bnRMaXZlQmVmb3JlID0gbGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGJlZm9yZS5i
eXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgYXV0byBjaGVja3BvaW50TGl2ZUFmdGVyID0g
bGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSk7
CisgICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQo
KmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBhdXRvIGxp
dmVBZnRlciA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBhZnRlci5ieXRl
Y29kZUluZGV4KCkpOworICAgICAgICAgICAgbGl2ZUFmdGVyLmludmVydCgpOworICAgICAgICAg
ICAgbGl2ZUJlZm9yZS5maWx0ZXIobGl2ZUFmdGVyKTsKIAotICAgICAgICAgICAgRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7
Ci0gICAgICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQWZ0ZXIgPSBmdWxsTGl2ZW5l
c3MuZ2V0TGl2ZW5lc3MoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9u
UG9pbnQ6OkJlZm9yZVVzZSk7CisgICAgICAgICAgICBsaXZlQmVmb3JlLmZvckVhY2hTZXRCaXQo
WyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQo
YmVmb3JlSW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kOjp0bXAodG1wKSkpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50
KCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBtb3Zpbmcgb24gdG8gYW5vdGhlciBieXRlY29k
ZSwgYWxsIHRlbXBzIHNob3VsZCBiZSBkZWFkIG5vdy4KKyAgICAgICAgICAgIGF1dG8gbGl2ZUJl
Zm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBiZWZvcmUuYnl0ZWNv
ZGVJbmRleCgpKTsKIAotICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiBjaGVja3Bv
aW50TGl2ZUJlZm9yZSkgewotICAgICAgICAgICAgICAgIGlmIChjaGVja3BvaW50TGl2ZUFmdGVy
LmNvbnRhaW5zKG9wZXJhbmQpIHx8ICghb3BlcmFuZC5pc1RtcCgpICYmIGxpdmVBZnRlcltvcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpXSkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGJlZm9yZUlubGlu
ZUNhbGxGcmFtZSwgb3BlcmFuZCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRtcCkg
eworICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGJlZm9yZUlubGluZUNhbGxG
cmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkpKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAK
ICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVu
ZXNzRm9yKGNvZGVCbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmlu
ZGV4IDUwMzQxMjAxZWJkMjBmMzZiZDM2ODAzNjllMjkzOGZmNzQzMjMyMTAuLjhlODQ2Y2JlOWQ0
ZDFjN2UxNjliY2Q4NmY3YTc1MDQ0YTkxZDhmNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCkBAIC0xMTUyLDggKzExNTIsOCBAQCBib29sIEdyYXBoOjppc0xpdmVJbkJ5
dGVjb2RlKE9wZXJhbmQgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAg
ICAgaWYgKCFjb2RlQmxvY2stPm51bVRtcHMoKSB8fCBvcGVyYW5kSW5kZXggPCB0bXBPZmZzZXQp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGF1dG8gbGl2ZSA9IGxp
dmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUlu
ZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIGxpdmUuY29udGFpbnMob3BlcmFuZCk7CisgICAg
ICAgICAgICBhdXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2Nr
LCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIGJp
dE1hcC5nZXQob3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsKICAgICAgICAgfQogCiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gY29kZU9y
aWdpblB0ci0+c3RhY2tPZmZzZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApp
bmRleCA1MmIzNzE3NDNhZDg2YTI4YmFkNjJkMWVlYTljMGRlMTQ3ODgwMDUzLi44NjM2MjI3ZjM5
NDgzMzVkYjNkODQwZTgxZDNmYTBjNWNiYmE3ZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCkBAIC05MDQsOSArOTA0LDEwIEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgaWYg
KGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKICAgICAgICAg
ICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1UbXBzKCkpOwotICAgICAgICAgICAgICAgIGF1
dG8gbGl2ZSA9IGxpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRy
LT5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5k
IDogbGl2ZSkKLSAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoaW5saW5l
Q2FsbEZyYW1lLCBvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgYXV0byBsaXZlVG1wcyA9IHRt
cExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29k
ZUluZGV4KCkpOworICAgICAgICAgICAgICAgIGxpdmVUbXBzLmZvckVhY2hTZXRCaXQoWyZdIChz
aXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGlu
bGluZUNhbGxGcmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkpKTsKKyAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRS
ZW1vdmFsUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVt
b3ZhbFBoYXNlLmNwcAppbmRleCBkNDMwN2VkODczMDZmNDQ2NjIwYjc4MWIwZjAyZDVjYTQ1M2M5
YmFiLi5jYzhmOWUxNzVkZmE5Y2E4YzA4ZTVjNzIwMzhjNjQ0ZjFkZWI3YzJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAK
QEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgICAgICAKICAg
ICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBMb2NhbHM6ICIsIG1fc3RhdGUsICJcbiIpOworICAgICAgICAg
ICAgZGF0YUxvZygiICAgIExvY2FscyBhdCAiLCBibG9jay0+dGVybWluYWwoKS0+b3JpZ2luLmZv
ckV4aXQsICI6ICIsIG1fc3RhdGUsICJcbiIpOwogICAgICAgICAKICAgICAgICAgLy8gQXNzdW1l
IHRoYXQgYmxvY2tzIGFmdGVyIHVzIGV4aXQuCiAgICAgICAgIGN1cnJlbnRFcG9jaC5idW1wKCk7
CkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBNb3ZIaW50KSB7CiAgICAgICAgICAgICAgICAgRXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUu
b3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKERG
R01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgIEF0ICIsIG5vZGUsICI6IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gs
ICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBBdCAiLCBub2RlLCAiICgiLCBub2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgIik6
IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2FsRXBvY2ggPT0gY3Vy
cmVudEVwb2NoKSB7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKFpvbWJpZUhpbnQpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVk
Z2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCmluZGV4IDcxNjFmYmYyNjhm
MzUwMTkyOTc4YTJmODUyZDUxY2M4YjEwOWU3MzUuLjVhZGU5Yzk1YTA0ZWM2NTRiZTI5MmVhZDEx
NTU0Yjg0OWZhZTY5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcApAQCAt
NzU4LDcgKzc1OCw3IEBAIHZvaWQgUGxhbjo6Y2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3Nh
cnkoKQogICAgICAgICByZXR1cm47CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0gbV9j
b2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0gICAgRmFzdEJpdFZlY3RvciBsaXZlbmVzcyA9IGFs
dGVybmF0aXZlLT5saXZlbmVzc0FuYWx5c2lzKCkuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUlu
ZGV4KGFsdGVybmF0aXZlLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgRmFzdEJpdFZl
Y3RvciBsaXZlbmVzcyA9IGFsdGVybmF0aXZlLT5saXZlbmVzc0FuYWx5c2lzKCkuZ2V0TGl2ZW5l
c3NJbmZvQXRJbnN0cnVjdGlvbihhbHRlcm5hdGl2ZSwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgp
OwogCiAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IG1fbXVzdEhhbmRsZVZhbHVlcy5udW1iZXJP
ZkxvY2FscygpOyBsb2NhbC0tOykgewogICAgICAgICBpZiAoIWxpdmVuZXNzW2xvY2FsXSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKaW5kZXggODIzNzRiN2ZiZTg2
ZDU3ODhiM2E0MDU4MTU4YTg5OGQ2YTZhMjA4Yy4uMDVkMDk4ODA2OTA2ZWE4MjIzMDJkYzIxMDE2
MmFjOGUwOWU2ODZkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9PcGNvZGUucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUu
cmIKQEAgLTEzMCwxNSArMTMwLDE4IEBAIGNsYXNzIE9wY29kZQogICAgICAgICA8PC1FT0YKIHN0
cnVjdCAje2NhcGl0YWxpemVkX25hbWV9IDogcHVibGljIEluc3RydWN0aW9uIHsKICAgICAje29w
Y29kZUlEfQorICAgICN7bGVuZ3RoVmFsdWV9CiAgICAgI3t0ZW1wc30KICAgICAje2NoZWNrcG9p
bnRWYWx1ZXN9CiAKKwogI3tlbWl0dGVyfQogI3tkdW1wZXJ9CiAje2NvbnN0cnVjdG9yc30KICN7
c2V0dGVyc30je21ldGFkYXRhX3N0cnVjdF9hbmRfYWNjZXNzb3J9CiAje21lbWJlcnN9CiB9Owor
I3tjaGVja3BvaW50U2l6ZUFzc2VydH0KIEVPRgogICAgIGVuZAogCkBAIC0xNDYsMTIgKzE0OSwy
MiBAQCBFT0YKICAgICAgICAgInN0YXRpYyBjb25zdGV4cHIgI3tvcGNvZGVJRFR5cGV9IG9wY29k
ZUlEID0gI3tuYW1lfTsiCiAgICAgZW5kCiAKKyAgICBkZWYgbGVuZ3RoVmFsdWUKKyAgICAgICAg
InN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGxlbmd0aCA9ICN7bGVuZ3RofTsiCisgICAgZW5kCisK
ICAgICBkZWYgY2hlY2twb2ludFZhbHVlcwogICAgICAgICByZXR1cm4gaWYgQGNoZWNrcG9pbnRz
Lm5pbD8KIAogICAgICAgICBbImVudW0gQ2hlY2twb2ludHMgOiB1aW50OF90IHsiXS5jb25jYXQo
Y2hlY2twb2ludHMubWFweyB8Y2hlY2twb2ludHwgIiAgICAgICAgI3tjaGVja3BvaW50fSwiIH0p
LmNvbmNhdChbIiAgICAgICAgbnVtYmVyT2ZDaGVja3BvaW50cywiLCAiICAgIH07Il0pLmpvaW4o
IlxuIikKICAgICBlbmQKIAorICAgIGRlZiBjaGVja3BvaW50U2l6ZUFzc2VydAorICAgICAgICBy
ZXR1cm4gaWYgQGNoZWNrcG9pbnRzLm5pbD8KKworICAgICAgICAic3RhdGljX2Fzc2VydCgje2Nh
cGl0YWxpemVkX25hbWV9OjpsZW5ndGggPiAje2NhcGl0YWxpemVkX25hbWV9OjpudW1iZXJPZkNo
ZWNrcG9pbnRzLCBcIkZ1bGxCeXRlY29kZUxpdmVzcyByZWxpZXMgb24gdGhlIGxlbmd0aCBvZiAj
e2NhcGl0YWxpemVkX25hbWV9IGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGNoZWNr
cG9pbnRzXCIpOyIKKyAgICBlbmQKKwogICAgIGRlZiB0ZW1wcwogICAgICAgICByZXR1cm4gaWYg
QHRtcHMubmlsPwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L1NlY3Rpb24ucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIK
aW5kZXggZjgzODBlZDU3NWQzMTNjNmVhMDZhYjVkNzJjMjVhODY3NzZkOWNjOC4uNzJkMGM4YjQw
ZjEwMmJhMmNjYjg3ZWUzNTRkZWRiM2I0MTMyNTM3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgpAQCAtODQsMTMgKzg0LDE2IEBAIGNsYXNzIFNlY3Rpb24K
IAogICAgICAgaWYgY29uZmlnWzplbWl0X2luX3N0cnVjdHNfZmlsZV0KICAgICAgICAgICBpID0g
MAorICAgICAgICAgIG91dC53cml0ZSgic3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCAje2NvbmZp
Z1s6bWFjcm9fbmFtZV9jb21wb25lbnRdLmRvd25jYXNlfUNoZWNrcG9pbnRDb3VudFRhYmxlW10g
PSB7XG4iKQogICAgICAgICAgIHdoaWxlIHRydWUKICAgICAgICAgICAgICAgaWYgIW9wY29kZXNb
aV0uY2hlY2twb2ludHMKLSAgICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAgICAwLCAvLyB0aGlzIHVudXNlZCBlbnRyeSBpcyBuZWVkZWQgc2lu
Y2UgTVNWQyB3b24ndCBjb21waWxlIGVtcHR5IGFycmF5c1xuIgorICAgICAgICAgICAgICAgICAg
b3V0IDw8ICJ9O1xuXG4iCiAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiNkZWZpbmUgTlVNQkVS
X09GXyN7Y29uZmlnWzptYWNyb19uYW1lX2NvbXBvbmVudF19X1dJVEhfQ0hFQ0tQT0lOVFMgI3tp
fVxuIgogICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgZW5kCiAKKyAgICAg
ICAgICAgICAgb3V0LndyaXRlKCIgICAgI3tvcGNvZGVzW2ldLmNoZWNrcG9pbnRzLmxlbmd0aH0s
XG4iKQogICAgICAgICAgICAgICBpICs9IDEKICAgICAgICAgICBlbmQKICAgICAgICAgICBvdXQg
PDwgIlxuIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403644</attachid>
            <date>2020-07-06 17:21:28 -0700</date>
            <delta_ts>2020-07-07 12:11:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213566-20200706172127.patch</filename>
            <type>text/plain</type>
            <size>54552</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzOTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
YTU0ZjdkNmIyMTZiNWYyNTFlZDAxOWY0MzM0OGVmZWNhNjk5ZmNjLi5kYWZhNTM0Zjc0YTNlNDky
NDk4OTAxMTRkNTRjZmEzODRjMWI3NTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NCBAQAorMjAyMC0wNy0wNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBCeXRlY29kZSBVc2VEZWYgc2hvdWxkIGJlIGF3YXJlIG9mIGNoZWNr
cG9pbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTM1NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
cmV2aW91c2x5LCB3ZSB0cmllZCB0byBzb2x2ZSB0ZWFjaGluZyBERkcgYWJvdXQgdXNlcyBhbmQg
ZGVmcyBvZgorICAgICAgICBsb2NhbHMgYWNyb3NzIGNoZWNrcG9pbnRzIGJ5IGFza2luZyB3aGF0
IGxvY2FscyB3ZXJlIGRlZidkIGF0IHNvbWUKKyAgICAgICAgY2hlY2twb2ludC4gSG93ZXZlciwg
dGhpcyB3YXMgc3VidGx5IHdyb25nIGJlY2F1c2Ugd2UgY291bGRuJ3QKKyAgICAgICAgcmVwb3J0
IGFueSB1c2VzIGF0IHN1YnNlcXVlbnQgY2hlY2twb2ludHMgc28gREZHIHRob3VnaHQgdGhlCisg
ICAgICAgIGxvY2FsIHdhcyBkZWFkIGltbWVkaWF0ZWx5IGFmdGVyIGl0cyBiaXJ0aC4KKworICAg
ICAgICBUaGlzIHBhdGNoIHJldmVydHMgdGhhdCBjaGFuZ2UgYW5kIGluc3RlYWQgdGVhY2hlcyBC
eXRlY29kZVVzZURlZgorICAgICAgICBhYm91dCBjaGVja3BvaW50cy4gUmlnaHQgbm93LCBCeXRl
Y29kZVVzZURlZiBvbmx5IGtub3dzIGFib3V0CisgICAgICAgIGxvY2FscyBhdCBjaGVja3BvaW50
cyBidXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkgdGVhY2ggaXQgYWJvdXQgdG1wcworICAgICAgICBh
dCB3ZWxsLgorCisgICAgICAgIFNpbmNlIHRoZSB2ZWN0b3JzIGNvbnRhaW5pbmcgb3VyIGxpdmVu
ZXNzIGJpdG1hcHMgd2VyZSBhbHJlYWR5CisgICAgICAgIHNwYXJzZSAodGhleSBhcmUgaW5kZXhl
ZCBieSB0aGUgYnl0ZWNvZGUgb2Zmc2V0KSB3ZSBjYW4gcmV1c2UgdGhlCisgICAgICAgIGdhcHMg
dG8gaG9sZCBvdXIgY2hlY2twb2ludCBsaXZlbmVzcyBpbmZvcm1hdGlvbi4gVG8gbWFrZSBzdXJl
IHdlCisgICAgICAgIGRvbid0IG92ZXJsYXAgYmV0d2VlbiB0aGUgbmV4dCBieXRlY29kZSBhbmQg
YSBjaGVja3BvaW50IGZvciB0aGUKKyAgICAgICAgY3VycmVudCBieXRlY29kZSB0aGVyZSBpcyBu
b3cgYSBzdGF0aWMgYXNzZXJ0IHRoYXQgdGhlIGxlbmd0aCBvZgorICAgICAgICB0aGUgYnl0ZWNv
ZGUgaXMgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgY2hlY2twb2ludHMuIFRoaXMKKyAgICAg
ICAgYXNzdW1wdGlvbiBpcyBhbHJlYWR5IHRydWUgZm9yIGV4aXN0aW5nIGJ5dGVjb2RlcyB3aXRo
IGNoZWNrcG9pbnRzIChhbmQKKyAgICAgICAgbGlrZWx5IHRvIGJlIHRydWUgZm9yIGZ1dHVyZSBv
bmVzIGFueXdheSkuCisKKyAgICAgICAgTWFueSBvZiB0aGUgQnl0ZWNvZGVMaXZlbmVzc1Byb3Bl
Z2F0aW9uIGZ1bmN0aW9ucyBoYXZlIGJlZW4KKyAgICAgICAgcmVuYW1lZCB0byByZWZsZWN0IHRo
YXQgdGhleSBvcGVyYXRlIG92ZXIgdGhlIGZ1bGwgaW5zdHJ1Y3Rpb24sCisgICAgICAgIGluY2x1
ZGluZyBjaGVja3BvaW50cywgcmF0aGVyIHRoYW4ganVzdCB0aGUgQnl0ZWNvZGVJbmRleCBwYXNz
ZWQuCisKKyAgICAgICAgTGFzdGx5LCB0aGlzIHBhdGNoIG1ha2VzIGEgc3BlY3VsYXRpdmUgZml4
IHRvIGZvckFsbEtpbGxlZE9wZXJhbmRzIHdoZXJlIHdlCisgICAgICAgIHdvdWxkbid0IHJlcG9y
dCB0aGF0IGFsbCB0bXBzIGRpZSBhdCB0aGUgZW5kIG9mIGVhY2ggYnl0ZWNvZGUuIEkgY2FuJ3Qg
dGhpbmsKKyAgICAgICAgb2YgYSBjYXNlIHdoZXJlIHRoaXMgd291bGQgYnJlYWsgdGhpbmdzIGJ1
dCBpdCdzIHByb2JhYmx5IGdvb2QgaHlnaWVuZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6R2VuZXJhdG9yTGl2ZW5l
c3NBbmFseXNpczo6cnVuKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OkJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUluZGV4OjpjaGVja3BvaW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVJbmRleDo6d2l0aENoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUlu
ZGV4OjpwYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMu
Y3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxs
TGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBS
ZXN1bHRzKToKKyAgICAgICAgKEpTQzo6dG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVj
b2RlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsaXZlbmVzc0ZvckNoZWNrcG9pbnQp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5m
b0F0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9u
OjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXhEZWYpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVu
ZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZSk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlSW5F
eGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0
aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVu
ZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rp
b24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVM
b2NhbExpdmVuZXNzRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJv
cGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25EZWYpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVy
SW5zdHJ1Y3Rpb25Vc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJbkV4Y2VwdGlvbkhhbmRsZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1
dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUlu
ZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHA6Cisg
ICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAgICAgICAo
SlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBieXRlY29k
ZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2Rl
SW5kZXgpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6dmFsaWRhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0Z1bGxC
eXRlY29kZUxpdmVuZXNzLmg6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpn
ZXRMaXZlbmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjp0
b0luZGV4KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAoSlND
OjpCYXNlSW5zdHJ1Y3Rpb246Om51bWJlck9mQ2hlY2twb2ludHMgY29uc3QpOgorICAgICAgICAq
IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6ZmluYWxpemUpOgorICAgICAgICAqIGRmZy9ERkdGb3JBbGxLaWxscy5oOgorICAg
ICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE9wZXJhbmRzKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKToK
KyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHTW92SGludFJlbW92
YWxQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKiBn
ZW5lcmF0b3IvT3Bjb2RlLnJiOgorICAgICAgICAqIGdlbmVyYXRvci9TZWN0aW9uLnJiOgorCiAy
MDIwLTA3LTA2ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
Y2FsbE9uTWFpblRocmVhZCBzaG91bGQgdXNlIHRoZSBzYW1lIHF1ZXVlIGFzIFJ1bkxvb3A6OmRp
c3BhdGNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcAppbmRleCA2ZmJhMjI5N2MyOTFmZTQ4ZWI5
OTNjZmE3ZWZmNjM5MWNjNGY4NjYzLi5hOGU1NmQwY2QzOTRiYzFiN2FjMDUyNmJlODY2N2VhYzhi
ZGQ3ZTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKQEAgLTE5NCw3ICsxOTQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJ1bkxpdmVuZXNzRml4cG9pbnQoY29kZUJsb2NrLCBpbnN0cnVjdGlv
bnMsIG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCkpOwogCiAgICAgICAgIGZvciAoWWllbGRE
YXRhJiBkYXRhIDogbV9nZW5lcmF0b3JpZmljYXRpb24ueWllbGRzKCkpCi0gICAgICAgICAgICBk
YXRhLmxpdmVuZXNzID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb25zLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpLCBCeXRlY29kZUluZGV4
KG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmluc3RydWN0aW9ucygpLmF0KGRhdGEucG9pbnQpLm5leHQo
KS5vZmZzZXQoKSkpOworICAgICAgICAgICAgZGF0YS5saXZlbmVzcyA9IGdldExpdmVuZXNzSW5m
b0F0SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ2VuZXJhdG9yaWZpY2F0
aW9uLmdyYXBoKCksIEJ5dGVjb2RlSW5kZXgobV9nZW5lcmF0b3JpZmljYXRpb24uaW5zdHJ1Y3Rp
b25zKCkuYXQoZGF0YS5wb2ludCkubmV4dCgpLm9mZnNldCgpKSk7CiAgICAgfQogCiBwcml2YXRl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5k
ZXguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKaW5k
ZXggNmUyNjZkM2RhZjNiMTI1ZTg3MzY3NTc1NDA1MmMzMTNjMGU1YTU3MS4uOWJjODQzNGUwZjli
MzhiMjhhMWI4MTFlMGUwMWZlZTIwMWI4YmI4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0zNCw2ICszNCw5IEBAIGNsYXNzIFByaW50
U3RyZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsKIAordXNpbmcgQ2hlY2twb2ludCA9IHVpbnQ4X3Q7
CitzdGF0aWMgY29uc3RleHByIENoZWNrcG9pbnQgbm9DaGVja3BvaW50cyA9IDA7CisKIGNsYXNz
IEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5kZXgoKSA9IGRlZmF1bHQ7
CkBAIC00Miw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgZXhwbGljaXQg
Qnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCwgdWludDhfdCBjaGVja3BvaW50
ID0gMCkKKyAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
LCBDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBub0NoZWNrcG9pbnRzKQogICAgICAgICA6IG1fcGFj
a2VkQml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3BvaW50KSkKICAgICB7CiAgICAgICAg
IEFTU0VSVCgqdGhpcyk7CkBAIC01NCw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHBy
KG51bWJlck9mQ2hlY2twb2ludHMpOwogCiAgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQotICAgIHVpbnQ4X3QgY2hl
Y2twb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9
CisgICAgQ2hlY2twb2ludCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRz
ICYgY2hlY2twb2ludE1hc2s7IH0KICAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVy
biBtX3BhY2tlZEJpdHM7IH0KIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBX
VEY6OmludEhhc2gobV9wYWNrZWRCaXRzKTsgfQpAQCAtNjIsNyArNjUsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09
IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0cyh1
aW50MzJfdCBiaXRzKTsKLSAgICBCeXRlY29kZUluZGV4IHdpdGhDaGVja3BvaW50KHVuc2lnbmVk
IGNoZWNrcG9pbnQpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgob2Zmc2V0KCksIGNoZWNr
cG9pbnQpOyB9CisgICAgQnl0ZWNvZGVJbmRleCB3aXRoQ2hlY2twb2ludChDaGVja3BvaW50IGNo
ZWNrcG9pbnQpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgob2Zmc2V0KCksIGNoZWNrcG9p
bnQpOyB9CiAKICAgICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICE9IGludmFsaWRPZmZzZXQg
JiYgbV9wYWNrZWRCaXRzICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CkBAIC04MCwxMiAr
ODMsMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90
IGludmFsaWRPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CiAK
LSAgICBzdGF0aWMgdWludDMyX3QgcGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1aW50OF90
IGNoZWNrcG9pbnQpOworICAgIHN0YXRpYyB1aW50MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2Rl
SW5kZXgsIENoZWNrcG9pbnQpOwogCiAgICAgdWludDMyX3QgbV9wYWNrZWRCaXRzIHsgaW52YWxp
ZE9mZnNldCB9OwogfTsKIAotaW5saW5lIHVpbnQzMl90IEJ5dGVjb2RlSW5kZXg6OnBhY2sodWlu
dDMyX3QgYnl0ZWNvZGVJbmRleCwgdWludDhfdCBjaGVja3BvaW50KQoraW5saW5lIHVpbnQzMl90
IEJ5dGVjb2RlSW5kZXg6OnBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgQ2hlY2twb2ludCBj
aGVja3BvaW50KQogewogICAgIEFTU0VSVChjaGVja3BvaW50IDwgbnVtYmVyT2ZDaGVja3BvaW50
cyk7CiAgICAgQVNTRVJUKChieXRlY29kZUluZGV4IDw8IGNoZWNrcG9pbnRTaGlmdCkgPj4gY2hl
Y2twb2ludFNoaWZ0ID09IGJ5dGVjb2RlSW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAppbmRl
eCA0MmE2MzVlYzhlM2U0ODcxMjQ5MzMzYWI4ODUwNmM1NzZmYjY3M2I5Li4xNjE4MjUwNDE1Nzk4
MDFhOWY0Mjk2YWFhYzZlMWNjNTk3NTI2YTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcApAQCAt
MzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZ1bGxCeXRl
Y29kZUxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRl
IDx3dGYvU2NvcGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ0LDM2ICs0MywyMCBAQCBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKICAgICAgICAgZHVtcFJlc3VsdHMoY29kZUJsb2NrKTsKIH0KIAotdm9p
ZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRl
eChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBGYXN0
Qml0VmVjdG9yJiByZXN1bHQpCi17Ci0gICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4Lm9mZnNl
dCgpKTsKLSAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9j
aygpKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKLSAgICByZXN1bHQucmVz
aXplKGJsb2NrLT5vdXQoKS5udW1CaXRzKCkpOwotICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9y
Qnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3Jh
cGgsICpibG9jaywgYnl0ZWNvZGVJbmRleCwgcmVzdWx0KTsKLX0KLQotRmFzdEJpdFZlY3RvciBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAg
IEZhc3RCaXRWZWN0b3Igb3V0OwotICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChj
b2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIG91dCk7Ci0gICAgcmV0dXJuIG91dDsKLX0KLQogdm9p
ZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpCiB7CiAgICAgRmFzdEJp
dFZlY3RvciBvdXQ7CiAKLSAgICByZXN1bHQubV9iZWZvcmVVc2VWZWN0b3IucmVzaXplKGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICByZXN1bHQubV9hZnRlclVzZVZlY3Rv
ci5yZXNpemUoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIHNpemVfdCBz
aXplID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgcmVzdWx0Lm1fdXNl
c0JlZm9yZS5yZXNpemUoc2l6ZSk7CisgICAgcmVzdWx0Lm1fdXNlc0FmdGVyLnJlc2l6ZShzaXpl
KTsKICAgICAKICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiBtX2dyYXBoLmJh
c2ljQmxvY2tzSW5SZXZlcnNlT3JkZXIoKSkgewogICAgICAgICBpZiAoYmxvY2suaXNFbnRyeUJs
b2NrKCkgfHwgYmxvY2suaXNFeGl0QmxvY2soKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAKICAgICAgICAgb3V0ID0gYmxvY2sub3V0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGF1
dG8gdXNlID0gWyZdICh1bnNpZ25lZCBiaXRJbmRleCkgewogICAgICAgICAgICAgLy8gVGhpcyBp
cyB0aGUgdXNlIGZ1bmN0b3IsIHNvIHdlIHNldCB0aGUgYml0LgogICAgICAgICAgICAgb3V0W2Jp
dEluZGV4XSA9IHRydWU7CkBAIC04OSwxMiArNzIsMTcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bGxC
eXQKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2suZGVsdGEoKS5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgICAgIGN1cnNvciAtPSBibG9jay5kZWx0YSgpW2ldOwogICAgICAgICAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChibG9jay5sZWFkZXJP
ZmZzZXQoKSArIGN1cnNvcik7Ci0KLSAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25EZWYo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIGRlZik7Ci0g
ICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uVXNlSW5FeGNlcHRpb25IYW5kbGVyKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dyYXBoLCBieXRlY29kZUluZGV4LCB1c2UpOwotICAgICAg
ICAgICAgcmVzdWx0Lm1fYWZ0ZXJVc2VWZWN0b3JbYnl0ZWNvZGVJbmRleC5vZmZzZXQoKV0gPSBv
dXQ7IC8vIEFmdGVyVXNlIHBvaW50LgotICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvblVz
ZShjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsK
LSAgICAgICAgICAgIHJlc3VsdC5tX2JlZm9yZVVzZVZlY3RvcltieXRlY29kZUluZGV4Lm9mZnNl
dCgpXSA9IG91dDsgLy8gQmVmb3JlVXNlIHBvaW50LgorICAgICAgICAgICAgYXV0byBpbnN0cnVj
dGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIGZvciAo
Q2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMo
KTsgY2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgICAgIEFTU0VSVChjaGVja3BvaW50IDwg
aW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IGJ5
dGVjb2RlSW5kZXgud2l0aENoZWNrcG9pbnQoY2hlY2twb2ludCk7CisKKyAgICAgICAgICAgICAg
ICBzdGVwT3ZlckJ5dGVjb2RlSW5kZXhEZWYoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ3Jh
cGgsIGJ5dGVjb2RlSW5kZXgsIGRlZik7CisgICAgICAgICAgICAgICAgc3RlcE92ZXJCeXRlY29k
ZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dy
YXBoLCBieXRlY29kZUluZGV4LCB1c2UpOworICAgICAgICAgICAgICAgIHJlc3VsdC5tX3VzZXNB
ZnRlcltyZXN1bHQudG9JbmRleChieXRlY29kZUluZGV4KV0gPSBvdXQ7IC8vIEFmdGVyVXNlIHBv
aW50LgorICAgICAgICAgICAgICAgIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZShjb2RlQmxvY2ss
IGluc3RydWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQubV91c2VzQmVmb3JlW3Jlc3VsdC50b0luZGV4KGJ5dGVjb2RlSW5kZXgpXSA9
IG91dDsgLy8gQmVmb3JlVXNlIHBvaW50LgorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogfQpAQCAtMTUwLDcgKzEzOCw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpk
dW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgICAgIGNvbnN0IGF1dG8g
Y3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKIAog
ICAgICAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFyaWFibGVzOiIpOwotICAgICAgICAgICAgRmFz
dEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KGNv
ZGVCbG9jaywgQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkpOworICAgICAgICAgICAgRmFz
dEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbihjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKTsKICAgICAgICAgICAgIGR1bXBC
aXRWZWN0b3IobGl2ZUJlZm9yZSk7CiAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICAgICAg
ICAgICAgIGNvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZpbGUoKSwgY3VycmVudElu
c3RydWN0aW9uKTsKQEAgLTE3NiwxNCArMTY0LDEwIEBAIGNvbnN0ZXhwciBib29sIGVudW1WYWx1
ZXNFcXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlwZTIgdjIpCiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUyPih2
Mik7CiB9CiAKLVZlY3RvcjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1wcz4gbGl2ZW5lc3NG
b3JDaGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgpCitCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9y
Q2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQogewotICAgIFZlY3RvcjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1wcz4g
cmVzdWx0OwotICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpOwotCi0gICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7Ci0gICAgICAg
IEFTU0VSVChyZXN1bHQuc2l6ZSgpIDw9IG1heE51bUNoZWNrcG9pbnRUbXBzKTsKLSAgICB9KTsK
KyAgICBCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHJlc3VsdDsKKyAgICBDaGVja3BvaW50
IGNoZWNrcG9pbnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKIAogICAgIGlmICghY2hl
Y2twb2ludCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE5NSwxNiArMTc5LDE0IEBAIFZl
Y3RvcjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1wcz4gbGl2ZW5lc3NGb3JDaGVja3BvaW50
KGNvbnN0IENvZGVCbG9jayYgY29kCiAgICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0Vx
dWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BUYWlsQ2FsbFZhcmFyZ3M6
Om1ha2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFy
Z0NvdW50SW5jbHVkaW5nVGhpcywgT3BUYWlsQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5n
VGhpcykpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwo
T3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wQ29uc3RydWN0VmFyYXJnczo6bWFrZUNhbGwpICYm
IGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRp
bmdUaGlzLCBPcENvbnN0cnVjdFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhpcykpOwogICAg
ICAgICBpZiAoY2hlY2twb2ludCA9PSBPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCkKLSAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoT3BlcmFuZDo6dG1wKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5j
bHVkaW5nVGhpcykpOworICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjphcmdD
b3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBj
YXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKLSAgICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gT3BJdGVy
YXRvck9wZW46OmdldE5leHQpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVCbG9jay5p
bnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BJdGVyYXRvck9wZW4+KCkubV9p
dGVyYXRvcik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIGNhc2Ugb3BfaXRl
cmF0b3JfbmV4dDogewotICAgICAgICByZXN1bHQuYXBwZW5kKE9wZXJhbmQ6OnRtcChPcEl0ZXJh
dG9yTmV4dDo6bmV4dFJlc3VsdCkpOworICAgICAgICByZXN1bHQuc2V0KE9wSXRlcmF0b3JOZXh0
OjpuZXh0UmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgZGVmYXVs
dDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaAppbmRleCBiZTVlZTJmY2QzYTY0ZTU2M2FlYTFmM2YyMjI3OTFl
NDY4YmI2MTA0Li5hMjA0MTdmMjJjYjFiMmQzNzc2YjA5YTY3NzEzOWMyMjdkMjYwYzI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5oCkBAIC01MSwyNiArNTEsMjYgQEAgZW51bSBjbGFzcyBMaXZlbmVzc0Nh
bGN1bGF0aW9uUG9pbnQgOiB1aW50OF90IHsKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdh
dGlvbiB7CiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlw
ZW5hbWUgVXNlRnVuY3Rvcj4KLSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uVXNl
KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgm
LCBCeXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJik7CisgICAgc3RhdGljIHZvaWQgc3Rl
cE92ZXJCeXRlY29kZUluZGV4VXNlKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0
cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJik7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVuY3Rv
cj4KLSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uVXNlSW5FeGNlcHRpb25IYW5k
bGVyKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3Jh
cGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJik7CisgICAgc3RhdGljIHZvaWQg
c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKENvZGVCbG9ja1R5cGUq
LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4
LCBjb25zdCBVc2VGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZSwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4KLSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0
aW9uRGVmKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2Rl
R3JhcGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBEZWZGdW5jdG9yJik7CisgICAgc3RhdGljIHZv
aWQgc3RlcE92ZXJCeXRlY29kZUluZGV4RGVmKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBEZWZGdW5j
dG9yJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBV
c2VGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotICAgIHN0YXRpYyB2b2lkIHN0ZXBPdmVy
SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0
ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImLCBjb25zdCBEZWZG
dW5jdG9yJik7CisgICAgc3RhdGljIHZvaWQgc3RlcE92ZXJCeXRlY29kZUluZGV4KENvZGVCbG9j
a1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29k
ZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJiwgY29uc3QgRGVmRnVuY3RvciYpOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KICAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlcklu
c3RydWN0aW9uKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVj
b2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBGYXN0Qml0VmVjdG9yJiBvdXQpOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPgotICAg
IHN0YXRpYyBib29sIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChDb2RlQmxv
Y2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFz
aWNCbG9jayYsIEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CisgICAgc3Rh
dGljIGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBl
KiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9j
ayYsIEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+CiAgICAgc3Rh
dGljIGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29u
c3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayYpOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rp
b25zPgotICAgIHN0YXRpYyBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJ
bmRleChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYs
IEJ5dGVjb2RlSW5kZXgpOworICAgIHN0YXRpYyBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5m
b0F0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVj
b2RlR3JhcGgmLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KICAgICBzdGF0aWMgdm9pZCBydW5MaXZl
bmVzc0ZpeHBvaW50KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29k
ZUdyYXBoJik7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgQnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOwogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhD
b2RlQmxvY2sqKTsKICAgICAKLSAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVJbmRleChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKKyAgICBGYXN0Qml0VmVjdG9y
IGdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkgeyByZXR1cm4gQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0
aW9uOjpnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKGNvZGVCbG9jaywgY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCk7IH0KICAgICAKICAgICB2b2lk
IGNvbXB1dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiwgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIHJl
c3VsdCk7CiAKQEAgLTkyLDEyICs5MiwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQg
ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKik7CiAKLSAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVJbmRleChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBGYXN0Qml0VmVjdG9yJik7Ci0K
ICAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCi1WZWN0b3I8T3BlcmFuZCwgbWF4TnVt
Q2hlY2twb2ludFRtcHM+IGxpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smLCBC
eXRlY29kZUluZGV4KTsKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NG
b3JDaGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5kZXgpOwogCiBpbmxpbmUg
Ym9vbCBvcGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJh
bmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50
IG9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKaW5kZXggYzYwOTY1YmNj
OTdhN2I4OTkwZGI5OGZkMjNkOTliNWUwOGY5Y2RkNS4uNjQ4YzRiNWU5NjMwODUxZDg5ODE3MWQx
ZDA3NzU2NjI0ZWE2NTU1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCkBAIC0y
Nyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlcklubGluZXMuaCIKIApA
QCAtNTgsMTEgKzU5LDExIEBAIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNz
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVz
c1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uRGVmKENvZGVCbG9ja1R5cGUqIGNvZGVC
bG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFw
aCYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQor
aW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2Rl
SW5kZXhEZWYoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4LCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCiB7CiAgICAgYXV0byogaW5zdHJ1Y3Rpb24gPSBp
bnN0cnVjdGlvbnMuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgY29tcHV0ZURlZnNGb3JC
eXRlY29kZUluZGV4KAotICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0aW9uLAorICAgICAgICBj
b2RlQmxvY2ssIGluc3RydWN0aW9uLCBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSwKICAgICAg
ICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgaWYgKGlzVmFs
aWRSZWdpc3RlckZvckxpdmVuZXNzKG9wZXJhbmQpKQogICAgICAgICAgICAgICAgIGRlZihvcGVy
YW5kLnRvTG9jYWwoKSk7CkBAIC03MCwxMSArNzEsMTEgQEAgaW5saW5lIHZvaWQgQnl0ZWNvZGVM
aXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uRGVmKENvZGVCbG9ja1R5cGUq
IGMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVu
Y3Rvcj4KLWlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJ
bnN0cnVjdGlvblVzZShDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSkKK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2
ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlKENvZGVCbG9ja1R5cGUq
IGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNv
ZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYg
dXNlKQogewogICAgIGF1dG8qIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2Rl
SW5kZXgpLnB0cigpOwogICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleCgKLSAgICAgICAg
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbiwKKyAgICAgICAgY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwg
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCksCiAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhv
cGVyYW5kKSkKICAgICAgICAgICAgICAgICB1c2Uob3BlcmFuZC50b0xvY2FsKCkpOwpAQCAtODIs
MTAgKzgzLDEwIEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3Rl
cE92ZXJJbnN0cnVjdGlvblVzZShDb2RlQmxvY2tUeXBlKiBjCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBCeXRl
Y29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJbkV4Y2VwdGlv
bkhhbmRsZXIoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNv
bnN0IFVzZUZ1bmN0b3ImIHVzZSkKK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdh
dGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBo
JiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJiB1
c2UpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGNlcHRpb24gaGFuZGxlciwgd2Ugd2FudCB0
aGUgbGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAotICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIGJs
b2NrIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBsaXZlLWluIG9mIHRoaXMgcGFydGljdWxhciBieXRl
Y29kZS4KKyAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0
aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgQnl0ZWNvZGVJbmRleC4KICAgICBpZiAoYXV0
byogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJ
bmRleCkpIHsKICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sgPSBncmFw
aC5maW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KTsKICAgICAg
ICAgQVNTRVJUKGhhbmRsZXJCbG9jayk7CkBAIC05Niw5ICs5Nyw5IEBAIGlubGluZSB2b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvblVzZUluRXhjZXB0
aW9uSGFuZGxlCiAvLyBTaW1wbGlmaWVkIGludGVyZmFjZSB0byBieXRlY29kZSB1c2UvZGVmLCB3
aGljaCBkZXRlcm1pbmVzIGRlZnMgZmlyc3QgYW5kIHRoZW4gdXNlcywgYW5kIGluY2x1ZGVzCiAv
LyBleGNlcHRpb24gaGFuZGxlcnMgaW4gdGhlIHVzZXMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlLCB0eXBlbmFtZSBVc2VGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotaW5s
aW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9u
KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgY29uc3QgVXNlRnVuY3RvciYgdXNlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCitpbmxpbmUg
dm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRleChD
b2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVj
dGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgs
IGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQogewotICAgIC8v
IFRoaXMgYWJzdHJhY3RseSBleGVjdXRlIHRoZSBpbnN0cnVjdGlvbiBpbiByZXZlcnNlLiBJbnN0
cnVjdGlvbnMgbG9naWNhbGx5IGZpcnN0IHVzZSBvcGVyYW5kcyBhbmQKKyAgICAvLyBUaGlzIGFi
c3RyYWN0bHkgZXhlY3V0ZXMgdGhlIEJ5dGVjb2RlSW5kZXggaW4gcmV2ZXJzZS4gSW5zdHJ1Y3Rp
b25zIGxvZ2ljYWxseSBmaXJzdCB1c2Ugb3BlcmFuZHMgYW5kCiAgICAgLy8gdGhlbiBkZWZpbmUg
b3BlcmFuZHMuIFRoaXMgbG9naWNhbCBvcmRlcmluZyBpcyBuZWNlc3NhcnkgZm9yIG9wZXJhdGlv
bnMgdGhhdCB1c2UgYW5kIGRlZiB0aGUgc2FtZQogICAgIC8vIG9wZXJhbmQsIGxpa2U6CiAgICAg
Ly8KQEAgLTExMywzMSArMTE0LDM1IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9w
YWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlCiAgICAgLy8g
dXNlcyBiZWZvcmUgZGVmcywgdGhlbiB0aGUgYWRkIG9wZXJhdGlvbiBhYm92ZSB3b3VsZCBhcHBl
YXIgdG8gbm90IGhhdmUgbG9jMSBsaXZlLCBzaW5jZSB3ZSdkCiAgICAgLy8gZmlyc3QgYWRkIGl0
IHRvIHRoZSBvdXQgc2V0ICh0aGUgdXNlKSwgYW5kIHRoZW4gd2UnZCByZW1vdmUgaXQgKHRoZSBk
ZWYpLgogCi0gICAgc3RlcE92ZXJJbnN0cnVjdGlvbkRlZihjb2RlQmxvY2ssIGluc3RydWN0aW9u
cywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIGRlZik7Ci0gICAgc3RlcE92ZXJJbnN0cnVjdGlvblVz
ZUluRXhjZXB0aW9uSGFuZGxlcihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVj
b2RlSW5kZXgsIHVzZSk7Ci0gICAgc3RlcE92ZXJJbnN0cnVjdGlvblVzZShjb2RlQmxvY2ssIGlu
c3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIHVzZSk7CisgICAgc3RlcE92ZXJCeXRl
Y29kZUluZGV4RGVmKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVJbmRl
eCwgZGVmKTsKKyAgICBzdGVwT3ZlckJ5dGVjb2RlSW5kZXhVc2VJbkV4Y2VwdGlvbkhhbmRsZXIo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZUluZGV4LCB1c2UpOworICAg
IHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZShjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgs
IGJ5dGVjb2RlSW5kZXgsIHVzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGU+CiBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5z
dHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4LCBGYXN0Qml0VmVjdG9yJiBvdXQpCiB7Ci0gICAgc3RlcE92ZXJJbnN0cnVjdGlv
bigKLSAgICAgICAgY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZUluZGV4
LAotICAgICAgICBbJl0gKHVuc2lnbmVkIGJpdEluZGV4KSB7Ci0gICAgICAgICAgICAvLyBUaGlz
IGlzIHRoZSB1c2UgZnVuY3Rvciwgc28gd2Ugc2V0IHRoZSBiaXQuCi0gICAgICAgICAgICBvdXRb
Yml0SW5kZXhdID0gdHJ1ZTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdICh1bnNpZ25lZCBiaXRJ
bmRleCkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmIGZ1bmN0b3IsIHNvIHdlIGNs
ZWFyIHRoZSBiaXQuCi0gICAgICAgICAgICBvdXRbYml0SW5kZXhdID0gZmFsc2U7Ci0gICAgICAg
IH0pOworICAgIGF1dG8gbnVtYmVyT2ZDaGVja3BvaW50cyA9IGluc3RydWN0aW9ucy5hdChieXRl
Y29kZUluZGV4KS0+bnVtYmVyT2ZDaGVja3BvaW50cygpOworICAgIGZvciAoQ2hlY2twb2ludCBj
aGVja3BvaW50ID0gbnVtYmVyT2ZDaGVja3BvaW50czsgY2hlY2twb2ludC0tOykgeworICAgICAg
ICBzdGVwT3ZlckJ5dGVjb2RlSW5kZXgoCisgICAgICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0
aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgud2l0aENoZWNrcG9pbnQoY2hlY2twb2ludCksCisg
ICAgICAgICAgICBbJl0gKHVuc2lnbmVkIGJpdEluZGV4KSB7CisgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgdXNlIGZ1bmN0b3IsIHNvIHdlIHNldCB0aGUgYml0LgorICAgICAgICAgICAg
ICAgIG91dFtiaXRJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsm
XSAodW5zaWduZWQgYml0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBk
ZWYgZnVuY3Rvciwgc28gd2UgY2xlYXIgdGhlIGJpdC4KKyAgICAgICAgICAgICAgICBvdXRbYml0
SW5kZXhdID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLWlubGluZSBib29s
IEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRl
Y29kZUluZGV4KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25zJiBp
bnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUJhc2ljQmxvY2smIGJs
b2NrLCBCeXRlY29kZUluZGV4IHRhcmdldEluZGV4LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCitp
bmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVu
ZXNzRm9ySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVj
dGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlQmFzaWNC
bG9jayYgYmxvY2ssIEJ5dGVjb2RlSW5kZXggdGFyZ2V0SW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJl
c3VsdCkKIHsKICAgICBBU1NFUlQoIWJsb2NrLmlzRXhpdEJsb2NrKCkpOwogICAgIEFTU0VSVCgh
YmxvY2suaXNFbnRyeUJsb2NrKCkpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXRhcmdldElu
ZGV4LmNoZWNrcG9pbnQoKSwgImNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24gY2Fu
J3QgYmUgdXNlZCB0byBhc2sgcXVlc3Rpb25zIGFib3V0IGNoZWNrcG9pbnRzIik7CiAKICAgICBG
YXN0Qml0VmVjdG9yIG91dCA9IGJsb2NrLm91dCgpOwogCkBAIC0xNTgsMTkgKzE2MywyMCBAQCBp
bmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVu
ZXNzRm9yQmxvY2soQ29kZUJsb2NrVAogewogICAgIGlmIChibG9jay5pc0V4aXRCbG9jaygpIHx8
IGJsb2NrLmlzRW50cnlCbG9jaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIGluc3RydWN0
aW9ucywgZ3JhcGgsIGJsb2NrLCBCeXRlY29kZUluZGV4KGJsb2NrLmxlYWRlck9mZnNldCgpKSwg
YmxvY2suaW4oKSk7CisgICAgcmV0dXJuIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rp
b24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBibG9jaywgQnl0ZWNvZGVJbmRleChi
bG9jay5sZWFkZXJPZmZzZXQoKSksIGJsb2NrLmluKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+Ci1pbmxpbmUgRmFzdEJpdFZl
Y3RvciBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVJbmRleChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5z
dHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQoraW5saW5lIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpn
ZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29u
c3QgSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCksICJnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uIGNh
bid0IGJlIHVzZWQgdG8gYXNrIHF1ZXN0aW9ucyBhYm91dCBjaGVja3BvaW50cyIpOwogICAgIEJ5
dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAgIEFTU0VSVChibG9jayk7CiAgICAg
QVNTRVJUKCFibG9jay0+aXNFbnRyeUJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRXhp
dEJsb2NrKCkpOwogICAgIEZhc3RCaXRWZWN0b3Igb3V0OwogICAgIG91dC5yZXNpemUoYmxvY2st
Pm91dCgpLm51bUJpdHMoKSk7Ci0gICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUlu
ZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgKmJsb2NrLCBieXRlY29kZUluZGV4
LCBvdXQpOworICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24oY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbnMsIGdyYXBoLCAqYmxvY2ssIGJ5dGVjb2RlSW5kZXgsIG91dCk7CiAgICAg
cmV0dXJuIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlVXNlRGVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHAKaW5kZXggY2U0NzBjOTIyZTg4M2ZlMDE3ZjA4ZDZiMmYzNjcyNDU3
M2RlODE5ZS4uMjM4MjI3MWQ5MDhiNzI4MjJhMGJkYmE0MmEyOTU1NmI3NGZiNWU4YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCkBA
IC0yOSwxMCArMjksMTEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIENBTExfRlVOQ1RP
UihfX2FyZykgXAotICAgIGZ1bmN0b3IoX19ieXRlY29kZS5tXyMjX19hcmcpOworICAgIGZ1bmN0
b3Iobm9DaGVja3BvaW50cywgX19ieXRlY29kZS5tXyMjX19hcmcpOwogCiAjZGVmaW5lIFVTRVNf
T1JfREVGUyhfX29wY29kZSwgLi4uKSBcCiAgICAgY2FzZSBfX29wY29kZTo6b3Bjb2RlSUQ6IHsg
XAorICAgICAgICBzdGF0aWNfYXNzZXJ0KF9fb3Bjb2RlOjpvcGNvZGVJRCA+PSBOVU1CRVJfT0Zf
QllURUNPREVfV0lUSF9DSEVDS1BPSU5UUywgIkRvbid0IHVzZSB0aGlzIG1hY3JvIGZvciBieXRl
Y29kZXMgdGhhdCBoYXZlIGNoZWNrcG9pbnRzLiIpOyBcCiAgICAgICAgIGF1dG8gX19ieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxfX29wY29kZT4oKTsgXAogICAgICAgICBXVEZfTEFaWV9GT1Jf
RUFDSF9URVJNKENBTExfRlVOQ1RPUiwgX19WQV9BUkdTX18pIFwKICAgICAgICAgcmV0dXJuOyBc
CkBAIC00MSwyNiArNDIsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZGVmaW5lIFVTRVMgVVNFU19P
Ul9ERUZTCiAjZGVmaW5lIERFRlMgVVNFU19PUl9ERUZTCiAKLXZvaWQgY29tcHV0ZVVzZXNGb3JC
eXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBjb25zdCBGdW5jdGlvbjx2b2lkKFZpcnR1YWxSZWdpc3Rl
cik+JiBmdW5jdG9yKQordm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1
YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IENoZWNrcG9pbnQgY2hlY2twb2ludCwgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVmlydHVhbFJl
Z2lzdGVyKT4mIGZ1bmN0b3JJbXBsKQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCk7CiAKLSAgICBhdXRvIGhhbmRsZU5ld0FycmF5TGlrZSA9IFsmXShh
dXRvIG9wKSB7CisgICAgYXV0byBmdW5jdG9yID0gWyZdIChDaGVja3BvaW50IHRhcmdldCwgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgaWYgKHRhcmdldCA9PSBjaGVja3BvaW50
KQorICAgICAgICAgICAgZnVuY3RvckltcGwob3BlcmFuZCk7CisgICAgfTsKKworICAgIGF1dG8g
aGFuZGxlTmV3QXJyYXlMaWtlID0gWyZdIChhdXRvIG9wKSB7CiAgICAgICAgIGludCBiYXNlID0g
b3AubV9hcmd2Lm9mZnNldCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19j
YXN0PGludD4ob3AubV9hcmdjKTsgaSsrKQotICAgICAgICAgICAgZnVuY3RvcihWaXJ0dWFsUmVn
aXN0ZXIgeyBiYXNlIC0gaSB9KTsKKyAgICAgICAgICAgIGZ1bmN0b3Iobm9DaGVja3BvaW50cywg
VmlydHVhbFJlZ2lzdGVyIHsgYmFzZSAtIGkgfSk7CiAgICAgfTsKIAotICAgIGF1dG8gaGFuZGxl
T3BDYWxsTGlrZSA9IFsmXShhdXRvIG9wKSB7Ci0gICAgICAgIGZ1bmN0b3Iob3AubV9jYWxsZWUp
OworICAgIGF1dG8gaGFuZGxlT3BDYWxsTGlrZSA9IFsmXSAoYXV0byBvcCkgeworICAgICAgICBm
dW5jdG9yKG5vQ2hlY2twb2ludHMsIG9wLm1fY2FsbGVlKTsKICAgICAgICAgaW50IGxhc3RBcmcg
PSAtc3RhdGljX2Nhc3Q8aW50PihvcC5tX2FyZ3YpICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRP
ZmZzZXQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KG9w
Lm1fYXJnYyk7IGkrKykKLSAgICAgICAgICAgIGZ1bmN0b3IoVmlydHVhbFJlZ2lzdGVyIHsgbGFz
dEFyZyArIGkgfSk7CisgICAgICAgICAgICBmdW5jdG9yKG5vQ2hlY2twb2ludHMsIFZpcnR1YWxS
ZWdpc3RlciB7IGxhc3RBcmcgKyBpIH0pOwogICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2Fs
bF9ldmFsKQotICAgICAgICAgICAgZnVuY3RvcihzY29wZVJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IGZ1bmN0b3Iobm9DaGVja3BvaW50cywgc2NvcGVSZWdpc3Rlcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9OwogCisgICAgYXV0byB1c2VBdEVhY2hDaGVja3BvaW50ID0gWyZdIChhdXRvLi4uIHZp
cnR1YWxSZWdpc3RlcnMpIHsKKyAgICAgICAgKGZ1bmN0b3JJbXBsKHZpcnR1YWxSZWdpc3RlcnMp
LCAuLi4pOworICAgIH07CisKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgY2FzZSBvcF93
aWRlMTY6CiAgICAgY2FzZSBvcF93aWRlMzI6CkBAIC0yNTAsOSArMjYwLDIyIEBAIHZvaWQgY29t
cHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3Rl
ciwgY29uc3QgSW5zdHJ1CiAgICAgVVNFUyhPcEhhc1N0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBw
cm9wZXJ0eSwgZW51bWVyYXRvcikKICAgICBVU0VTKE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHks
IGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQogICAgIFVTRVMoT3BJblN0cnVjdHVyZVByb3Bl
cnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKLSAgICBVU0VTKE9wQ29uc3RydWN0VmFy
YXJncywgY2FsbGVlLCB0aGlzVmFsdWUsIGFyZ3VtZW50cykKLSAgICBVU0VTKE9wQ2FsbFZhcmFy
Z3MsIGNhbGxlZSwgdGhpc1ZhbHVlLCBhcmd1bWVudHMpCi0gICAgVVNFUyhPcFRhaWxDYWxsVmFy
YXJncywgY2FsbGVlLCB0aGlzVmFsdWUsIGFyZ3VtZW50cykKKworICAgIGNhc2Ugb3BfY2FsbF92
YXJhcmdzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxs
VmFyYXJncz4oKTsKKyAgICAgICAgdXNlQXRFYWNoQ2hlY2twb2ludChieXRlY29kZS5tX2NhbGxl
ZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUsIGJ5dGVjb2RlLm1fYXJndW1lbnRzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOiB7CisgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCk7Cisg
ICAgICAgIHVzZUF0RWFjaENoZWNrcG9pbnQoYnl0ZWNvZGUubV9jYWxsZWUsIGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlLCBieXRlY29kZS5tX2FyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKTsKKyAgICAgICAgdXNlQXRF
YWNoQ2hlY2twb2ludChieXRlY29kZS5tX2NhbGxlZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUsIGJ5
dGVjb2RlLm1fYXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFVTRVMo
T3BHZXREaXJlY3RQbmFtZSwgYmFzZSwgcHJvcGVydHksIGluZGV4LCBlbnVtZXJhdG9yKQogCkBA
IC0yNjUsOCArMjg4LDIxIEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9w
WWllbGQsIGdlbmVyYXRvciwgYXJndW1lbnQpCiAKLSAgICBVU0VTKE9wSXRlcmF0b3JPcGVuLCBz
eW1ib2xJdGVyYXRvciwgaXRlcmFibGUpCi0gICAgVVNFUyhPcEl0ZXJhdG9yTmV4dCwgaXRlcmF0
b3IsIG5leHQsIGl0ZXJhYmxlKQorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogeworICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOworICAg
ICAgICBmdW5jdG9yKE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsLCBieXRlY29kZS5tX3N5bWJv
bEl0ZXJhdG9yKTsKKyAgICAgICAgZnVuY3RvcihPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbCwg
Ynl0ZWNvZGUubV9pdGVyYWJsZSk7CisgICAgICAgIGZ1bmN0b3IoT3BJdGVyYXRvck9wZW46Omdl
dE5leHQsIGJ5dGVjb2RlLm1faXRlcmF0b3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CisgICAgICAgIHVzZUF0RWFjaENoZWNrcG9p
bnQoYnl0ZWNvZGUubV9pdGVyYXRvcik7CisgICAgICAgIGZ1bmN0b3IoT3BJdGVyYXRvck5leHQ6
OmNvbXB1dGVOZXh0LCBieXRlY29kZS5tX25leHQpOworICAgICAgICBmdW5jdG9yKE9wSXRlcmF0
b3JOZXh0Ojpjb21wdXRlTmV4dCwgYnl0ZWNvZGUubV9pdGVyYWJsZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKICAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NwcmVhZDoKICAgICAgICAg
aGFuZGxlTmV3QXJyYXlMaWtlKGluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4o
KSk7CkBAIC0yNzksNyArMzE1LDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJ
bXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJbnN0cnUKICAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKTsKICAgICAgICAgaW50
IGJhc2UgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBieXRlY29kZS5tX2NvdW50OyBpKyspCi0gICAgICAgICAgICBmdW5jdG9yKFZpcnR1YWxS
ZWdpc3RlciB7IGJhc2UgLSBpIH0pOworICAgICAgICAgICAgZnVuY3Rvcihub0NoZWNrcG9pbnRz
LCBWaXJ0dWFsUmVnaXN0ZXIgeyBiYXNlIC0gaSB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMzAyLDggKzMzOCwxMyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleElt
cGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIH0KIH0K
IAotdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKHVuc2lnbmVkIG51bVZhcnMs
IGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZChWaXJ0
dWFsUmVnaXN0ZXIpPiYgZnVuY3RvcikKK3ZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENo
ZWNrcG9pbnQgY2hlY2twb2ludCwgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVmlydHVhbFJlZ2lz
dGVyKT4mIGZ1bmN0b3JJbXBsKQogeworICAgIGF1dG8gZnVuY3RvciA9IFsmXSAoQ2hlY2twb2lu
dCB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgIGlmICh0YXJnZXQg
PT0gY2hlY2twb2ludCkKKyAgICAgICAgICAgIGZ1bmN0b3JJbXBsKG9wZXJhbmQpOworICAgIH07
CisKICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF93
aWRlMTY6CiAgICAgY2FzZSBvcF93aWRlMzI6CkBAIC00MTIsMTAgKzQ1MywyMyBAQCB2b2lkIGNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWduZWQgbnVtVmFycywgY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydQogICAgIERFRlMoT3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHAsIGRz
dCkKICAgICBERUZTKE9wTmV3QXN5bmNGdW5jLCBkc3QpCiAgICAgREVGUyhPcE5ld0FzeW5jRnVu
Y0V4cCwgZHN0KQotICAgIERFRlMoT3BDYWxsVmFyYXJncywgZHN0KQotICAgIERFRlMoT3BUYWls
Q2FsbFZhcmFyZ3MsIGRzdCkKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFyZ3M+KCk7CisgICAgICAg
IGZ1bmN0b3IoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCk7
CisgICAgICAgIGZ1bmN0b3IoT3BUYWlsQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBieXRlY29kZS5t
X2RzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFy
YXJnczogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3Ry
dWN0VmFyYXJncz4oKTsKKyAgICAgICAgZnVuY3RvcihPcENvbnN0cnVjdFZhcmFyZ3M6Om1ha2VD
YWxsLCBieXRlY29kZS5tX2RzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBERUZT
KE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBkc3QpCi0gICAgREVGUyhPcENvbnN0cnVjdFZh
cmFyZ3MsIGRzdCkKICAgICBERUZTKE9wR2V0RnJvbVNjb3BlLCBkc3QpCiAgICAgREVGUyhPcENh
bGwsIGRzdCkKICAgICBERUZTKE9wVGFpbENhbGwsIGRzdCkKQEAgLTUwMSwxMiArNTU1LDI4IEBA
IHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwg
dGhyb3duVmFsdWUpCiAKLSAgICBERUZTKE9wSXRlcmF0b3JPcGVuLCBpdGVyYXRvciwgbmV4dCkK
LSAgICBERUZTKE9wSXRlcmF0b3JOZXh0LCBkb25lLCB2YWx1ZSkKKyAgICBjYXNlIG9wX2l0ZXJh
dG9yX29wZW46IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yT3Blbj4oKTsKKworICAgICAgICBmdW5jdG9yKE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xD
YWxsLCBieXRlY29kZS5tX2l0ZXJhdG9yKTsKKyAgICAgICAgZnVuY3RvcihPcEl0ZXJhdG9yT3Bl
bjo6Z2V0TmV4dCwgYnl0ZWNvZGUubV9uZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOworCisgICAgICAgIGZ1bmN0b3IoT3BJdGVy
YXRvck5leHQ6OmdldERvbmUsIGJ5dGVjb2RlLm1fZG9uZSk7CisgICAgICAgIC8vIFdlIG5lZWQg
dG8gY2xhaW0gd2Ugc2V0IG1fdmFsdWUgaGVyZSBiZWNhdXNlIHdlIGNvdWxkIGVhcmx5IGV4aXQg
ZnJvbSB0aGUgYnl0ZWNvZGUgaWYgd2UgYXJlIGRvbmUuCisgICAgICAgIGZ1bmN0b3IoT3BJdGVy
YXRvck5leHQ6OmdldERvbmUsIGJ5dGVjb2RlLm1fdmFsdWUpOworCisgICAgICAgIGZ1bmN0b3Io
T3BJdGVyYXRvck5leHQ6OmdldFZhbHVlLCBieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAogICAgIGNhc2Ugb3BfZW50ZXI6IHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbnVtVmFyczsgaS0tOykKLSAgICAgICAgICAgIGZ1bmN0b3IodmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwoaSkpOworICAgICAgICAgICAgZnVuY3Rvcihub0NoZWNrcG9pbnRzLCB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAppbmRleCBi
M2IwMGE5OTIzNzMzZDMxYWM4NGU1ZDg4MmRhOTAzZTliZWRjN2ZiLi42NmZlYmY5ZWQxNjJmNDAx
N2I3NzllZjQ2NzU3ODA0NzI5NWI5NzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaApAQCAtMzIsMjMgKzMyLDIzIEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi12b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJl
Z2lzdGVyLCBjb25zdCBJbnN0cnVjdGlvbiosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoVmlydHVhbFJl
Z2lzdGVyKT4mKTsKLXZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25l
ZCwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBGdW5jdGlvbjx2b2lkKFZpcnR1YWxSZWdpc3Rl
cik+Jik7Cit2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyLCBjb25zdCBJbnN0cnVjdGlvbiosIENoZWNrcG9pbnQsIGNvbnN0IFNjb3BlZExhbWJkYTx2
b2lkKFZpcnR1YWxSZWdpc3Rlcik+Jik7Cit2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRl
eEltcGwodW5zaWduZWQsIGNvbnN0IEluc3RydWN0aW9uKiwgQ2hlY2twb2ludCwgY29uc3QgU2Nv
cGVkTGFtYmRhPHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4mKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
QmxvY2s+Ci12b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleChCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0aW9uPHZvaWQoVmly
dHVhbFJlZ2lzdGVyKT4mIGZ1bmN0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaywgdHlwZW5h
bWUgRnVuY3Rvcj4KK3ZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4KEJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2hlY2twb2ludCBjaGVja3Bv
aW50LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0g
aW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2VudGVyICYm
IChjb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSB8fCBjb2RlQmxv
Y2stPnVzZXNFdmFsKCkpICYmIGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLmlzVmFsaWQoKSkK
ICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSk7CiAKLSAgICBjb21w
dXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLCBp
bnN0cnVjdGlvbiwgZnVuY3Rvcik7CisgICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1w
bChjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSwgaW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQsIHNj
b3BlZExhbWJkYTx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgQmxvY2s+Ci12b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChCbG9j
ayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0IEZ1bmN0
aW9uPHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4mIGZ1bmN0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBC
bG9jaywgdHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KEJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2hlY2tw
b2ludCBjaGVja3BvaW50LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIGNvbXB1dGVE
ZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwoY29kZUJsb2NrLT5udW1WYXJzKCksIGluc3RydWN0aW9u
LCBmdW5jdG9yKTsKKyAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKGNvZGVCbG9j
ay0+bnVtVmFycygpLCBpbnN0cnVjdGlvbiwgY2hlY2twb2ludCwgc2NvcGVkTGFtYmRhPHZvaWQo
VmlydHVhbFJlZ2lzdGVyKT4oZnVuY3RvcikpOwogfQogCiAjdW5kZWYgQ0FMTF9GVU5DVE9SCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDM2ZThk
ODE2MjFlMGY1YzU5NDgwNDY3MjZlYzAwNWI4NGI3MWY4NDEuLjI1MGE1NWU0MGQ3MjBkNmMzNWQz
MDJlYjBhMmRhOGMzZmJmNzY1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiQmFzaWNCbG9ja0xv
Y2F0aW9uLmgiCiAjaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVEdW1w
ZXIuaCIKLSNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVPcGVy
YW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCkBAIC0xOTI0LDcgKzE5MjQsNyBAQCB2b2lkIENvZGVC
bG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyhj
b25zdCBPcENhdGNoJgogICAgIC8vIGludG8gdGhlIERGRy4KIAogICAgIGF1dG8gbmV4dE9mZnNl
dCA9IGluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLm5leHQoKS5vZmZzZXQoKTsKLSAg
ICBGYXN0Qml0VmVjdG9yIGxpdmVMb2NhbHMgPSBieXRlY29kZUxpdmVuZXNzLmdldExpdmVuZXNz
SW5mb0F0Qnl0ZWNvZGVJbmRleCh0aGlzLCBCeXRlY29kZUluZGV4KG5leHRPZmZzZXQpKTsKKyAg
ICBGYXN0Qml0VmVjdG9yIGxpdmVMb2NhbHMgPSBieXRlY29kZUxpdmVuZXNzLmdldExpdmVuZXNz
SW5mb0F0SW5zdHJ1Y3Rpb24odGhpcywgQnl0ZWNvZGVJbmRleChuZXh0T2Zmc2V0KSk7CiAgICAg
VmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gbGl2ZU9wZXJhbmRzOwogICAgIGxpdmVPcGVyYW5kcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxpdmVMb2NhbHMuYml0Q291bnQoKSk7CiAgICAgbGl2ZUxv
Y2Fscy5mb3JFYWNoU2V0Qml0KFsmXSAodW5zaWduZWQgbGl2ZUxvY2FsKSB7CkBAIC0zMTEwLDcg
KzMxMTAsNyBAQCB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogewogICAgIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBkaXJlY3RseSBmcm9tIHNj
cmF0Y2ggc28gaXQgZG9lc24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3RwcmludC4KICAgICAKLSAg
ICBGYXN0Qml0VmVjdG9yIGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5
dGVjb2RlSW5kZXgodGhpcywgQnl0ZWNvZGVJbmRleCgwKSk7CisgICAgRmFzdEJpdFZlY3RvciBs
aXZlQXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbih0aGlzLCBC
eXRlY29kZUluZGV4KDApKTsKICAgICAKICAgICBpZiAobGl2ZUF0SGVhZC5udW1CaXRzKCkgIT0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX251bUNhbGxlZUxvY2FscykpIHsKICAgICAgICAgYmVnaW5W
YWxpZGF0aW9uRGlkRmFpbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAppbmRleCA3OTE0NTNmM2ZkNzIzNDM2ZWUwZWQ1
MTkwZjBiYzI3ZDdkYTIzMDViLi43OTg2MmI4YTY3MDE4NzFjOWIzZGIzNjMwZjg2NmVkZDNhOWQw
NmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5
dGVjb2RlTGl2ZW5lc3MuaApAQCAtMzUsMTggKzM1LDE5IEBAIGNsYXNzIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpczsKIGNsYXNzIENvZGVCbG9jazsKIAogLy8gTm90ZTogRnVsbCBieXRlY29kZSBs
aXZlbmVzcyBkb2VzIG5vdCB0cmFjayBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpdmVuZXNz
IG9mIHRlbXBzLgotLy8gSWYgeW91IHdhbnQgdG1wIGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQg
YXNrIGxpdmVuZXNzRm9yQ2hlY2twb2ludC4KKy8vIElmIHlvdSB3YW50IHRtcCBsaXZlbmVzcyBm
b3IgYSBjaGVja3BvaW50IGFzayB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQuCiBjbGFzcyBGdWxs
Qnl0ZWNvZGVMaXZlbmVzcyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgZ2V0TGl2ZW5lc3MoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CiAgICAgewot
ICAgICAgICAvLyBGSVhNRTogV2hhdCBzaG91bGQgdGhpcyBkbyB3aGVuIHdlIGhhdmUgY2hlY2tw
b2ludHM/CisgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgb3ZlcmZsb3dp
bmcgaW50byB0aGUgbmV4dCBieXRlY29kZW9mZnNldCBpbiBvdXIgdmVjdG9ycyBiZWNhdXNlIHdl
CisgICAgICAgIC8vIHN0YXRpYyBhc3NlcnQgdGhhdCBieXRlY29kZSBsZW5ndGggaXMgZ3JlYXRl
ciB0aGFuIHRoZSBudW1iZXIgb2YgY2hlY2twb2ludHMgaW4gQnl0ZWNvZGVTdHJ1Y3RzLmgKICAg
ICAgICAgc3dpdGNoIChwb2ludCkgewogICAgICAgICBjYXNlIExpdmVuZXNzQ2FsY3VsYXRpb25Q
b2ludDo6QmVmb3JlVXNlOgotICAgICAgICAgICAgcmV0dXJuIG1fYmVmb3JlVXNlVmVjdG9yW2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCldOworICAgICAgICAgICAgcmV0dXJuIG1fdXNlc0JlZm9yZVt0
b0luZGV4KGJ5dGVjb2RlSW5kZXgpXTsKICAgICAgICAgY2FzZSBMaXZlbmVzc0NhbGN1bGF0aW9u
UG9pbnQ6OkFmdGVyVXNlOgotICAgICAgICAgICAgcmV0dXJuIG1fYWZ0ZXJVc2VWZWN0b3JbYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKV07CisgICAgICAgICAgICByZXR1cm4gbV91c2VzQWZ0ZXJbdG9J
bmRleChieXRlY29kZUluZGV4KV07CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC01OSwxMCArNjAsMTIgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAgIAorICAg
IHN0YXRpYyBzaXplX3QgdG9JbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpIHsgcmV0
dXJuIGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsg
fQorCiAgICAgLy8gRklYTUU6IFVzZSBGYXN0Qml0VmVjdG9yJ3MgdmlldyBtZWNoYW5pc20gdG8g
bWFrZSB0aGVtIGNvbXBhY3QuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDQyNzxQYXN0ZT4KLSAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5z
YWZlVmVjdG9yT3ZlcmZsb3c+IG1fYmVmb3JlVXNlVmVjdG9yOwotICAgIFZlY3RvcjxGYXN0Qml0
VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZnRlclVzZVZlY3RvcjsKKyAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NDI3CisgICAgVmVj
dG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3VzZXNCZWZvcmU7
CisgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3Vz
ZXNBZnRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAppbmRleCAzZDcwY2Q1NDNlY2ZhZTkwMjI1MDI5NjAx
YTBkNDA1ZWM2NzFiMmQwLi5mNjNhZDI5ZjIwZjUxZTZjNjA5ZmNjYjlkYmNiNTU4OTZlMzIyZjI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaApAQCAt
MzksNiArMzksNyBAQCBzdHJ1Y3QgSlNPcGNvZGVUcmFpdHMgewogICAgIHN0YXRpYyBjb25zdGV4
cHIgT3Bjb2RlSUQgd2lkZTMyID0gb3Bfd2lkZTMyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgY29u
c3QgdW5zaWduZWQqIG9wY29kZUxlbmd0aHMgPSA6OkpTQzo6b3Bjb2RlTGVuZ3RoczsKICAgICBz
dGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIGNvbnN0KiBvcGNvZGVOYW1lcyA9IDo6SlNDOjpv
cGNvZGVOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY2hlY2twb2ludENvdW50VGFi
bGUgPSBieXRlY29kZUNoZWNrcG9pbnRDb3VudFRhYmxlOwogfTsKIAogc3RydWN0IFdhc21PcGNv
ZGVUcmFpdHMgewpAQCAtNTAsNiArNTEsNyBAQCBzdHJ1Y3QgV2FzbU9wY29kZVRyYWl0cyB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBPcGNvZGVJRCB3aWRlMzIgPSB3YXNtX3dpZGUzMjsKICAgICBz
dGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkKiBvcGNvZGVMZW5ndGhzID0gd2FzbU9wY29k
ZUxlbmd0aHM7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBjb25zdCogb3Bjb2Rl
TmFtZXMgPSB3YXNtT3Bjb2RlTmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNoZWNr
cG9pbnRDb3VudFRhYmxlID0gd2FzbUNoZWNrcG9pbnRDb3VudFRhYmxlOwogfTsKIAogCkBAIC0x
MjIsNiArMTI0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wY29kZUlEPFRyYWl0cz4o
KSA8IFRyYWl0czo6bnVtYmVyT2ZCeXRlY29kZXNXaXRoQ2hlY2twb2ludHM7CiAgICAgfQogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzID0gSlNPcGNvZGVUcmFpdHM+CisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZDaGVja3BvaW50cygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhhc0No
ZWNrcG9pbnRzPFRyYWl0cz4oKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1
cm4gVHJhaXRzOjpjaGVja3BvaW50Q291bnRUYWJsZVtvcGNvZGVJRDxUcmFpdHM+KCldOworICAg
IH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9IEpTT3Bjb2RlVHJhaXRzPgogICAg
IGludCBzaXplU2hpZnRBbW91bnQoKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXgg
ZTY0NmQwNGFiOTM5ZmZiNzY3MjRjYzBhOGQ0NTFmMjhkYTNmMGVkMi4uNmYzNTczOGIzMTY4Yzg4
YzUxN2JmZDRlMGQ1MTU1MjNmZjZlZTk2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTUyMTUsMTAg
KzUyMTUsMTIgQEAgdm9pZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXIKICAgICBmb3IgKHVuc2lnbmVkIG9m
ZnNldCA9IGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBi
b2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CiAgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKCFpbnN0cnVj
dGlvbi0+aXM8T3BFbnRlcj4oKSk7Ci0gICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRl
eChjb2RlQmxvY2ssIGluc3RydWN0aW9uLnB0cigpLCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7Ci0gICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3Bl
cmFuZCkKLSAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIH0pOworICAgICAg
ICBmb3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IGluc3RydWN0aW9uLT5udW1iZXJPZkNoZWNr
cG9pbnRzKCk7IGNoZWNrcG9pbnQtLTspIHsKKyAgICAgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVJbmRleChjb2RlQmxvY2ssIGluc3RydWN0aW9uLnB0cigpLCBjaGVja3BvaW50LCBbJl0g
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKGxvY2FsKCkt
PnZpcnR1YWxSZWdpc3RlcigpID09IG9wZXJhbmQpCisgICAgICAgICAgICAgICAgICAgIGludmFs
aWRhdGUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CiAgICAgICAgIG9mZnNldCArPSBp
bnN0cnVjdGlvbi0+c2l6ZSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRm9yQWxsS2lsbHMuaAppbmRleCA4MGNkNzNkZTY2MzUxNjNmNTJjYjY4YWQ5OWIyZjViNTg4
YmUxYzQ0Li44ZDc4NTk1MjQwZWNhOTZmODJjZDk1Yjg0ZGUzYjhmM2RhM2IzM2NhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCkBAIC03OSwxOCArNzksMjEg
QEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZv
cmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAgICAgICAgIEFTU0VSVChiZWZvcmUuYnl0
ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSAhPSBhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2tw
b2ludCgpKTsKICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYmVmb3JlLmJ5dGVjb2Rl
SW5kZXgoKS5vZmZzZXQoKSA9PSBhZnRlci5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkgfHwgbm9k
ZUFmdGVyLT5vcCgpID09IEV4aXRPSyB8fCBub2RlQWZ0ZXItPm9wKCkgPT0gSW52YWxpZGF0aW9u
UG9pbnQsICJXaGVuIHRoZSBERkcgZG9lcyBjb2RlIG1vdGlvbiBpdCBzaG91bGQgY2hhbmdlIHRo
ZSBmb3JFeGl0IG9yaWdpbiB0byBtYXRjaCB0aGUgc3Vycm91bmRpbmcgYnl0ZWNvZGVzLiIpOwog
Ci0gICAgICAgICAgICBhdXRvIGNoZWNrcG9pbnRMaXZlQmVmb3JlID0gbGl2ZW5lc3NGb3JDaGVj
a3BvaW50KCpjb2RlQmxvY2ssIGJlZm9yZS5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAg
YXV0byBjaGVja3BvaW50TGl2ZUFmdGVyID0gbGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxv
Y2ssIGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUg
PSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5k
ZXgoKSk7CisgICAgICAgICAgICBhdXRvIGxpdmVBZnRlciA9IHRtcExpdmVuZXNzRm9yQ2hlY2tw
b2ludCgqY29kZUJsb2NrLCBhZnRlci5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgbGl2
ZUFmdGVyLmludmVydCgpOworICAgICAgICAgICAgbGl2ZUJlZm9yZS5maWx0ZXIobGl2ZUFmdGVy
KTsKIAotICAgICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdy
YXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBjb25zdCBGYXN0Qml0VmVj
dG9yJiBsaXZlQWZ0ZXIgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYWZ0ZXIuYnl0ZWNvZGVJ
bmRleCgpLCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CisgICAgICAgICAg
ICBsaXZlQmVmb3JlLmZvckVhY2hTZXRCaXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAg
ICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoYmVmb3JlSW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5k
Ojp0bXAodG1wKSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoYmVmb3Jl
LmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBt
b3Zpbmcgb24gdG8gYW5vdGhlciBieXRlY29kZSwgYWxsIHRlbXBzIHNob3VsZCBiZSBkZWFkIG5v
dy4KKyAgICAgICAgICAgIGF1dG8gbGl2ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2lu
dCgqY29kZUJsb2NrLCBiZWZvcmUuYnl0ZWNvZGVJbmRleCgpKTsKIAotICAgICAgICAgICAgZm9y
IChPcGVyYW5kIG9wZXJhbmQgOiBjaGVja3BvaW50TGl2ZUJlZm9yZSkgewotICAgICAgICAgICAg
ICAgIGlmIChjaGVja3BvaW50TGl2ZUFmdGVyLmNvbnRhaW5zKG9wZXJhbmQpIHx8ICghb3BlcmFu
ZC5pc1RtcCgpICYmIGxpdmVBZnRlcltvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgp
XSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGZ1bmN0
b3IocmVtYXBPcGVyYW5kKGJlZm9yZUlubGluZUNhbGxGcmFtZSwgb3BlcmFuZCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JF
YWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRtcCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVt
YXBPcGVyYW5kKGJlZm9yZUlubGluZUNhbGxGcmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkpKTsKKyAg
ICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IDUwMzQxMjAxZWJkMjBmMzZiZDM2ODAzNjll
MjkzOGZmNzQzMjMyMTAuLjhlODQ2Y2JlOWQ0ZDFjN2UxNjliY2Q4NmY3YTc1MDQ0YTkxZDhmNTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0xMTUyLDggKzExNTIs
OCBAQCBib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQgb3BlcmFuZCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPm51bVRtcHMoKSB8
fCBvcGVyYW5kSW5kZXggPCB0bXBPZmZzZXQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgICAgIGF1dG8gbGl2ZSA9IGxpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2Nr
LCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIGxp
dmUuY29udGFpbnMob3BlcmFuZCk7CisgICAgICAgICAgICBhdXRvIGJpdE1hcCA9IHRtcExpdmVu
ZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4
KCkpOworICAgICAgICAgICAgcmV0dXJuIGJpdE1hcC5nZXQob3BlcmFuZEluZGV4IC0gdG1wT2Zm
c2V0KTsKICAgICAgICAgfQogCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCA1MmIzNzE3NDNhZDg2YTI4YmFkNjJkMWVl
YTljMGRlMTQ3ODgwMDUzLi44NjM2MjI3ZjM5NDgzMzVkYjNkODQwZTgxZDNmYTBjNWNiYmE3Zjlm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC05MDQsOSArOTA0LDEwIEBA
IHB1YmxpYzoKIAogICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgo
KS5jaGVja3BvaW50KCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1U
bXBzKCkpOwotICAgICAgICAgICAgICAgIGF1dG8gbGl2ZSA9IGxpdmVuZXNzRm9yQ2hlY2twb2lu
dCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAg
ICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogbGl2ZSkKLSAgICAgICAgICAgICAgICAgICAg
ZnVuY3RvcihyZW1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBvcGVyYW5kKSk7CisgICAgICAg
ICAgICAgICAgYXV0byBsaXZlVG1wcyA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJs
b2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgICAgIGxp
dmVUbXBzLmZvckVhY2hTZXRCaXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZDo6dG1wKHRt
cCkpKTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAppbmRleCBkNDMwN2VkODcz
MDZmNDQ2NjIwYjc4MWIwZjAyZDVjYTQ1M2M5YmFiLi5jYzhmOWUxNzVkZmE5Y2E4YzA4ZTVjNzIw
MzhjNjQ0ZjFkZWI3YzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBMb2NhbHM6ICIs
IG1fc3RhdGUsICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIExvY2FscyBhdCAiLCBi
bG9jay0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQsICI6ICIsIG1fc3RhdGUsICJcbiIpOwog
ICAgICAgICAKICAgICAgICAgLy8gQXNzdW1lIHRoYXQgYmxvY2tzIGFmdGVyIHVzIGV4aXQuCiAg
ICAgICAgIGN1cnJlbnRFcG9jaC5idW1wKCk7CkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBNb3ZIaW50KSB7CiAgICAgICAgICAgICAgICAg
RXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0ICIsIG5vZGUsICI6
IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCAiLCBub2RlLCAiICgiLCBu
b2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgIik6IGN1cnJlbnQgPSAiLCBjdXJyZW50RXBvY2gsICIs
IGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxuIik7CiAgICAgICAgICAgICAgICAgaWYgKCFsb2Nh
bEVwb2NoIHx8IGxvY2FsRXBvY2ggPT0gY3VycmVudEVwb2NoKSB7CiAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFpvbWJpZUhpbnQpOwogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwCmluZGV4IDcxNjFmYmYyNjhmMzUwMTkyOTc4YTJmODUyZDUxY2M4YjEwOWU3MzUu
LjVhZGU5Yzk1YTA0ZWM2NTRiZTI5MmVhZDExNTU0Yjg0OWZhZTY5MzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmNwcApAQCAtNzU4LDcgKzc1OCw3IEBAIHZvaWQgUGxhbjo6Y2xl
YW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKQogICAgICAgICByZXR1cm47CiAKICAgICBD
b2RlQmxvY2sqIGFsdGVybmF0aXZlID0gbV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0gICAg
RmFzdEJpdFZlY3RvciBsaXZlbmVzcyA9IGFsdGVybmF0aXZlLT5saXZlbmVzc0FuYWx5c2lzKCku
Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KGFsdGVybmF0aXZlLCBtX29zckVudHJ5Qnl0
ZWNvZGVJbmRleCk7CisgICAgRmFzdEJpdFZlY3RvciBsaXZlbmVzcyA9IGFsdGVybmF0aXZlLT5s
aXZlbmVzc0FuYWx5c2lzKCkuZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbihhbHRlcm5hdGl2
ZSwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9
IG1fbXVzdEhhbmRsZVZhbHVlcy5udW1iZXJPZkxvY2FscygpOyBsb2NhbC0tOykgewogICAgICAg
ICBpZiAoIWxpdmVuZXNzW2xvY2FsXSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvT3Bjb2RlLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9P
cGNvZGUucmIKaW5kZXggODIzNzRiN2ZiZTg2ZDU3ODhiM2E0MDU4MTU4YTg5OGQ2YTZhMjA4Yy4u
MDVkMDk4ODA2OTA2ZWE4MjIzMDJkYzIxMDE2MmFjOGUwOWU2ODZkNiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKQEAgLTEzMCwxNSArMTMwLDE4IEBAIGNsYXNz
IE9wY29kZQogICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVkX25hbWV9IDogcHVi
bGljIEluc3RydWN0aW9uIHsKICAgICAje29wY29kZUlEfQorICAgICN7bGVuZ3RoVmFsdWV9CiAg
ICAgI3t0ZW1wc30KICAgICAje2NoZWNrcG9pbnRWYWx1ZXN9CiAKKwogI3tlbWl0dGVyfQogI3tk
dW1wZXJ9CiAje2NvbnN0cnVjdG9yc30KICN7c2V0dGVyc30je21ldGFkYXRhX3N0cnVjdF9hbmRf
YWNjZXNzb3J9CiAje21lbWJlcnN9CiB9OworI3tjaGVja3BvaW50U2l6ZUFzc2VydH0KIEVPRgog
ICAgIGVuZAogCkBAIC0xNDYsMTIgKzE0OSwyMiBAQCBFT0YKICAgICAgICAgInN0YXRpYyBjb25z
dGV4cHIgI3tvcGNvZGVJRFR5cGV9IG9wY29kZUlEID0gI3tuYW1lfTsiCiAgICAgZW5kCiAKKyAg
ICBkZWYgbGVuZ3RoVmFsdWUKKyAgICAgICAgInN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGxlbmd0
aCA9ICN7bGVuZ3RofTsiCisgICAgZW5kCisKICAgICBkZWYgY2hlY2twb2ludFZhbHVlcwogICAg
ICAgICByZXR1cm4gaWYgQGNoZWNrcG9pbnRzLm5pbD8KIAogICAgICAgICBbImVudW0gQ2hlY2tw
b2ludHMgOiB1aW50OF90IHsiXS5jb25jYXQoY2hlY2twb2ludHMubWFweyB8Y2hlY2twb2ludHwg
IiAgICAgICAgI3tjaGVja3BvaW50fSwiIH0pLmNvbmNhdChbIiAgICAgICAgbnVtYmVyT2ZDaGVj
a3BvaW50cywiLCAiICAgIH07Il0pLmpvaW4oIlxuIikKICAgICBlbmQKIAorICAgIGRlZiBjaGVj
a3BvaW50U2l6ZUFzc2VydAorICAgICAgICByZXR1cm4gaWYgQGNoZWNrcG9pbnRzLm5pbD8KKwor
ICAgICAgICAic3RhdGljX2Fzc2VydCgje2NhcGl0YWxpemVkX25hbWV9OjpsZW5ndGggPiAje2Nh
cGl0YWxpemVkX25hbWV9OjpudW1iZXJPZkNoZWNrcG9pbnRzLCBcIkZ1bGxCeXRlY29kZUxpdmVz
cyByZWxpZXMgb24gdGhlIGxlbmd0aCBvZiAje2NhcGl0YWxpemVkX25hbWV9IGJlaW5nIGdyZWF0
ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGNoZWNrcG9pbnRzXCIpOyIKKyAgICBlbmQKKwogICAgIGRl
ZiB0ZW1wcwogICAgICAgICByZXR1cm4gaWYgQHRtcHMubmlsPwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKaW5kZXggZjgzODBlZDU3NWQzMTNjNmVhMDZhYjVk
NzJjMjVhODY3NzZkOWNjOC4uNzJkMGM4YjQwZjEwMmJhMmNjYjg3ZWUzNTRkZWRiM2I0MTMyNTM3
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJi
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgpAQCAtODQs
MTMgKzg0LDE2IEBAIGNsYXNzIFNlY3Rpb24KIAogICAgICAgaWYgY29uZmlnWzplbWl0X2luX3N0
cnVjdHNfZmlsZV0KICAgICAgICAgICBpID0gMAorICAgICAgICAgIG91dC53cml0ZSgic3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCAje2NvbmZpZ1s6bWFjcm9fbmFtZV9jb21wb25lbnRdLmRvd25j
YXNlfUNoZWNrcG9pbnRDb3VudFRhYmxlW10gPSB7XG4iKQogICAgICAgICAgIHdoaWxlIHRydWUK
ICAgICAgICAgICAgICAgaWYgIW9wY29kZXNbaV0uY2hlY2twb2ludHMKLSAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICAwLCAvLyB0aGlz
IHVudXNlZCBlbnRyeSBpcyBuZWVkZWQgc2luY2UgTVNWQyB3b24ndCBjb21waWxlIGVtcHR5IGFy
cmF5c1xuIgorICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ9O1xuXG4iCiAgICAgICAgICAgICAg
ICAgICBvdXQgPDwgIiNkZWZpbmUgTlVNQkVSX09GXyN7Y29uZmlnWzptYWNyb19uYW1lX2NvbXBv
bmVudF19X1dJVEhfQ0hFQ0tQT0lOVFMgI3tpfVxuIgogICAgICAgICAgICAgICAgICAgYnJlYWsK
ICAgICAgICAgICAgICAgZW5kCiAKKyAgICAgICAgICAgICAgb3V0LndyaXRlKCIgICAgI3tvcGNv
ZGVzW2ldLmNoZWNrcG9pbnRzLmxlbmd0aH0sXG4iKQogICAgICAgICAgICAgICBpICs9IDEKICAg
ICAgICAgICBlbmQKICAgICAgICAgICBvdXQgPDwgIlxuIgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9D
aGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA2ZGZmNDI0ZWJkNjI4YjM3ZThiNmRj
ODBlYzkyMzUyNzQ3YzJhZGEyLi44MzVhMGY3NWM3ZmRlYTkzMTE5YmZhOTg1N2QxZDkzYjkzM2Y5
MWFlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA3LTA2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxs
ZXJAYXBwbGUuY29tPgorCisgICAgICAgIEJ5dGVjb2RlIFVzZURlZiBzaG91bGQgYmUgYXdhcmUg
b2YgY2hlY2twb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMzU2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogc3RyZXNzL2RlZi10aGVuLXVzZS1pbi1zaW5nbGUtYnl0ZWNvZGUtd2l0aC1jaGVj
a3BvaW50cy1mb3Itb2YuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAyMC0wNy0wNCAg
QWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgJVR5cGVk
QXJyYXklLnByb3RvdHlwZS57aW5kZXhPZixsYXN0SW5kZXhPZn0gYXJlIG5vdCBzcGVjLXBlcmZl
Y3QKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2RlZi10aGVuLXVzZS1pbi1zaW5nbGUtYnl0
ZWNvZGUtd2l0aC1jaGVja3BvaW50cy1mb3Itb2YuanMgYi9KU1Rlc3RzL3N0cmVzcy9kZWYtdGhl
bi11c2UtaW4tc2luZ2xlLWJ5dGVjb2RlLXdpdGgtY2hlY2twb2ludHMtZm9yLW9mLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQwMTgzNTFkOWJmNzNkNzQ3Zjc2ODEzZDE2M2Q2MDc0M2Q4MWQ2MDYKLS0tIC9kZXYv
bnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9kZWYtdGhlbi11c2UtaW4tc2luZ2xlLWJ5dGVjb2Rl
LXdpdGgtY2hlY2twb2ludHMtZm9yLW9mLmpzCkBAIC0wLDAgKzEsMTQgQEAKKy8vQCByZXF1aXJl
T3B0aW9ucygiLS1qaXRQb2xpY3lTY2FsZT0wIiwgIi0tdmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5l
c3M9MSIpCisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgZm9yIChsZXQgaT0wOyBpPDEwMDsgaSsrKSB7
CisgICAgbGV0IHU4ID0gbmV3IFVpbnQ4QXJyYXkoNCk7CisgICAgZm9yIChsZXQgcSBvZiB1OCkg
e30KKyAgICBsZXQgdTMyID0gbmV3IFVpbnQzMkFycmF5KDIpOworICAgIGZvciAobGV0IHEgb2Yg
dTMyKSB7fQorICB9Cit9CisKK2ZvciAobGV0IGk9MDsgaTwxMDA7IGkrKykgeworICBmb28oKTsK
K30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403710</attachid>
            <date>2020-07-07 12:11:50 -0700</date>
            <delta_ts>2020-07-07 16:52:22 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-213566-20200707121149.patch</filename>
            <type>text/plain</type>
            <size>53599</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzOTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
YTU0ZjdkNmIyMTZiNWYyNTFlZDAxOWY0MzM0OGVmZWNhNjk5ZmNjLi45OGM4Njk1MTg2NjUzZmZi
Y2U2N2Q1NmE2MDAzYzIyZDY5YzE4MGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NCBAQAorMjAyMC0wNy0wNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBCeXRlY29kZSBVc2VEZWYgc2hvdWxkIGJlIGF3YXJlIG9mIGNoZWNr
cG9pbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTM1NjYKKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBQcmV2
aW91c2x5LCB3ZSB0cmllZCB0byBzb2x2ZSB0ZWFjaGluZyBERkcgYWJvdXQgdXNlcyBhbmQgZGVm
cyBvZgorICAgICAgICBsb2NhbHMgYWNyb3NzIGNoZWNrcG9pbnRzIGJ5IGFza2luZyB3aGF0IGxv
Y2FscyB3ZXJlIGRlZidkIGF0IHNvbWUKKyAgICAgICAgY2hlY2twb2ludC4gSG93ZXZlciwgdGhp
cyB3YXMgc3VidGx5IHdyb25nIGJlY2F1c2Ugd2UgY291bGRuJ3QKKyAgICAgICAgcmVwb3J0IGFu
eSB1c2VzIGF0IHN1YnNlcXVlbnQgY2hlY2twb2ludHMgc28gREZHIHRob3VnaHQgdGhlCisgICAg
ICAgIGxvY2FsIHdhcyBkZWFkIGltbWVkaWF0ZWx5IGFmdGVyIGl0cyBiaXJ0aC4KKworICAgICAg
ICBUaGlzIHBhdGNoIHJldmVydHMgdGhhdCBjaGFuZ2UgYW5kIGluc3RlYWQgdGVhY2hlcyBCeXRl
Y29kZVVzZURlZgorICAgICAgICBhYm91dCBjaGVja3BvaW50cy4gUmlnaHQgbm93LCBCeXRlY29k
ZVVzZURlZiBvbmx5IGtub3dzIGFib3V0CisgICAgICAgIGxvY2FscyBhdCBjaGVja3BvaW50cyBi
dXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkgdGVhY2ggaXQgYWJvdXQgdG1wcworICAgICAgICBhdCB3
ZWxsLgorCisgICAgICAgIFNpbmNlIHRoZSB2ZWN0b3JzIGNvbnRhaW5pbmcgb3VyIGxpdmVuZXNz
IGJpdG1hcHMgd2VyZSBhbHJlYWR5CisgICAgICAgIHNwYXJzZSAodGhleSBhcmUgaW5kZXhlZCBi
eSB0aGUgYnl0ZWNvZGUgb2Zmc2V0KSB3ZSBjYW4gcmV1c2UgdGhlCisgICAgICAgIGdhcHMgdG8g
aG9sZCBvdXIgY2hlY2twb2ludCBsaXZlbmVzcyBpbmZvcm1hdGlvbi4gVG8gbWFrZSBzdXJlIHdl
CisgICAgICAgIGRvbid0IG92ZXJsYXAgYmV0d2VlbiB0aGUgbmV4dCBieXRlY29kZSBhbmQgYSBj
aGVja3BvaW50IGZvciB0aGUKKyAgICAgICAgY3VycmVudCBieXRlY29kZSB0aGVyZSBpcyBub3cg
YSBzdGF0aWMgYXNzZXJ0IHRoYXQgdGhlIGxlbmd0aCBvZgorICAgICAgICB0aGUgYnl0ZWNvZGUg
aXMgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgY2hlY2twb2ludHMuIFRoaXMKKyAgICAgICAg
YXNzdW1wdGlvbiBpcyBhbHJlYWR5IHRydWUgZm9yIGV4aXN0aW5nIGJ5dGVjb2RlcyB3aXRoIGNo
ZWNrcG9pbnRzIChhbmQKKyAgICAgICAgbGlrZWx5IHRvIGJlIHRydWUgZm9yIGZ1dHVyZSBvbmVz
IGFueXdheSkuCisKKyAgICAgICAgTWFueSBvZiB0aGUgQnl0ZWNvZGVMaXZlbmVzc1Byb3BlZ2F0
aW9uIGZ1bmN0aW9ucyBoYXZlIGJlZW4KKyAgICAgICAgcmVuYW1lZCB0byByZWZsZWN0IHRoYXQg
dGhleSBvcGVyYXRlIG92ZXIgdGhlIGZ1bGwgaW5zdHJ1Y3Rpb24sCisgICAgICAgIGluY2x1ZGlu
ZyBjaGVja3BvaW50cywgcmF0aGVyIHRoYW4ganVzdCB0aGUgQnl0ZWNvZGVJbmRleCBwYXNzZWQu
CisKKyAgICAgICAgTGFzdGx5LCB0aGlzIHBhdGNoIG1ha2VzIGEgc3BlY3VsYXRpdmUgZml4IHRv
IGZvckFsbEtpbGxlZE9wZXJhbmRzIHdoZXJlIHdlCisgICAgICAgIHdvdWxkbid0IHJlcG9ydCB0
aGF0IGFsbCB0bXBzIGRpZSBhdCB0aGUgZW5kIG9mIGVhY2ggYnl0ZWNvZGUuIEkgY2FuJ3QgdGhp
bmsKKyAgICAgICAgb2YgYSBjYXNlIHdoZXJlIHRoaXMgd291bGQgYnJlYWsgdGhpbmdzIGJ1dCBp
dCdzIHByb2JhYmx5IGdvb2QgaHlnaWVuZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2Rl
R2VuZXJhdG9yaWZpY2F0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6R2VuZXJhdG9yTGl2ZW5lc3NB
bmFseXNpczo6cnVuKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OkJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUluZGV4OjpjaGVja3BvaW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJ
bmRleDo6d2l0aENoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4
OjpwYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3Bw
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2
ZW5lc3MpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1
bHRzKToKKyAgICAgICAgKEpTQzo6dG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2Rl
SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsaXZlbmVzc0ZvckNoZWNrcG9pbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0
SW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpz
dGVwT3ZlckJ5dGVjb2RlSW5kZXhEZWYpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNl
cHRpb25IYW5kbGVyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9u
OjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24p
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFn
YXRpb246OmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25EZWYpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5z
dHJ1Y3Rpb25Vc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJv
cGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJbkV4Y2VwdGlvbkhhbmRsZXIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVM
b2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5
dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHA6CisgICAg
ICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAgICAgICAoSlND
Ojpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9C
eXRlY29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5k
ZXgpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZW5z
dXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6dmFsaWRhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0Z1bGxCeXRl
Y29kZUxpdmVuZXNzLmg6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpnZXRM
aXZlbmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjp0b0lu
ZGV4KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAoSlNDOjpC
YXNlSW5zdHJ1Y3Rpb246Om51bWJlck9mQ2hlY2twb2ludHMgY29uc3QpOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkZvckluQ29u
dGV4dDo6ZmluYWxpemUpOgorICAgICAgICAqIGRmZy9ERkdGb3JBbGxLaWxscy5oOgorICAgICAg
ICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE9wZXJhbmRzKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKiBnZW5l
cmF0b3IvT3Bjb2RlLnJiOgorICAgICAgICAqIGdlbmVyYXRvci9TZWN0aW9uLnJiOgorCiAyMDIw
LTA3LTA2ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgY2Fs
bE9uTWFpblRocmVhZCBzaG91bGQgdXNlIHRoZSBzYW1lIHF1ZXVlIGFzIFJ1bkxvb3A6OmRpc3Bh
dGNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVH
ZW5lcmF0b3JpZmljYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcAppbmRleCA2ZmJhMjI5N2MyOTFmZTQ4ZWI5OTNj
ZmE3ZWZmNjM5MWNjNGY4NjYzLi5hOGU1NmQwY2QzOTRiYzFiN2FjMDUyNmJlODY2N2VhYzhiZGQ3
ZTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVH
ZW5lcmF0b3JpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKQEAgLTE5NCw3ICsxOTQsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJ1bkxpdmVuZXNzRml4cG9pbnQoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMs
IG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCkpOwogCiAgICAgICAgIGZvciAoWWllbGREYXRh
JiBkYXRhIDogbV9nZW5lcmF0b3JpZmljYXRpb24ueWllbGRzKCkpCi0gICAgICAgICAgICBkYXRh
LmxpdmVuZXNzID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25zLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpLCBCeXRlY29kZUluZGV4KG1f
Z2VuZXJhdG9yaWZpY2F0aW9uLmluc3RydWN0aW9ucygpLmF0KGRhdGEucG9pbnQpLm5leHQoKS5v
ZmZzZXQoKSkpOworICAgICAgICAgICAgZGF0YS5saXZlbmVzcyA9IGdldExpdmVuZXNzSW5mb0F0
SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ2VuZXJhdG9yaWZpY2F0aW9u
LmdyYXBoKCksIEJ5dGVjb2RlSW5kZXgobV9nZW5lcmF0b3JpZmljYXRpb24uaW5zdHJ1Y3Rpb25z
KCkuYXQoZGF0YS5wb2ludCkubmV4dCgpLm9mZnNldCgpKSk7CiAgICAgfQogCiBwcml2YXRlOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXgu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKaW5kZXgg
NmUyNjZkM2RhZjNiMTI1ZTg3MzY3NTc1NDA1MmMzMTNjMGU1YTU3MS4uOWJjODQzNGUwZjliMzhi
MjhhMWI4MTFlMGUwMWZlZTIwMWI4YmI4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0zNCw2ICszNCw5IEBAIGNsYXNzIFByaW50U3Ry
ZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsKIAordXNpbmcgQ2hlY2twb2ludCA9IHVpbnQ4X3Q7Citz
dGF0aWMgY29uc3RleHByIENoZWNrcG9pbnQgbm9DaGVja3BvaW50cyA9IDA7CisKIGNsYXNzIEJ5
dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5kZXgoKSA9IGRlZmF1bHQ7CkBA
IC00Miw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgZXhwbGljaXQgQnl0
ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCwgdWludDhfdCBjaGVja3BvaW50ID0g
MCkKKyAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCBD
aGVja3BvaW50IGNoZWNrcG9pbnQgPSBub0NoZWNrcG9pbnRzKQogICAgICAgICA6IG1fcGFja2Vk
Qml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3BvaW50KSkKICAgICB7CiAgICAgICAgIEFT
U0VSVCgqdGhpcyk7CkBAIC01NCw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG51
bWJlck9mQ2hlY2twb2ludHMpOwogCiAgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQotICAgIHVpbnQ4X3QgY2hlY2tw
b2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9Cisg
ICAgQ2hlY2twb2ludCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYg
Y2hlY2twb2ludE1hc2s7IH0KICAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBt
X3BhY2tlZEJpdHM7IH0KIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6
OmludEhhc2gobV9wYWNrZWRCaXRzKTsgfQpAQCAtNjIsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09IGRl
bGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0cyh1aW50
MzJfdCBiaXRzKTsKLSAgICBCeXRlY29kZUluZGV4IHdpdGhDaGVja3BvaW50KHVuc2lnbmVkIGNo
ZWNrcG9pbnQpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgob2Zmc2V0KCksIGNoZWNrcG9p
bnQpOyB9CisgICAgQnl0ZWNvZGVJbmRleCB3aXRoQ2hlY2twb2ludChDaGVja3BvaW50IGNoZWNr
cG9pbnQpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgob2Zmc2V0KCksIGNoZWNrcG9pbnQp
OyB9CiAKICAgICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICE9IGludmFsaWRPZmZzZXQgJiYg
bV9wYWNrZWRCaXRzICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CkBAIC04MCwxMiArODMs
MTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGlu
dmFsaWRPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CiAKLSAg
ICBzdGF0aWMgdWludDMyX3QgcGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1aW50OF90IGNo
ZWNrcG9pbnQpOworICAgIHN0YXRpYyB1aW50MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5k
ZXgsIENoZWNrcG9pbnQpOwogCiAgICAgdWludDMyX3QgbV9wYWNrZWRCaXRzIHsgaW52YWxpZE9m
ZnNldCB9OwogfTsKIAotaW5saW5lIHVpbnQzMl90IEJ5dGVjb2RlSW5kZXg6OnBhY2sodWludDMy
X3QgYnl0ZWNvZGVJbmRleCwgdWludDhfdCBjaGVja3BvaW50KQoraW5saW5lIHVpbnQzMl90IEJ5
dGVjb2RlSW5kZXg6OnBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgQ2hlY2twb2ludCBjaGVj
a3BvaW50KQogewogICAgIEFTU0VSVChjaGVja3BvaW50IDwgbnVtYmVyT2ZDaGVja3BvaW50cyk7
CiAgICAgQVNTRVJUKChieXRlY29kZUluZGV4IDw8IGNoZWNrcG9pbnRTaGlmdCkgPj4gY2hlY2tw
b2ludFNoaWZ0ID09IGJ5dGVjb2RlSW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAppbmRleCA0
MmE2MzVlYzhlM2U0ODcxMjQ5MzMzYWI4ODUwNmM1NzZmYjY3M2I5Li4xNjE4MjUwNDE1Nzk4MDFh
OWY0Mjk2YWFhYzZlMWNjNTk3NTI2YTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcApAQCAtMzEs
NyArMzEsNiBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZ1bGxCeXRlY29k
ZUxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlIDx3
dGYvU2NvcGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ0LDM2ICs0MywyMCBAQCBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sq
IGNvZGVCbG9jaykKICAgICAgICAgZHVtcFJlc3VsdHMoY29kZUJsb2NrKTsKIH0KIAotdm9pZCBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBGYXN0Qml0
VmVjdG9yJiByZXN1bHQpCi17Ci0gICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4Lm9mZnNldCgp
KTsKLSAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygp
KTsKLSAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKLSAgICByZXN1bHQucmVzaXpl
KGJsb2NrLT5vdXQoKS5udW1CaXRzKCkpOwotICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0
ZWNvZGVJbmRleChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3JhcGgs
ICpibG9jaywgYnl0ZWNvZGVJbmRleCwgcmVzdWx0KTsKLX0KLQotRmFzdEJpdFZlY3RvciBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIEZh
c3RCaXRWZWN0b3Igb3V0OwotICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChjb2Rl
QmxvY2ssIGJ5dGVjb2RlSW5kZXgsIG91dCk7Ci0gICAgcmV0dXJuIG91dDsKLX0KLQogdm9pZCBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpCiB7CiAgICAgRmFzdEJpdFZl
Y3RvciBvdXQ7CiAKLSAgICByZXN1bHQubV9iZWZvcmVVc2VWZWN0b3IucmVzaXplKGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICByZXN1bHQubV9hZnRlclVzZVZlY3Rvci5y
ZXNpemUoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIHNpemVfdCBzaXpl
ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgcmVzdWx0Lm1fdXNlc0Jl
Zm9yZS5yZXNpemUoc2l6ZSk7CisgICAgcmVzdWx0Lm1fdXNlc0FmdGVyLnJlc2l6ZShzaXplKTsK
ICAgICAKICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiBtX2dyYXBoLmJhc2lj
QmxvY2tzSW5SZXZlcnNlT3JkZXIoKSkgewogICAgICAgICBpZiAoYmxvY2suaXNFbnRyeUJsb2Nr
KCkgfHwgYmxvY2suaXNFeGl0QmxvY2soKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKICAgICAgICAgb3V0ID0gYmxvY2sub3V0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGF1dG8g
dXNlID0gWyZdICh1bnNpZ25lZCBiaXRJbmRleCkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyB0
aGUgdXNlIGZ1bmN0b3IsIHNvIHdlIHNldCB0aGUgYml0LgogICAgICAgICAgICAgb3V0W2JpdElu
ZGV4XSA9IHRydWU7CkBAIC04OSwxMiArNzIsMTcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bGxCeXQK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2suZGVsdGEoKS5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgICAgIGN1cnNvciAtPSBibG9jay5kZWx0YSgpW2ldOwogICAgICAgICAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChibG9jay5sZWFkZXJPZmZz
ZXQoKSArIGN1cnNvcik7Ci0KLSAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25EZWYoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIGRlZik7Ci0gICAg
ICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uVXNlSW5FeGNlcHRpb25IYW5kbGVyKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25zLCBtX2dyYXBoLCBieXRlY29kZUluZGV4LCB1c2UpOwotICAgICAgICAg
ICAgcmVzdWx0Lm1fYWZ0ZXJVc2VWZWN0b3JbYnl0ZWNvZGVJbmRleC5vZmZzZXQoKV0gPSBvdXQ7
IC8vIEFmdGVyVXNlIHBvaW50LgotICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvblVzZShj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKLSAg
ICAgICAgICAgIHJlc3VsdC5tX2JlZm9yZVVzZVZlY3RvcltieXRlY29kZUluZGV4Lm9mZnNldCgp
XSA9IG91dDsgLy8gQmVmb3JlVXNlIHBvaW50LgorICAgICAgICAgICAgYXV0byBpbnN0cnVjdGlv
biA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIGZvciAoQ2hl
Y2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsg
Y2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgICAgIEFTU0VSVChjaGVja3BvaW50IDwgaW5z
dHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IGJ5dGVj
b2RlSW5kZXgud2l0aENoZWNrcG9pbnQoY2hlY2twb2ludCk7CisKKyAgICAgICAgICAgICAgICBz
dGVwT3ZlckJ5dGVjb2RlSW5kZXhEZWYoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ3JhcGgs
IGJ5dGVjb2RlSW5kZXgsIGRlZik7CisgICAgICAgICAgICAgICAgc3RlcE92ZXJCeXRlY29kZUlu
ZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dyYXBo
LCBieXRlY29kZUluZGV4LCB1c2UpOworICAgICAgICAgICAgICAgIHJlc3VsdC5tX3VzZXNBZnRl
cltyZXN1bHQudG9JbmRleChieXRlY29kZUluZGV4KV0gPSBvdXQ7IC8vIEFmdGVyVXNlIHBvaW50
LgorICAgICAgICAgICAgICAgIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZShjb2RlQmxvY2ssIGlu
c3RydWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQubV91c2VzQmVmb3JlW3Jlc3VsdC50b0luZGV4KGJ5dGVjb2RlSW5kZXgpXSA9IG91
dDsgLy8gQmVmb3JlVXNlIHBvaW50LgorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
fQpAQCAtMTUwLDcgKzEzOCw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1w
UmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgICAgIGNvbnN0IGF1dG8gY3Vy
cmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKIAogICAg
ICAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFyaWFibGVzOiIpOwotICAgICAgICAgICAgRmFzdEJp
dFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkpOworICAgICAgICAgICAgRmFzdEJp
dFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbihjb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKTsKICAgICAgICAgICAgIGR1bXBCaXRW
ZWN0b3IobGl2ZUJlZm9yZSk7CiAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICAgICAgICAg
ICAgIGNvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZpbGUoKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKQEAgLTE3NiwxNCArMTY0LDEwIEBAIGNvbnN0ZXhwciBib29sIGVudW1WYWx1ZXNF
cXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlwZTIgdjIpCiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUyPih2Mik7
CiB9CiAKLVZlY3RvcjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1wcz4gbGl2ZW5lc3NGb3JD
aGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCitCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hl
Y2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQogewotICAgIFZlY3RvcjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1wcz4gcmVz
dWx0OwotICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
OwotCi0gICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7Ci0gICAgICAgIEFT
U0VSVChyZXN1bHQuc2l6ZSgpIDw9IG1heE51bUNoZWNrcG9pbnRUbXBzKTsKLSAgICB9KTsKKyAg
ICBCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHJlc3VsdDsKKyAgICBDaGVja3BvaW50IGNo
ZWNrcG9pbnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKIAogICAgIGlmICghY2hlY2tw
b2ludCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE5NSwxNiArMTc5LDE0IEBAIFZlY3Rv
cjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1wcz4gbGl2ZW5lc3NGb3JDaGVja3BvaW50KGNv
bnN0IENvZGVCbG9jayYgY29kCiAgICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0VxdWFs
QXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BUYWlsQ2FsbFZhcmFyZ3M6Om1h
a2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0Nv
dW50SW5jbHVkaW5nVGhpcywgT3BUYWlsQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhp
cykpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BD
YWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wQ29uc3RydWN0VmFyYXJnczo6bWFrZUNhbGwpICYmIGVu
dW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdU
aGlzLCBPcENvbnN0cnVjdFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhpcykpOwogICAgICAg
ICBpZiAoY2hlY2twb2ludCA9PSBPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCkKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoT3BlcmFuZDo6dG1wKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVk
aW5nVGhpcykpOworICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjphcmdDb3Vu
dEluY2x1ZGluZ1RoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBjYXNl
IG9wX2l0ZXJhdG9yX29wZW46IHsKLSAgICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gT3BJdGVyYXRv
ck9wZW46OmdldE5leHQpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVCbG9jay5pbnN0
cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BJdGVyYXRvck9wZW4+KCkubV9pdGVy
YXRvcik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIGNhc2Ugb3BfaXRlcmF0
b3JfbmV4dDogewotICAgICAgICByZXN1bHQuYXBwZW5kKE9wZXJhbmQ6OnRtcChPcEl0ZXJhdG9y
TmV4dDo6bmV4dFJlc3VsdCkpOworICAgICAgICByZXN1bHQuc2V0KE9wSXRlcmF0b3JOZXh0Ojpu
ZXh0UmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgZGVmYXVsdDoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaAppbmRleCBiZTVlZTJmY2QzYTY0ZTU2M2FlYTFmM2YyMjI3OTFlNDY4
YmI2MTA0Li5hMjA0MTdmMjJjYjFiMmQzNzc2YjA5YTY3NzEzOWMyMjdkMjYwYzI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5oCkBAIC01MSwyNiArNTEsMjYgQEAgZW51bSBjbGFzcyBMaXZlbmVzc0NhbGN1
bGF0aW9uUG9pbnQgOiB1aW50OF90IHsKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlv
biB7CiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5h
bWUgVXNlRnVuY3Rvcj4KLSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uVXNlKENv
ZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBC
eXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJik7CisgICAgc3RhdGljIHZvaWQgc3RlcE92
ZXJCeXRlY29kZUluZGV4VXNlKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJik7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVuY3Rvcj4K
LSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uVXNlSW5FeGNlcHRpb25IYW5kbGVy
KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgm
LCBCeXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJik7CisgICAgc3RhdGljIHZvaWQgc3Rl
cE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKENvZGVCbG9ja1R5cGUqLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBj
b25zdCBVc2VGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwg
dHlwZW5hbWUgRGVmRnVuY3Rvcj4KLSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9u
RGVmKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3Jh
cGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBEZWZGdW5jdG9yJik7CisgICAgc3RhdGljIHZvaWQg
c3RlcE92ZXJCeXRlY29kZUluZGV4RGVmKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlv
blN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBEZWZGdW5jdG9y
Jik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBVc2VG
dW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotICAgIHN0YXRpYyB2b2lkIHN0ZXBPdmVySW5z
dHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNv
ZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImLCBjb25zdCBEZWZGdW5j
dG9yJik7CisgICAgc3RhdGljIHZvaWQgc3RlcE92ZXJCeXRlY29kZUluZGV4KENvZGVCbG9ja1R5
cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUlu
ZGV4LCBjb25zdCBVc2VGdW5jdG9yJiwgY29uc3QgRGVmRnVuY3RvciYpOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KICAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3Ry
dWN0aW9uKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2Rl
R3JhcGgmLCBCeXRlY29kZUluZGV4LCBGYXN0Qml0VmVjdG9yJiBvdXQpOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPgotICAgIHN0
YXRpYyBib29sIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChDb2RlQmxvY2tU
eXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNC
bG9jayYsIEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CisgICAgc3RhdGlj
IGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayYs
IEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+CiAgICAgc3RhdGlj
IGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3Qg
SW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayYpOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25z
PgotICAgIHN0YXRpYyBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRl
eChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5
dGVjb2RlSW5kZXgpOworICAgIHN0YXRpYyBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0
SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVjb2Rl
R3JhcGgmLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KICAgICBzdGF0aWMgdm9pZCBydW5MaXZlbmVz
c0ZpeHBvaW50KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdy
YXBoJik7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNv
ZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOwogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2Rl
QmxvY2sqKTsKICAgICAKLSAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVJbmRleChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKKyAgICBGYXN0Qml0VmVjdG9yIGdl
dExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkgeyByZXR1cm4gQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9u
OjpnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCk7IH0KICAgICAKICAgICB2b2lkIGNv
bXB1dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiwgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIHJlc3Vs
dCk7CiAKQEAgLTkyLDEyICs5MiwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgZHVt
cFJlc3VsdHMoQ29kZUJsb2NrKik7CiAKLSAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVJbmRleChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBGYXN0Qml0VmVjdG9yJik7Ci0KICAg
ICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCi1WZWN0b3I8T3BlcmFuZCwgbWF4TnVtQ2hl
Y2twb2ludFRtcHM+IGxpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smLCBCeXRl
Y29kZUluZGV4KTsKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JD
aGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5kZXgpOwogCiBpbmxpbmUgYm9v
bCBvcGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJhbmRU
aGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9w
ZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKaW5kZXggYzYwOTY1YmNjOTdh
N2I4OTkwZGI5OGZkMjNkOTliNWUwOGY5Y2RkNS4uNjQ4YzRiNWU5NjMwODUxZDg5ODE3MWQxZDA3
NzU2NjI0ZWE2NTU1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlcklubGluZXMuaCIKIApAQCAt
NTgsMTEgKzU5LDExIEBAIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1By
b3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uRGVmKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9j
aywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQoraW5s
aW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5k
ZXhEZWYoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYg
aW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
LCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCiB7CiAgICAgYXV0byogaW5zdHJ1Y3Rpb24gPSBpbnN0
cnVjdGlvbnMuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4KAotICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0aW9uLAorICAgICAgICBjb2Rl
QmxvY2ssIGluc3RydWN0aW9uLCBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSwKICAgICAgICAg
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKG9wZXJhbmQpKQogICAgICAgICAgICAgICAgIGRlZihvcGVyYW5k
LnRvTG9jYWwoKSk7CkBAIC03MCwxMSArNzEsMTEgQEAgaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZl
bmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uRGVmKENvZGVCbG9ja1R5cGUqIGMK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVuY3Rv
cj4KLWlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0
cnVjdGlvblVzZShDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSkKK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5l
c3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlKENvZGVCbG9ja1R5cGUqIGNv
ZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVH
cmFwaCYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYgdXNl
KQogewogICAgIGF1dG8qIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlSW5k
ZXgpLnB0cigpOwogICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleCgKLSAgICAgICAgY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbiwKKyAgICAgICAgY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCksCiAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhvcGVy
YW5kKSkKICAgICAgICAgICAgICAgICB1c2Uob3BlcmFuZC50b0xvY2FsKCkpOwpAQCAtODIsMTAg
KzgzLDEwIEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92
ZXJJbnN0cnVjdGlvblVzZShDb2RlQmxvY2tUeXBlKiBjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBCeXRlY29k
ZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJbkV4Y2VwdGlvbkhh
bmRsZXIoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYs
IEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0
IFVzZUZ1bmN0b3ImIHVzZSkKK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlv
bjo6c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKENvZGVCbG9ja1R5
cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiBn
cmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJiB1c2Up
CiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGNlcHRpb24gaGFuZGxlciwgd2Ugd2FudCB0aGUg
bGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAotICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2Nr
IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBsaXZlLWluIG9mIHRoaXMgcGFydGljdWxhciBieXRlY29k
ZS4KKyAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0aGUg
bGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgQnl0ZWNvZGVJbmRleC4KICAgICBpZiAoYXV0byog
aGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCkpIHsKICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sgPSBncmFwaC5m
aW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KTsKICAgICAgICAg
QVNTRVJUKGhhbmRsZXJCbG9jayk7CkBAIC05Niw5ICs5Nyw5IEBAIGlubGluZSB2b2lkIEJ5dGVj
b2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvblVzZUluRXhjZXB0aW9u
SGFuZGxlCiAvLyBTaW1wbGlmaWVkIGludGVyZmFjZSB0byBieXRlY29kZSB1c2UvZGVmLCB3aGlj
aCBkZXRlcm1pbmVzIGRlZnMgZmlyc3QgYW5kIHRoZW4gdXNlcywgYW5kIGluY2x1ZGVzCiAvLyBl
eGNlcHRpb24gaGFuZGxlcnMgaW4gdGhlIHVzZXMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlLCB0eXBlbmFtZSBVc2VGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotaW5saW5l
IHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwg
Y29uc3QgVXNlRnVuY3RvciYgdXNlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCitpbmxpbmUgdm9p
ZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRleChDb2Rl
QmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlv
bnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNv
bnN0IFVzZUZ1bmN0b3ImIHVzZSwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQogewotICAgIC8vIFRo
aXMgYWJzdHJhY3RseSBleGVjdXRlIHRoZSBpbnN0cnVjdGlvbiBpbiByZXZlcnNlLiBJbnN0cnVj
dGlvbnMgbG9naWNhbGx5IGZpcnN0IHVzZSBvcGVyYW5kcyBhbmQKKyAgICAvLyBUaGlzIGFic3Ry
YWN0bHkgZXhlY3V0ZXMgdGhlIEJ5dGVjb2RlSW5kZXggaW4gcmV2ZXJzZS4gSW5zdHJ1Y3Rpb25z
IGxvZ2ljYWxseSBmaXJzdCB1c2Ugb3BlcmFuZHMgYW5kCiAgICAgLy8gdGhlbiBkZWZpbmUgb3Bl
cmFuZHMuIFRoaXMgbG9naWNhbCBvcmRlcmluZyBpcyBuZWNlc3NhcnkgZm9yIG9wZXJhdGlvbnMg
dGhhdCB1c2UgYW5kIGRlZiB0aGUgc2FtZQogICAgIC8vIG9wZXJhbmQsIGxpa2U6CiAgICAgLy8K
QEAgLTExMywzMSArMTE0LDM1IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdh
dGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlCiAgICAgLy8gdXNl
cyBiZWZvcmUgZGVmcywgdGhlbiB0aGUgYWRkIG9wZXJhdGlvbiBhYm92ZSB3b3VsZCBhcHBlYXIg
dG8gbm90IGhhdmUgbG9jMSBsaXZlLCBzaW5jZSB3ZSdkCiAgICAgLy8gZmlyc3QgYWRkIGl0IHRv
IHRoZSBvdXQgc2V0ICh0aGUgdXNlKSwgYW5kIHRoZW4gd2UnZCByZW1vdmUgaXQgKHRoZSBkZWYp
LgogCi0gICAgc3RlcE92ZXJJbnN0cnVjdGlvbkRlZihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywg
Z3JhcGgsIGJ5dGVjb2RlSW5kZXgsIGRlZik7Ci0gICAgc3RlcE92ZXJJbnN0cnVjdGlvblVzZUlu
RXhjZXB0aW9uSGFuZGxlcihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2Rl
SW5kZXgsIHVzZSk7Ci0gICAgc3RlcE92ZXJJbnN0cnVjdGlvblVzZShjb2RlQmxvY2ssIGluc3Ry
dWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIHVzZSk7CisgICAgc3RlcE92ZXJCeXRlY29k
ZUluZGV4RGVmKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVJbmRleCwg
ZGVmKTsKKyAgICBzdGVwT3ZlckJ5dGVjb2RlSW5kZXhVc2VJbkV4Y2VwdGlvbkhhbmRsZXIoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZUluZGV4LCB1c2UpOworICAgIHN0
ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZShjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5
dGVjb2RlSW5kZXgsIHVzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+
CiBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1
Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYg
aW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4LCBGYXN0Qml0VmVjdG9yJiBvdXQpCiB7Ci0gICAgc3RlcE92ZXJJbnN0cnVjdGlvbigK
LSAgICAgICAgY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZUluZGV4LAot
ICAgICAgICBbJl0gKHVuc2lnbmVkIGJpdEluZGV4KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlz
IHRoZSB1c2UgZnVuY3Rvciwgc28gd2Ugc2V0IHRoZSBiaXQuCi0gICAgICAgICAgICBvdXRbYml0
SW5kZXhdID0gdHJ1ZTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdICh1bnNpZ25lZCBiaXRJbmRl
eCkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmIGZ1bmN0b3IsIHNvIHdlIGNsZWFy
IHRoZSBiaXQuCi0gICAgICAgICAgICBvdXRbYml0SW5kZXhdID0gZmFsc2U7Ci0gICAgICAgIH0p
OworICAgIGF1dG8gbnVtYmVyT2ZDaGVja3BvaW50cyA9IGluc3RydWN0aW9ucy5hdChieXRlY29k
ZUluZGV4KS0+bnVtYmVyT2ZDaGVja3BvaW50cygpOworICAgIGZvciAoQ2hlY2twb2ludCBjaGVj
a3BvaW50ID0gbnVtYmVyT2ZDaGVja3BvaW50czsgY2hlY2twb2ludC0tOykgeworICAgICAgICBz
dGVwT3ZlckJ5dGVjb2RlSW5kZXgoCisgICAgICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0aW9u
cywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgud2l0aENoZWNrcG9pbnQoY2hlY2twb2ludCksCisgICAg
ICAgICAgICBbJl0gKHVuc2lnbmVkIGJpdEluZGV4KSB7CisgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyB0aGUgdXNlIGZ1bmN0b3IsIHNvIHdlIHNldCB0aGUgYml0LgorICAgICAgICAgICAgICAg
IG91dFtiaXRJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXSAo
dW5zaWduZWQgYml0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBkZWYg
ZnVuY3Rvciwgc28gd2UgY2xlYXIgdGhlIGJpdC4KKyAgICAgICAgICAgICAgICBvdXRbYml0SW5k
ZXhdID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLWlubGluZSBib29sIEJ5
dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29k
ZUluZGV4KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25zJiBpbnN0
cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUJhc2ljQmxvY2smIGJsb2Nr
LCBCeXRlY29kZUluZGV4IHRhcmdldEluZGV4LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCitpbmxp
bmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9ySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlv
bnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlQmFzaWNCbG9j
ayYgYmxvY2ssIEJ5dGVjb2RlSW5kZXggdGFyZ2V0SW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3Vs
dCkKIHsKICAgICBBU1NFUlQoIWJsb2NrLmlzRXhpdEJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxv
Y2suaXNFbnRyeUJsb2NrKCkpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXRhcmdldEluZGV4
LmNoZWNrcG9pbnQoKSwgImNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24gY2FuJ3Qg
YmUgdXNlZCB0byBhc2sgcXVlc3Rpb25zIGFib3V0IGNoZWNrcG9pbnRzIik7CiAKICAgICBGYXN0
Qml0VmVjdG9yIG91dCA9IGJsb2NrLm91dCgpOwogCkBAIC0xNTgsMTkgKzE2MywyMCBAQCBpbmxp
bmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQmxvY2soQ29kZUJsb2NrVAogewogICAgIGlmIChibG9jay5pc0V4aXRCbG9jaygpIHx8IGJs
b2NrLmlzRW50cnlCbG9jaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNv
bXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIGluc3RydWN0aW9u
cywgZ3JhcGgsIGJsb2NrLCBCeXRlY29kZUluZGV4KGJsb2NrLmxlYWRlck9mZnNldCgpKSwgYmxv
Y2suaW4oKSk7CisgICAgcmV0dXJuIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24o
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBibG9jaywgQnl0ZWNvZGVJbmRleChibG9j
ay5sZWFkZXJPZmZzZXQoKSksIGJsb2NrLmluKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+Ci1pbmxpbmUgRmFzdEJpdFZlY3Rv
ciBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJ
bmRleChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1
Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQoraW5saW5lIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpnZXRM
aXZlbmVzc0luZm9BdEluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCksICJnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uIGNhbid0
IGJlIHVzZWQgdG8gYXNrIHF1ZXN0aW9ucyBhYm91dCBjaGVja3BvaW50cyIpOwogICAgIEJ5dGVj
b2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAgIEFTU0VSVChibG9jayk7CiAgICAgQVNT
RVJUKCFibG9jay0+aXNFbnRyeUJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJs
b2NrKCkpOwogICAgIEZhc3RCaXRWZWN0b3Igb3V0OwogICAgIG91dC5yZXNpemUoYmxvY2stPm91
dCgpLm51bUJpdHMoKSk7Ci0gICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgKmJsb2NrLCBieXRlY29kZUluZGV4LCBv
dXQpOworICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBp
bnN0cnVjdGlvbnMsIGdyYXBoLCAqYmxvY2ssIGJ5dGVjb2RlSW5kZXgsIG91dCk7CiAgICAgcmV0
dXJuIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlVXNlRGVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZVVzZURlZi5jcHAKaW5kZXggY2U0NzBjOTIyZTg4M2ZlMDE3ZjA4ZDZiMmYzNjcyNDU3M2Rl
ODE5ZS4uOWY1NThkNjY4MDU1NmZlNGZlMTM1Njk5NjNhNWY3MTUzYTNjNTk3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCkBAIC0z
Myw2ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIFVTRVNfT1JfREVGUyhfX29w
Y29kZSwgLi4uKSBcCiAgICAgY2FzZSBfX29wY29kZTo6b3Bjb2RlSUQ6IHsgXAorICAgICAgICBz
dGF0aWNfYXNzZXJ0KF9fb3Bjb2RlOjpvcGNvZGVJRCA+PSBOVU1CRVJfT0ZfQllURUNPREVfV0lU
SF9DSEVDS1BPSU5UUywgIkRvbid0IHVzZSB0aGlzIG1hY3JvIGZvciBieXRlY29kZXMgdGhhdCBo
YXZlIGNoZWNrcG9pbnRzLiIpOyBcCiAgICAgICAgIGF1dG8gX19ieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxfX29wY29kZT4oKTsgXAogICAgICAgICBXVEZfTEFaWV9GT1JfRUFDSF9URVJNKENB
TExfRlVOQ1RPUiwgX19WQV9BUkdTX18pIFwKICAgICAgICAgcmV0dXJuOyBcCkBAIC00MSwxNyAr
NDIsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZGVmaW5lIFVTRVMgVVNFU19PUl9ERUZTCiAjZGVm
aW5lIERFRlMgVVNFU19PUl9ERUZTCiAKLXZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBjb25zdCBGdW5jdGlvbjx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5jdG9y
KQordm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBz
Y29wZVJlZ2lzdGVyLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENoZWNrcG9pbnQg
Y2hlY2twb2ludCwgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4mIGZ1
bmN0b3IpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KTsKIAotICAgIGF1dG8gaGFuZGxlTmV3QXJyYXlMaWtlID0gWyZdKGF1dG8gb3ApIHsKKworICAg
IGF1dG8gaGFuZGxlTmV3QXJyYXlMaWtlID0gWyZdIChhdXRvIG9wKSB7CiAgICAgICAgIGludCBi
YXNlID0gb3AubV9hcmd2Lm9mZnNldCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0
YXRpY19jYXN0PGludD4ob3AubV9hcmdjKTsgaSsrKQogICAgICAgICAgICAgZnVuY3RvcihWaXJ0
dWFsUmVnaXN0ZXIgeyBiYXNlIC0gaSB9KTsKICAgICB9OwogCi0gICAgYXV0byBoYW5kbGVPcENh
bGxMaWtlID0gWyZdKGF1dG8gb3ApIHsKKyAgICBhdXRvIGhhbmRsZU9wQ2FsbExpa2UgPSBbJl0g
KGF1dG8gb3ApIHsKICAgICAgICAgZnVuY3RvcihvcC5tX2NhbGxlZSk7CiAgICAgICAgIGludCBs
YXN0QXJnID0gLXN0YXRpY19jYXN0PGludD4ob3AubV9hcmd2KSArIENhbGxGcmFtZTo6dGhpc0Fy
Z3VtZW50T2Zmc2V0KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8
aW50PihvcC5tX2FyZ2MpOyBpKyspCkBAIC02MSw2ICs2MywxNSBAQCB2b2lkIGNvbXB1dGVVc2Vz
Rm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0
IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfTsKIAorICAgIGF1dG8gdXNlQXRFYWNoQ2hl
Y2twb2ludCA9IFsmXSAoYXV0by4uLiB2aXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIChmdW5j
dG9yKHZpcnR1YWxSZWdpc3RlcnMpLCAuLi4pOworICAgIH07CisKKyAgICBhdXRvIHVzZUF0RWFj
aENoZWNrcG9pbnRTdGFydGluZ1dpdGggPSBbJl0gKENoZWNrcG9pbnQgdGFyZ2V0LCBhdXRvLi4u
IHZpcnR1YWxSZWdpc3RlcnMpIHsKKyAgICAgICAgaWYgKHRhcmdldCA+PSBjaGVja3BvaW50KQor
ICAgICAgICAgICAgKGZ1bmN0b3IodmlydHVhbFJlZ2lzdGVycyksIC4uLik7CisgICAgfTsKKwog
ICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICBjYXNlIG9wX3dpZGUxNjoKICAgICBjYXNlIG9w
X3dpZGUzMjoKQEAgLTI1MCw5ICsyNjEsMjIgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2Rl
SW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJbnN0cnUKICAg
ICBVU0VTKE9wSGFzU3RydWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9y
KQogICAgIFVTRVMoT3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFzZSwgcHJvcGVydHksIGVu
dW1lcmF0b3IpCiAgICAgVVNFUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5
LCBlbnVtZXJhdG9yKQotICAgIFVTRVMoT3BDb25zdHJ1Y3RWYXJhcmdzLCBjYWxsZWUsIHRoaXNW
YWx1ZSwgYXJndW1lbnRzKQotICAgIFVTRVMoT3BDYWxsVmFyYXJncywgY2FsbGVlLCB0aGlzVmFs
dWUsIGFyZ3VtZW50cykKLSAgICBVU0VTKE9wVGFpbENhbGxWYXJhcmdzLCBjYWxsZWUsIHRoaXNW
YWx1ZSwgYXJndW1lbnRzKQorCisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxWYXJhcmdzPigpOworICAgICAg
ICB1c2VBdEVhY2hDaGVja3BvaW50KGJ5dGVjb2RlLm1fY2FsbGVlLCBieXRlY29kZS5tX3RoaXNW
YWx1ZSwgYnl0ZWNvZGUubV9hcmd1bWVudHMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcFRhaWxDYWxsVmFyYXJncz4oKTsKKyAgICAgICAgdXNlQXRFYWNoQ2hl
Y2twb2ludChieXRlY29kZS5tX2NhbGxlZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUsIGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0
cnVjdF92YXJhcmdzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BDb25zdHJ1Y3RWYXJhcmdzPigpOworICAgICAgICB1c2VBdEVhY2hDaGVja3BvaW50KGJ5dGVj
b2RlLm1fY2FsbGVlLCBieXRlY29kZS5tX3RoaXNWYWx1ZSwgYnl0ZWNvZGUubV9hcmd1bWVudHMp
OworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgVVNFUyhPcEdldERpcmVjdFBuYW1lLCBi
YXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCiAKQEAgLTI2NSw4ICsyODksMTkgQEAg
dm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29w
ZVJlZ2lzdGVyLCBjb25zdCBJbnN0cnUKIAogICAgIFVTRVMoT3BZaWVsZCwgZ2VuZXJhdG9yLCBh
cmd1bWVudCkKIAotICAgIFVTRVMoT3BJdGVyYXRvck9wZW4sIHN5bWJvbEl0ZXJhdG9yLCBpdGVy
YWJsZSkKLSAgICBVU0VTKE9wSXRlcmF0b3JOZXh0LCBpdGVyYXRvciwgbmV4dCwgaXRlcmFibGUp
CisgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CisgICAgICAgIHVzZUF0RWFjaENoZWNr
cG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGwsIGJ5dGVjb2RlLm1f
c3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUpOworICAgICAgICB1c2VBdEVhY2hD
aGVja3BvaW50U3RhcnRpbmdXaXRoKE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0LCBieXRlY29kZS5t
X2l0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2Ugb3BfaXRlcmF0
b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRl
cmF0b3JOZXh0PigpOworICAgICAgICB1c2VBdEVhY2hDaGVja3BvaW50KGJ5dGVjb2RlLm1faXRl
cmF0b3IpOworICAgICAgICB1c2VBdEVhY2hDaGVja3BvaW50U3RhcnRpbmdXaXRoKE9wSXRlcmF0
b3JOZXh0Ojpjb21wdXRlTmV4dCwgYnl0ZWNvZGUubV9uZXh0LCBieXRlY29kZS5tX2l0ZXJhYmxl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhf
c3ByZWFkOgogICAgICAgICBoYW5kbGVOZXdBcnJheUxpa2UoaW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXJyYXlXaXRoU3ByZWFkPigpKTsKQEAgLTMwMiw4ICszMzcsMTQgQEAgdm9pZCBjb21wdXRlVXNl
c0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25z
dCBJbnN0cnUKICAgICB9CiB9CiAKLXZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1w
bCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4mIGZ1bmN0b3IpCit2b2lkIGNvbXB1dGVE
ZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWduZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBDaGVja3BvaW50IGNoZWNrcG9pbnQsIGNvbnN0IFNjb3BlZExhbWJk
YTx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5jdG9yKQogeworCisgICAgYXV0byBkZWZBdCA9
IFsmXSAoQ2hlY2twb2ludCB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAg
ICAgIGlmICh0YXJnZXQgPT0gY2hlY2twb2ludCkKKyAgICAgICAgICAgIGZ1bmN0b3Iob3BlcmFu
ZCk7CisgICAgfTsKKwogICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKICAg
ICBjYXNlIG9wX3dpZGUxNjoKICAgICBjYXNlIG9wX3dpZGUzMjoKQEAgLTQxMiwxMCArNDUzLDIz
IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJz
LCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1CiAgICAgREVGUyhPcE5ld0FzeW5jR2VuZXJhdG9y
RnVuY0V4cCwgZHN0KQogICAgIERFRlMoT3BOZXdBc3luY0Z1bmMsIGRzdCkKICAgICBERUZTKE9w
TmV3QXN5bmNGdW5jRXhwLCBkc3QpCi0gICAgREVGUyhPcENhbGxWYXJhcmdzLCBkc3QpCi0gICAg
REVGUyhPcFRhaWxDYWxsVmFyYXJncywgZHN0KQorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7
CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4o
KTsKKyAgICAgICAgZGVmQXQoT3BDYWxsVmFyYXJnczo6bWFrZUNhbGwsIGJ5dGVjb2RlLm1fZHN0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdz
OiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BUYWlsQ2FsbFZh
cmFyZ3M+KCk7CisgICAgICAgIGRlZkF0KE9wVGFpbENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgYnl0
ZWNvZGUubV9kc3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfY29uc3Ry
dWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cENvbnN0cnVjdFZhcmFyZ3M+KCk7CisgICAgICAgIGRlZkF0KE9wQ29uc3RydWN0VmFyYXJnczo6
bWFrZUNhbGwsIGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IERFRlMoT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIGRzdCkKLSAgICBERUZTKE9wQ29uc3Ry
dWN0VmFyYXJncywgZHN0KQogICAgIERFRlMoT3BHZXRGcm9tU2NvcGUsIGRzdCkKICAgICBERUZT
KE9wQ2FsbCwgZHN0KQogICAgIERFRlMoT3BUYWlsQ2FsbCwgZHN0KQpAQCAtNTAxLDggKzU1NSwy
NCBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWduZWQgbnVtVmFy
cywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogCiAgICAgREVGUyhPcENhdGNoLCBleGNlcHRp
b24sIHRocm93blZhbHVlKQogCi0gICAgREVGUyhPcEl0ZXJhdG9yT3BlbiwgaXRlcmF0b3IsIG5l
eHQpCi0gICAgREVGUyhPcEl0ZXJhdG9yTmV4dCwgZG9uZSwgdmFsdWUpCisgICAgY2FzZSBvcF9p
dGVyYXRvcl9vcGVuOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BJdGVyYXRvck9wZW4+KCk7CisKKyAgICAgICAgZGVmQXQoT3BJdGVyYXRvck9wZW46OnN5bWJv
bENhbGwsIGJ5dGVjb2RlLm1faXRlcmF0b3IpOworICAgICAgICBkZWZBdChPcEl0ZXJhdG9yT3Bl
bjo6Z2V0TmV4dCwgYnl0ZWNvZGUubV9uZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOworCisgICAgICAgIGRlZkF0KE9wSXRlcmF0
b3JOZXh0OjpnZXREb25lLCBieXRlY29kZS5tX2RvbmUpOworICAgICAgICAvLyBXZSBuZWVkIHRv
IGNsYWltIHdlIHNldCBtX3ZhbHVlIGhlcmUgYmVjYXVzZSB3ZSBjb3VsZCBlYXJseSBleGl0IGZy
b20gdGhlIGJ5dGVjb2RlIGlmIHdlIGFyZSBkb25lLgorICAgICAgICBkZWZBdChPcEl0ZXJhdG9y
TmV4dDo6Z2V0RG9uZSwgYnl0ZWNvZGUubV92YWx1ZSk7CisKKyAgICAgICAgZGVmQXQoT3BJdGVy
YXRvck5leHQ6OmdldFZhbHVlLCBieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAogICAgIGNhc2Ugb3BfZW50ZXI6IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtVmFyczsgaS0tOykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZVVzZURlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlVXNlRGVmLmgKaW5kZXggYjNiMDBhOTkyMzczM2QzMWFjODRlNWQ4ODJkYTkwM2U5YmVkYzdm
Yi4uNjZmZWJmOWVkMTYyZjQwMTdiNzc5ZWY0Njc1NzgwNDcyOTViOTcyMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKQEAgLTMyLDIzICsz
MiwyMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2Rl
SW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBGdW5j
dGlvbjx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+Jik7Ci12b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNv
ZGVJbmRleEltcGwodW5zaWduZWQsIGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgRnVuY3Rpb248
dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYpOwordm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5k
ZXhJbXBsKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBDaGVja3BvaW50LCBj
b25zdCBTY29wZWRMYW1iZGE8dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYpOwordm9pZCBjb21wdXRl
RGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKHVuc2lnbmVkLCBjb25zdCBJbnN0cnVjdGlvbiosIENo
ZWNrcG9pbnQsIGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+Jik7CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIEJsb2NrPgotdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5k
ZXgoQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBjb25z
dCBGdW5jdGlvbjx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5jdG9yKQordGVtcGxhdGU8dHlw
ZW5hbWUgQmxvY2ssIHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNv
ZGVJbmRleChCbG9jayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IENoZWNrcG9pbnQgY2hlY2twb2ludCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogICAgIGlmIChvcGNv
ZGVJRCAhPSBvcF9lbnRlciAmJiAoY29kZUJsb2NrLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdP
cGNvZGVzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpKSAmJiBjb2RlQmxvY2stPnNjb3BlUmVn
aXN0ZXIoKS5pc1ZhbGlkKCkpCiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLT5zY29wZVJlZ2lz
dGVyKCkpOwogCi0gICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChjb2RlQmxvY2st
PnNjb3BlUmVnaXN0ZXIoKSwgaW5zdHJ1Y3Rpb24sIGZ1bmN0b3IpOworICAgIGNvbXB1dGVVc2Vz
Rm9yQnl0ZWNvZGVJbmRleEltcGwoY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCksIGluc3RydWN0
aW9uLCBjaGVja3BvaW50LCBzY29wZWRMYW1iZGE8dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPihmdW5j
dG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEJsb2NrPgotdm9pZCBjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlSW5kZXgoQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBjb25zdCBGdW5jdGlvbjx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5jdG9yKQor
dGVtcGxhdGU8dHlwZW5hbWUgQmxvY2ssIHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIGNvbXB1dGVE
ZWZzRm9yQnl0ZWNvZGVJbmRleChCbG9jayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIENoZWNrcG9pbnQgY2hlY2twb2ludCwgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKIHsKLSAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKGNvZGVCbG9jay0+bnVt
VmFycygpLCBpbnN0cnVjdGlvbiwgZnVuY3Rvcik7CisgICAgY29tcHV0ZURlZnNGb3JCeXRlY29k
ZUluZGV4SW1wbChjb2RlQmxvY2stPm51bVZhcnMoKSwgaW5zdHJ1Y3Rpb24sIGNoZWNrcG9pbnQs
IHNjb3BlZExhbWJkYTx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+KGZ1bmN0b3IpKTsKIH0KIAogI3Vu
ZGVmIENBTExfRlVOQ1RPUgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAppbmRleCAzNmU4ZDgxNjIxZTBmNWM1OTQ4MDQ2NzI2ZWMwMDViODRiNzFmODQxLi4y
NTBhNTVlNDBkNzIwZDZjMzVkMzAyZWIwYTJkYThjM2ZiZjc2NTQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2lu
Y2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlRHVtcGVyLmgiCi0jaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgpAQCAtMTkyNCw3ICsx
OTI0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9y
Qnl0ZWNvZGVJbmRleFNsb3coY29uc3QgT3BDYXRjaCYKICAgICAvLyBpbnRvIHRoZSBERkcuCiAK
ICAgICBhdXRvIG5leHRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5u
ZXh0KCkub2Zmc2V0KCk7Ci0gICAgRmFzdEJpdFZlY3RvciBsaXZlTG9jYWxzID0gYnl0ZWNvZGVM
aXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgodGhpcywgQnl0ZWNvZGVJbmRl
eChuZXh0T2Zmc2V0KSk7CisgICAgRmFzdEJpdFZlY3RvciBsaXZlTG9jYWxzID0gYnl0ZWNvZGVM
aXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKHRoaXMsIEJ5dGVjb2RlSW5kZXgo
bmV4dE9mZnNldCkpOwogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IGxpdmVPcGVyYW5kczsK
ICAgICBsaXZlT3BlcmFuZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsaXZlTG9jYWxzLmJpdENv
dW50KCkpOwogICAgIGxpdmVMb2NhbHMuZm9yRWFjaFNldEJpdChbJl0gKHVuc2lnbmVkIGxpdmVM
b2NhbCkgewpAQCAtMzExMCw3ICszMTEwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZhbGlkYXRlKCkK
IHsKICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2ZW5lc3ModGhpcyk7IC8vIENvbXB1
dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNuJ3QgZWZmZWN0IENvZGVCbG9jayBm
b290cHJpbnQuCiAgICAgCi0gICAgRmFzdEJpdFZlY3RvciBsaXZlQXRIZWFkID0gbGl2ZW5lc3Mu
Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KHRoaXMsIEJ5dGVjb2RlSW5kZXgoMCkpOwor
ICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0SGVhZCA9IGxpdmVuZXNzLmdldExpdmVuZXNzSW5mb0F0
SW5zdHJ1Y3Rpb24odGhpcywgQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgCiAgICAgaWYgKGxpdmVB
dEhlYWQubnVtQml0cygpICE9IHN0YXRpY19jYXN0PHNpemVfdD4obV9udW1DYWxsZWVMb2NhbHMp
KSB7CiAgICAgICAgIGJlZ2luVmFsaWRhdGlvbkRpZEZhaWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKaW5kZXggNzkx
NDUzZjNmZDcyMzQzNmVlMGVkNTE5MGYwYmMyN2Q3ZGEyMzA1Yi4uNzk4NjJiOGE2NzAxODcxYzli
M2RiMzYzMGY4NjZlZGQzYTlkMDZlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKQEAgLTM1LDE4ICszNSwxOSBAQCBj
bGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiBjbGFzcyBDb2RlQmxvY2s7CiAKIC8vIE5v
dGU6IEZ1bGwgYnl0ZWNvZGUgbGl2ZW5lc3MgZG9lcyBub3QgdHJhY2sgYW55IGluZm9ybWF0aW9u
IGFib3V0IHRoZSBsaXZlbmVzcyBvZiB0ZW1wcy4KLS8vIElmIHlvdSB3YW50IHRtcCBsaXZlbmVz
cyBmb3IgYSBjaGVja3BvaW50IGFzayBsaXZlbmVzc0ZvckNoZWNrcG9pbnQuCisvLyBJZiB5b3Ug
d2FudCB0bXAgbGl2ZW5lc3MgZm9yIGEgY2hlY2twb2ludCBhc2sgdG1wTGl2ZW5lc3NGb3JDaGVj
a3BvaW50LgogY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGdldExpdmVuZXNz
KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50IHBv
aW50KSBjb25zdAogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIHRoaXMgZG8g
d2hlbiB3ZSBoYXZlIGNoZWNrcG9pbnRzPworICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHdv
cnJ5IGFib3V0IG92ZXJmbG93aW5nIGludG8gdGhlIG5leHQgYnl0ZWNvZGVvZmZzZXQgaW4gb3Vy
IHZlY3RvcnMgYmVjYXVzZSB3ZQorICAgICAgICAvLyBzdGF0aWMgYXNzZXJ0IHRoYXQgYnl0ZWNv
ZGUgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGNoZWNrcG9pbnRzIGluIEJ5
dGVjb2RlU3RydWN0cy5oCiAgICAgICAgIHN3aXRjaCAocG9pbnQpIHsKICAgICAgICAgY2FzZSBM
aXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZToKLSAgICAgICAgICAgIHJldHVybiBt
X2JlZm9yZVVzZVZlY3RvcltieXRlY29kZUluZGV4Lm9mZnNldCgpXTsKKyAgICAgICAgICAgIHJl
dHVybiBtX3VzZXNCZWZvcmVbdG9JbmRleChieXRlY29kZUluZGV4KV07CiAgICAgICAgIGNhc2Ug
TGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpBZnRlclVzZToKLSAgICAgICAgICAgIHJldHVybiBt
X2FmdGVyVXNlVmVjdG9yW2J5dGVjb2RlSW5kZXgub2Zmc2V0KCldOworICAgICAgICAgICAgcmV0
dXJuIG1fdXNlc0FmdGVyW3RvSW5kZXgoYnl0ZWNvZGVJbmRleCldOwogICAgICAgICB9CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtNTksMTAgKzYwLDEy
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczsKICAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHRvSW5kZXgoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4KSB7IHJldHVybiBieXRlY29kZUluZGV4Lm9mZnNldCgpICsgYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCk7IH0KKwogICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZlY3Rvcidz
IHZpZXcgbWVjaGFuaXNtIHRvIG1ha2UgdGhlbSBjb21wYWN0LgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0Mjc8UGFzdGU+Ci0gICAgVmVjdG9yPEZh
c3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2JlZm9yZVVzZVZlY3RvcjsK
LSAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYWZ0
ZXJVc2VWZWN0b3I7CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwNDQyNworICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4gbV91c2VzQmVmb3JlOworICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4gbV91c2VzQWZ0ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKaW5kZXggM2Q3MGNk
NTQzZWNmYWU5MDIyNTAyOTYwMWEwZDQwNWVjNjcxYjJkMC4uZjYzYWQyOWYyMGY1MWU2YzYwOWZj
Y2I5ZGJjYjU1ODk2ZTMyMmYyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RydWN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luc3RydWN0aW9uLmgKQEAgLTM5LDYgKzM5LDcgQEAgc3RydWN0IEpTT3Bjb2RlVHJhaXRzIHsK
ICAgICBzdGF0aWMgY29uc3RleHByIE9wY29kZUlEIHdpZGUzMiA9IG9wX3dpZGUzMjsKICAgICBz
dGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkKiBvcGNvZGVMZW5ndGhzID0gOjpKU0M6Om9w
Y29kZUxlbmd0aHM7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBjb25zdCogb3Bj
b2RlTmFtZXMgPSA6OkpTQzo6b3Bjb2RlTmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRv
IGNoZWNrcG9pbnRDb3VudFRhYmxlID0gYnl0ZWNvZGVDaGVja3BvaW50Q291bnRUYWJsZTsKIH07
CiAKIHN0cnVjdCBXYXNtT3Bjb2RlVHJhaXRzIHsKQEAgLTUwLDYgKzUxLDcgQEAgc3RydWN0IFdh
c21PcGNvZGVUcmFpdHMgewogICAgIHN0YXRpYyBjb25zdGV4cHIgT3Bjb2RlSUQgd2lkZTMyID0g
d2FzbV93aWRlMzI7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCogb3Bjb2Rl
TGVuZ3RocyA9IHdhc21PcGNvZGVMZW5ndGhzOwogICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3Qg
Y2hhciogY29uc3QqIG9wY29kZU5hbWVzID0gd2FzbU9wY29kZU5hbWVzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYXV0byBjaGVja3BvaW50Q291bnRUYWJsZSA9IHdhc21DaGVja3BvaW50Q291bnRU
YWJsZTsKIH07CiAKIApAQCAtMTIyLDYgKzEyNCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBvcGNvZGVJRDxUcmFpdHM+KCkgPCBUcmFpdHM6Om51bWJlck9mQnl0ZWNvZGVzV2l0aENoZWNr
cG9pbnRzOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cyA9IEpTT3Bjb2Rl
VHJhaXRzPgorICAgIHVuc2lnbmVkIG51bWJlck9mQ2hlY2twb2ludHMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCFoYXNDaGVja3BvaW50czxUcmFpdHM+KCkpCisgICAgICAgICAgICByZXR1
cm4gMTsKKyAgICAgICAgcmV0dXJuIFRyYWl0czo6Y2hlY2twb2ludENvdW50VGFibGVbb3Bjb2Rl
SUQ8VHJhaXRzPigpXTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHMgPSBK
U09wY29kZVRyYWl0cz4KICAgICBpbnQgc2l6ZVNoaWZ0QW1vdW50KCkgY29uc3QKICAgICB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCmluZGV4IGU2NDZkMDRhYjkzOWZmYjc2NzI0Y2MwYThkNDUxZjI4ZGEzZjBl
ZDIuLjZmMzU3MzhiMzE2OGM4OGM1MTdiZmQ0ZTBkNTE1NTIzZmY2ZWU5NjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCkBAIC01MjE1LDEwICs1MjE1LDEyIEBAIHZvaWQgRm9ySW5Db250ZXh0OjpmaW5hbGl6
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyCiAg
ICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyBpc1Zh
bGlkKCkgJiYgb2Zmc2V0IDwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0OykgewogICAgICAgICBhdXRv
IGluc3RydWN0aW9uID0gZ2VuZXJhdG9yLmluc3RydWN0aW9ucygpLmF0KG9mZnNldCk7CiAgICAg
ICAgIEFTU0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wRW50ZXI+KCkpOwotICAgICAgICBjb21wdXRl
RGVmc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbi5wdHIoKSwgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgaWYgKGxvY2FsKCktPnZpcnR1
YWxSZWdpc3RlcigpID09IG9wZXJhbmQpCi0gICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwot
ICAgICAgICB9KTsKKyAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBpbnN0cnVj
dGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAg
ICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbi5wdHIo
KSwgY2hlY2twb2ludCwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAg
ICAgICAgIGlmIChsb2NhbCgpLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvcGVyYW5kKQorICAgICAg
ICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQog
ICAgICAgICBvZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKaW5kZXggODBjZDczZGU2NjM1MTYz
ZjUyY2I2OGFkOTliMmY1YjU4OGJlMWM0NC4uOGQ3ODU5NTI0MGVjYTk2ZjgyY2Q5NWI4NGRlM2I4
ZjNkYTNiMzNjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JB
bGxLaWxscy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMu
aApAQCAtNzksMTggKzc5LDIxIEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgICAgICAg
ICBBU1NFUlQoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkgIT0gYWZ0ZXIuYnl0
ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSk7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKGJlZm9yZS5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkgPT0gYWZ0ZXIuYnl0ZWNvZGVJbmRl
eCgpLm9mZnNldCgpIHx8IG5vZGVBZnRlci0+b3AoKSA9PSBFeGl0T0sgfHwgbm9kZUFmdGVyLT5v
cCgpID09IEludmFsaWRhdGlvblBvaW50LCAiV2hlbiB0aGUgREZHIGRvZXMgY29kZSBtb3Rpb24g
aXQgc2hvdWxkIGNoYW5nZSB0aGUgZm9yRXhpdCBvcmlnaW4gdG8gbWF0Y2ggdGhlIHN1cnJvdW5k
aW5nIGJ5dGVjb2Rlcy4iKTsKIAotICAgICAgICAgICAgYXV0byBjaGVja3BvaW50TGl2ZUJlZm9y
ZSA9IGxpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBiZWZvcmUuYnl0ZWNvZGVJbmRl
eCgpKTsKLSAgICAgICAgICAgIGF1dG8gY2hlY2twb2ludExpdmVBZnRlciA9IGxpdmVuZXNzRm9y
Q2hlY2twb2ludCgqY29kZUJsb2NrLCBhZnRlci5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAg
ICAgYXV0byBsaXZlQmVmb3JlID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ss
IGJlZm9yZS5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgYXV0byBsaXZlQWZ0ZXIgPSB0
bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYWZ0ZXIuYnl0ZWNvZGVJbmRleCgp
KTsKKyAgICAgICAgICAgIGxpdmVBZnRlci5pbnZlcnQoKTsKKyAgICAgICAgICAgIGxpdmVCZWZv
cmUuZmlsdGVyKGxpdmVBZnRlcik7CiAKLSAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNz
JiBmdWxsTGl2ZW5lc3MgPSBncmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOwotICAgICAgICAg
ICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUFmdGVyID0gZnVsbExpdmVuZXNzLmdldExpdmVu
ZXNzKGFmdGVyLmJ5dGVjb2RlSW5kZXgoKSwgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZv
cmVVc2UpOworICAgICAgICAgICAgbGl2ZUJlZm9yZS5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90
IHRtcCkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGJlZm9yZUlubGlu
ZUNhbGxGcmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9IGVsc2UgaWYgKGJlZm9yZS5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKSB7CisgICAg
ICAgICAgICAvLyBXZSBhcmUgbW92aW5nIG9uIHRvIGFub3RoZXIgYnl0ZWNvZGUsIGFsbCB0ZW1w
cyBzaG91bGQgYmUgZGVhZCBub3cuCisgICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUgPSB0bXBM
aXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSk7
CiAKLSAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogY2hlY2twb2ludExpdmVCZWZv
cmUpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hlY2twb2ludExpdmVBZnRlci5jb250YWlucyhv
cGVyYW5kKSB8fCAoIW9wZXJhbmQuaXNUbXAoKSAmJiBsaXZlQWZ0ZXJbb3BlcmFuZC52aXJ0dWFs
UmVnaXN0ZXIoKS5vZmZzZXQoKV0pKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChiZWZvcmVJbmxpbmVDYWxsRnJhbWUs
IG9wZXJhbmQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIGxpdmVCZWZvcmUuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKKyAgICAgICAg
ICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChiZWZvcmVJbmxpbmVDYWxsRnJhbWUsIE9wZXJh
bmQ6OnRtcCh0bXApKSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBncmFwaC5saXZlbmVzc0Zvcihjb2Rl
QmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA1MDM0MTIw
MWViZDIwZjM2YmQzNjgwMzY5ZTI5MzhmZjc0MzIzMjEwLi44ZTg0NmNiZTlkNGQxYzdlMTY5YmNk
ODZmN2E3NTA0NGE5MWQ4ZjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cApAQCAtMTE1Miw4ICsxMTUyLDggQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShPcGVy
YW5kIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgICAgIGlmICghY29k
ZUJsb2NrLT5udW1UbXBzKCkgfHwgb3BlcmFuZEluZGV4IDwgdG1wT2Zmc2V0KQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBhdXRvIGxpdmUgPSBsaXZlbmVzc0ZvckNo
ZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKLSAg
ICAgICAgICAgIHJldHVybiBsaXZlLmNvbnRhaW5zKG9wZXJhbmQpOworICAgICAgICAgICAgYXV0
byBiaXRNYXAgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdp
blB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiBiaXRNYXAuZ2V0KG9w
ZXJhbmRJbmRleCAtIHRtcE9mZnNldCk7CiAgICAgICAgIH0KIAogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSAtIGNvZGVPcmlnaW5QdHItPnN0
YWNrT2Zmc2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggNTJiMzcx
NzQzYWQ4NmEyOGJhZDYyZDFlZWE5YzBkZTE0Nzg4MDA1My4uODYzNjIyN2YzOTQ4MzM1ZGIzZDg0
MGU4MWQzZmEwYzVjYmJhN2Y5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaApA
QCAtOTA0LDkgKzkwNCwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGlmIChjb2RlT3JpZ2lu
UHRyLT5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGNvZGVCbG9jay0+bnVtVG1wcygpKTsKLSAgICAgICAgICAgICAgICBhdXRvIGxpdmUgPSBs
aXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJ
bmRleCgpKTsKLSAgICAgICAgICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6IGxpdmUpCi0g
ICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwg
b3BlcmFuZCkpOworICAgICAgICAgICAgICAgIGF1dG8gbGl2ZVRtcHMgPSB0bXBMaXZlbmVzc0Zv
ckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsK
KyAgICAgICAgICAgICAgICBsaXZlVG1wcy5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRtcCkg
eworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJh
bWUsIE9wZXJhbmQ6OnRtcCh0bXApKSk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5j
cHAKaW5kZXggZDQzMDdlZDg3MzA2ZjQ0NjYyMGI3ODFiMGYwMmQ1Y2E0NTNjOWJhYi4uY2M4Zjll
MTc1ZGZhOWNhOGMwOGU1YzcyMDM4YzY0NGYxZGViN2MyZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCkBAIC04OCw3ICs4
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCiAgICAgICAgIGlmIChE
RkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICBkYXRh
TG9nKCIgICAgTG9jYWxzOiAiLCBtX3N0YXRlLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2co
IiAgICBMb2NhbHMgYXQgIiwgYmxvY2stPnRlcm1pbmFsKCktPm9yaWdpbi5mb3JFeGl0LCAiOiAi
LCBtX3N0YXRlLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFzc3VtZSB0aGF0IGJsb2Nr
cyBhZnRlciB1cyBleGl0LgogICAgICAgICBjdXJyZW50RXBvY2guYnVtcCgpOwpAQCAtOTksNyAr
OTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTW92SGludCkg
ewogICAgICAgICAgICAgICAgIEVwb2NoIGxvY2FsRXBvY2ggPSBtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRPcGVyYW5kKCkpOwogICAgICAgICAgICAgICAgIGlmIChERkdNb3ZIaW50UmVt
b3ZhbFBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBBdCAiLCBub2RlLCAiOiBjdXJyZW50ID0gIiwgY3VycmVudEVwb2NoLCAiLCBsb2NhbCA9
ICIsIGxvY2FsRXBvY2gsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
QXQgIiwgbm9kZSwgIiAoIiwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCksICIpOiBjdXJyZW50ID0g
IiwgY3VycmVudEVwb2NoLCAiLCBsb2NhbCA9ICIsIGxvY2FsRXBvY2gsICJcbiIpOwogICAgICAg
ICAgICAgICAgIGlmICghbG9jYWxFcG9jaCB8fCBsb2NhbEVwb2NoID09IGN1cnJlbnRFcG9jaCkg
ewogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhab21iaWVI
aW50KTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAppbmRleCA3MTYxZmJmMjY4ZjM1MDE5Mjk3OGEy
Zjg1MmQ1MWNjOGIxMDllNzM1Li41YWRlOWM5NWEwNGVjNjU0YmUyOTJlYWQxMTU1NGI4NDlmYWU2
OTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKQEAgLTc1OCw3ICs3NTgs
NyBAQCB2b2lkIFBsYW46OmNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IG1fY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpOwotICAgIEZhc3RCaXRWZWN0b3IgbGl2ZW5lc3MgPSBhbHRlcm5hdGl2ZS0+
bGl2ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChhbHRlcm5h
dGl2ZSwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIEZhc3RCaXRWZWN0b3IgbGl2ZW5l
c3MgPSBhbHRlcm5hdGl2ZS0+bGl2ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0SW5z
dHJ1Y3Rpb24oYWx0ZXJuYXRpdmUsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KTsKIAogICAgIGZv
ciAodW5zaWduZWQgbG9jYWwgPSBtX211c3RIYW5kbGVWYWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsg
bG9jYWwtLTspIHsKICAgICAgICAgaWYgKCFsaXZlbmVzc1tsb2NhbF0pCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCmluZGV4IDgyMzc0YjdmYmU4NmQ1Nzg4YjNhNDA1
ODE1OGE4OThkNmE2YTIwOGMuLjA1ZDA5ODgwNjkwNmVhODIyMzAyZGMyMTAxNjJhYzhlMDllNjg2
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJi
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCkBAIC0xMzAs
MTUgKzEzMCwxOCBAQCBjbGFzcyBPcGNvZGUKICAgICAgICAgPDwtRU9GCiBzdHJ1Y3QgI3tjYXBp
dGFsaXplZF9uYW1lfSA6IHB1YmxpYyBJbnN0cnVjdGlvbiB7CiAgICAgI3tvcGNvZGVJRH0KKyAg
ICAje2xlbmd0aFZhbHVlfQogICAgICN7dGVtcHN9CiAgICAgI3tjaGVja3BvaW50VmFsdWVzfQog
CisKICN7ZW1pdHRlcn0KICN7ZHVtcGVyfQogI3tjb25zdHJ1Y3RvcnN9CiAje3NldHRlcnN9I3tt
ZXRhZGF0YV9zdHJ1Y3RfYW5kX2FjY2Vzc29yfQogI3ttZW1iZXJzfQogfTsKKyN7Y2hlY2twb2lu
dFNpemVBc3NlcnR9CiBFT0YKICAgICBlbmQKIApAQCAtMTQ2LDEyICsxNDksMjIgQEAgRU9GCiAg
ICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2RlSURUeXBlfSBvcGNvZGVJRCA9ICN7bmFt
ZX07IgogICAgIGVuZAogCisgICAgZGVmIGxlbmd0aFZhbHVlCisgICAgICAgICJzdGF0aWMgY29u
c3RleHByIHNpemVfdCBsZW5ndGggPSAje2xlbmd0aH07IgorICAgIGVuZAorCiAgICAgZGVmIGNo
ZWNrcG9pbnRWYWx1ZXMKICAgICAgICAgcmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/CiAKICAg
ICAgICAgWyJlbnVtIENoZWNrcG9pbnRzIDogdWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRz
Lm1hcHsgfGNoZWNrcG9pbnR8ICIgICAgICAgICN7Y2hlY2twb2ludH0sIiB9KS5jb25jYXQoWyIg
ICAgICAgIG51bWJlck9mQ2hlY2twb2ludHMsIiwgIiAgICB9OyJdKS5qb2luKCJcbiIpCiAgICAg
ZW5kCiAKKyAgICBkZWYgY2hlY2twb2ludFNpemVBc3NlcnQKKyAgICAgICAgcmV0dXJuIGlmIEBj
aGVja3BvaW50cy5uaWw/CisKKyAgICAgICAgInN0YXRpY19hc3NlcnQoI3tjYXBpdGFsaXplZF9u
YW1lfTo6bGVuZ3RoID4gI3tjYXBpdGFsaXplZF9uYW1lfTo6bnVtYmVyT2ZDaGVja3BvaW50cywg
XCJGdWxsQnl0ZWNvZGVMaXZlc3MgcmVsaWVzIG9uIHRoZSBsZW5ndGggb2YgI3tjYXBpdGFsaXpl
ZF9uYW1lfSBiZWluZyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjaGVja3BvaW50c1wiKTsi
CisgICAgZW5kCisKICAgICBkZWYgdGVtcHMKICAgICAgICAgcmV0dXJuIGlmIEB0bXBzLm5pbD8K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJiCmluZGV4IGY4Mzgw
ZWQ1NzVkMzEzYzZlYTA2YWI1ZDcyYzI1YTg2Nzc2ZDljYzguLjcyZDBjOGI0MGYxMDJiYTJjY2I4
N2VlMzU0ZGVkYjNiNDEzMjUzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvU2VjdGlvbi5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L1NlY3Rpb24ucmIKQEAgLTg0LDEzICs4NCwxNiBAQCBjbGFzcyBTZWN0aW9uCiAKICAgICAgIGlm
IGNvbmZpZ1s6ZW1pdF9pbl9zdHJ1Y3RzX2ZpbGVdCiAgICAgICAgICAgaSA9IDAKKyAgICAgICAg
ICBvdXQud3JpdGUoInN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgI3tjb25maWdbOm1hY3JvX25h
bWVfY29tcG9uZW50XS5kb3duY2FzZX1DaGVja3BvaW50Q291bnRUYWJsZVtdID0ge1xuIikKICAg
ICAgICAgICB3aGlsZSB0cnVlCiAgICAgICAgICAgICAgIGlmICFvcGNvZGVzW2ldLmNoZWNrcG9p
bnRzCi0gICAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgICAgb3V0
IDw8ICIgICAgMCwgLy8gdGhpcyB1bnVzZWQgZW50cnkgaXMgbmVlZGVkIHNpbmNlIE1TVkMgd29u
J3QgY29tcGlsZSBlbXB0eSBhcnJheXNcbiIKKyAgICAgICAgICAgICAgICAgIG91dCA8PCAifTtc
blxuIgogICAgICAgICAgICAgICAgICAgb3V0IDw8ICIjZGVmaW5lIE5VTUJFUl9PRl8je2NvbmZp
Z1s6bWFjcm9fbmFtZV9jb21wb25lbnRdfV9XSVRIX0NIRUNLUE9JTlRTICN7aX1cbiIKICAgICAg
ICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgIGVuZAogCisgICAgICAgICAgICAgIG91
dC53cml0ZSgiICAgICN7b3Bjb2Rlc1tpXS5jaGVja3BvaW50cy5sZW5ndGh9LFxuIikKICAgICAg
ICAgICAgICAgaSArPSAxCiAgICAgICAgICAgZW5kCiAgICAgICAgICAgb3V0IDw8ICJcbiIKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNmRm
ZjQyNGViZDYyOGIzN2U4YjZkYzgwZWM5MjM1Mjc0N2MyYWRhMi4uNzIwMzEzNmIzM2IzNmJjMTQy
YmM4ZmQ2ZGE0YzVlZGY2ZDFjYTMzMyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wNy0wNiAgS2VpdGgg
TWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBCeXRlY29kZSBVc2VE
ZWYgc2hvdWxkIGJlIGF3YXJlIG9mIGNoZWNrcG9pbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1NjYKKworICAgICAgICBSZXZpZXdlZCBieSBT
YWFtIEJhcmF0aS4KKworICAgICAgICAqIHN0cmVzcy9kZWYtdGhlbi11c2UtaW4tc2luZ2xlLWJ5
dGVjb2RlLXdpdGgtY2hlY2twb2ludHMtZm9yLW9mLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6
CisKIDIwMjAtMDctMDQgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgog
CiAgICAgICAgICVUeXBlZEFycmF5JS5wcm90b3R5cGUue2luZGV4T2YsbGFzdEluZGV4T2Z9IGFy
ZSBub3Qgc3BlYy1wZXJmZWN0CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9kZWYtdGhlbi11
c2UtaW4tc2luZ2xlLWJ5dGVjb2RlLXdpdGgtY2hlY2twb2ludHMtZm9yLW9mLmpzIGIvSlNUZXN0
cy9zdHJlc3MvZGVmLXRoZW4tdXNlLWluLXNpbmdsZS1ieXRlY29kZS13aXRoLWNoZWNrcG9pbnRz
LWZvci1vZi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDE4MzUxZDliZjczZDc0N2Y3NjgxM2QxNjNkNjA3NDNk
ODFkNjA2Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZGVmLXRoZW4tdXNlLWlu
LXNpbmdsZS1ieXRlY29kZS13aXRoLWNoZWNrcG9pbnRzLWZvci1vZi5qcwpAQCAtMCwwICsxLDE0
IEBACisvL0AgcmVxdWlyZU9wdGlvbnMoIi0taml0UG9saWN5U2NhbGU9MCIsICItLXZhbGlkYXRl
RlRMT1NSRXhpdExpdmVuZXNzPTEiKQorCitmdW5jdGlvbiBmb28oKSB7CisgIGZvciAobGV0IGk9
MDsgaTwxMDA7IGkrKykgeworICAgIGxldCB1OCA9IG5ldyBVaW50OEFycmF5KDQpOworICAgIGZv
ciAobGV0IHEgb2YgdTgpIHt9CisgICAgbGV0IHUzMiA9IG5ldyBVaW50MzJBcnJheSgyKTsKKyAg
ICBmb3IgKGxldCBxIG9mIHUzMikge30KKyAgfQorfQorCitmb3IgKGxldCBpPTA7IGk8MTAwOyBp
KyspIHsKKyAgZm9vKCk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403744</attachid>
            <date>2020-07-07 16:52:24 -0700</date>
            <delta_ts>2020-07-07 17:32:41 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-213566-20200707165223.patch</filename>
            <type>text/plain</type>
            <size>53603</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MDQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
YTU0ZjdkNmIyMTZiNWYyNTFlZDAxOWY0MzM0OGVmZWNhNjk5ZmNjLi43MmNhODZiMzgyNDQ0YTJl
OGI5MmMwYWZkNDMyN2UxMWVjMTQ0NjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NCBAQAorMjAyMC0wNy0wNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBCeXRlY29kZSBVc2VEZWYgc2hvdWxkIGJlIGF3YXJlIG9mIGNoZWNr
cG9pbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTM1NjYKKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBQcmV2
aW91c2x5LCB3ZSB0cmllZCB0byBzb2x2ZSB0ZWFjaGluZyBERkcgYWJvdXQgdXNlcyBhbmQgZGVm
cyBvZgorICAgICAgICBsb2NhbHMgYWNyb3NzIGNoZWNrcG9pbnRzIGJ5IGFza2luZyB3aGF0IGxv
Y2FscyB3ZXJlIGRlZidkIGF0IHNvbWUKKyAgICAgICAgY2hlY2twb2ludC4gSG93ZXZlciwgdGhp
cyB3YXMgc3VidGx5IHdyb25nIGJlY2F1c2Ugd2UgY291bGRuJ3QKKyAgICAgICAgcmVwb3J0IGFu
eSB1c2VzIGF0IHN1YnNlcXVlbnQgY2hlY2twb2ludHMgc28gREZHIHRob3VnaHQgdGhlCisgICAg
ICAgIGxvY2FsIHdhcyBkZWFkIGltbWVkaWF0ZWx5IGFmdGVyIGl0cyBiaXJ0aC4KKworICAgICAg
ICBUaGlzIHBhdGNoIHJldmVydHMgdGhhdCBjaGFuZ2UgYW5kIGluc3RlYWQgdGVhY2hlcyBCeXRl
Y29kZVVzZURlZgorICAgICAgICBhYm91dCBjaGVja3BvaW50cy4gUmlnaHQgbm93LCBCeXRlY29k
ZVVzZURlZiBvbmx5IGtub3dzIGFib3V0CisgICAgICAgIGxvY2FscyBhdCBjaGVja3BvaW50cyBi
dXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkgdGVhY2ggaXQgYWJvdXQgdG1wcworICAgICAgICBhdCB3
ZWxsLgorCisgICAgICAgIFNpbmNlIHRoZSB2ZWN0b3JzIGNvbnRhaW5pbmcgb3VyIGxpdmVuZXNz
IGJpdG1hcHMgd2VyZSBhbHJlYWR5CisgICAgICAgIHNwYXJzZSAodGhleSBhcmUgaW5kZXhlZCBi
eSB0aGUgYnl0ZWNvZGUgb2Zmc2V0KSB3ZSBjYW4gcmV1c2UgdGhlCisgICAgICAgIGdhcHMgdG8g
aG9sZCBvdXIgY2hlY2twb2ludCBsaXZlbmVzcyBpbmZvcm1hdGlvbi4gVG8gbWFrZSBzdXJlIHdl
CisgICAgICAgIGRvbid0IG92ZXJsYXAgYmV0d2VlbiB0aGUgbmV4dCBieXRlY29kZSBhbmQgYSBj
aGVja3BvaW50IGZvciB0aGUKKyAgICAgICAgY3VycmVudCBieXRlY29kZSB0aGVyZSBpcyBub3cg
YSBzdGF0aWMgYXNzZXJ0IHRoYXQgdGhlIGxlbmd0aCBvZgorICAgICAgICB0aGUgYnl0ZWNvZGUg
aXMgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgY2hlY2twb2ludHMuIFRoaXMKKyAgICAgICAg
YXNzdW1wdGlvbiBpcyBhbHJlYWR5IHRydWUgZm9yIGV4aXN0aW5nIGJ5dGVjb2RlcyB3aXRoIGNo
ZWNrcG9pbnRzIChhbmQKKyAgICAgICAgbGlrZWx5IHRvIGJlIHRydWUgZm9yIGZ1dHVyZSBvbmVz
IGFueXdheSkuCisKKyAgICAgICAgTWFueSBvZiB0aGUgQnl0ZWNvZGVMaXZlbmVzc1Byb3BlZ2F0
aW9uIGZ1bmN0aW9ucyBoYXZlIGJlZW4KKyAgICAgICAgcmVuYW1lZCB0byByZWZsZWN0IHRoYXQg
dGhleSBvcGVyYXRlIG92ZXIgdGhlIGZ1bGwgaW5zdHJ1Y3Rpb24sCisgICAgICAgIGluY2x1ZGlu
ZyBjaGVja3BvaW50cywgcmF0aGVyIHRoYW4ganVzdCB0aGUgQnl0ZWNvZGVJbmRleCBwYXNzZWQu
CisKKyAgICAgICAgTGFzdGx5LCB0aGlzIHBhdGNoIG1ha2VzIGEgc3BlY3VsYXRpdmUgZml4IHRv
IGZvckFsbEtpbGxlZE9wZXJhbmRzIHdoZXJlIHdlCisgICAgICAgIHdvdWxkbid0IHJlcG9ydCB0
aGF0IGFsbCB0bXBzIGRpZSBhdCB0aGUgZW5kIG9mIGVhY2ggYnl0ZWNvZGUuIEkgY2FuJ3QgdGhp
bmsKKyAgICAgICAgb2YgYSBjYXNlIHdoZXJlIHRoaXMgd291bGQgYnJlYWsgdGhpbmdzIGJ1dCBp
dCdzIHByb2JhYmx5IGdvb2QgaHlnaWVuZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2Rl
R2VuZXJhdG9yaWZpY2F0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6R2VuZXJhdG9yTGl2ZW5lc3NB
bmFseXNpczo6cnVuKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUluZGV4Lmg6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW5kZXg6OkJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUluZGV4OjpjaGVja3BvaW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJ
bmRleDo6d2l0aENoZWNrcG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4
OjpwYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3Bw
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2
ZW5lc3MpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1
bHRzKToKKyAgICAgICAgKEpTQzo6dG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2Rl
SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsaXZlbmVzc0ZvckNoZWNrcG9pbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0
SW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpz
dGVwT3ZlckJ5dGVjb2RlSW5kZXhEZWYpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNl
cHRpb25IYW5kbGVyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9u
OjpzdGVwT3ZlckJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24p
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFn
YXRpb246OmdldExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25EZWYpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5z
dHJ1Y3Rpb25Vc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJv
cGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJbkV4Y2VwdGlvbkhhbmRsZXIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVM
b2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5
dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHA6CisgICAg
ICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAgICAgICAoSlND
Ojpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9C
eXRlY29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5k
ZXgpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZW5z
dXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6dmFsaWRhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0Z1bGxCeXRl
Y29kZUxpdmVuZXNzLmg6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjpnZXRM
aXZlbmVzcyBjb25zdCk6CisgICAgICAgIChKU0M6OkZ1bGxCeXRlY29kZUxpdmVuZXNzOjp0b0lu
ZGV4KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAoSlNDOjpC
YXNlSW5zdHJ1Y3Rpb246Om51bWJlck9mQ2hlY2twb2ludHMgY29uc3QpOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkZvckluQ29u
dGV4dDo6ZmluYWxpemUpOgorICAgICAgICAqIGRmZy9ERkdGb3JBbGxLaWxscy5oOgorICAgICAg
ICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE9wZXJhbmRzKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKiBnZW5l
cmF0b3IvT3Bjb2RlLnJiOgorICAgICAgICAqIGdlbmVyYXRvci9TZWN0aW9uLnJiOgorCiAyMDIw
LTA3LTA2ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgY2Fs
bE9uTWFpblRocmVhZCBzaG91bGQgdXNlIHRoZSBzYW1lIHF1ZXVlIGFzIFJ1bkxvb3A6OmRpc3Bh
dGNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVH
ZW5lcmF0b3JpZmljYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcAppbmRleCA2ZmJhMjI5N2MyOTFmZTQ4ZWI5OTNj
ZmE3ZWZmNjM5MWNjNGY4NjYzLi5hOGU1NmQwY2QzOTRiYzFiN2FjMDUyNmJlODY2N2VhYzhiZGQ3
ZTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVH
ZW5lcmF0b3JpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKQEAgLTE5NCw3ICsxOTQsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJ1bkxpdmVuZXNzRml4cG9pbnQoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMs
IG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCkpOwogCiAgICAgICAgIGZvciAoWWllbGREYXRh
JiBkYXRhIDogbV9nZW5lcmF0b3JpZmljYXRpb24ueWllbGRzKCkpCi0gICAgICAgICAgICBkYXRh
LmxpdmVuZXNzID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25zLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpLCBCeXRlY29kZUluZGV4KG1f
Z2VuZXJhdG9yaWZpY2F0aW9uLmluc3RydWN0aW9ucygpLmF0KGRhdGEucG9pbnQpLm5leHQoKS5v
ZmZzZXQoKSkpOworICAgICAgICAgICAgZGF0YS5saXZlbmVzcyA9IGdldExpdmVuZXNzSW5mb0F0
SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ2VuZXJhdG9yaWZpY2F0aW9u
LmdyYXBoKCksIEJ5dGVjb2RlSW5kZXgobV9nZW5lcmF0b3JpZmljYXRpb24uaW5zdHJ1Y3Rpb25z
KCkuYXQoZGF0YS5wb2ludCkubmV4dCgpLm9mZnNldCgpKSk7CiAgICAgfQogCiBwcml2YXRlOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXgu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKaW5kZXgg
NmUyNjZkM2RhZjNiMTI1ZTg3MzY3NTc1NDA1MmMzMTNjMGU1YTU3MS4uOWJjODQzNGUwZjliMzhi
MjhhMWI4MTFlMGUwMWZlZTIwMWI4YmI4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC0zNCw2ICszNCw5IEBAIGNsYXNzIFByaW50U3Ry
ZWFtOwogCiBuYW1lc3BhY2UgSlNDIHsKIAordXNpbmcgQ2hlY2twb2ludCA9IHVpbnQ4X3Q7Citz
dGF0aWMgY29uc3RleHByIENoZWNrcG9pbnQgbm9DaGVja3BvaW50cyA9IDA7CisKIGNsYXNzIEJ5
dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5kZXgoKSA9IGRlZmF1bHQ7CkBA
IC00Miw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgZXhwbGljaXQgQnl0
ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCwgdWludDhfdCBjaGVja3BvaW50ID0g
MCkKKyAgICBleHBsaWNpdCBCeXRlY29kZUluZGV4KHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0LCBD
aGVja3BvaW50IGNoZWNrcG9pbnQgPSBub0NoZWNrcG9pbnRzKQogICAgICAgICA6IG1fcGFja2Vk
Qml0cyhwYWNrKGJ5dGVjb2RlT2Zmc2V0LCBjaGVja3BvaW50KSkKICAgICB7CiAgICAgICAgIEFT
U0VSVCgqdGhpcyk7CkBAIC01NCw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQzMl90IGNoZWNrcG9pbnRTaGlmdCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG51
bWJlck9mQ2hlY2twb2ludHMpOwogCiAgICAgdWludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9wYWNrZWRCaXRzID4+IGNoZWNrcG9pbnRTaGlmdDsgfQotICAgIHVpbnQ4X3QgY2hlY2tw
b2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFja2VkQml0cyAmIGNoZWNrcG9pbnRNYXNrOyB9Cisg
ICAgQ2hlY2twb2ludCBjaGVja3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYg
Y2hlY2twb2ludE1hc2s7IH0KICAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBt
X3BhY2tlZEJpdHM7IH0KIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBXVEY6
OmludEhhc2gobV9wYWNrZWRCaXRzKTsgfQpAQCAtNjIsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09IGRl
bGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0cyh1aW50
MzJfdCBiaXRzKTsKLSAgICBCeXRlY29kZUluZGV4IHdpdGhDaGVja3BvaW50KHVuc2lnbmVkIGNo
ZWNrcG9pbnQpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgob2Zmc2V0KCksIGNoZWNrcG9p
bnQpOyB9CisgICAgQnl0ZWNvZGVJbmRleCB3aXRoQ2hlY2twb2ludChDaGVja3BvaW50IGNoZWNr
cG9pbnQpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgob2Zmc2V0KCksIGNoZWNrcG9pbnQp
OyB9CiAKICAgICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICE9IGludmFsaWRPZmZzZXQgJiYg
bV9wYWNrZWRCaXRzICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CkBAIC04MCwxMiArODMs
MTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGlu
dmFsaWRPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CiAKLSAg
ICBzdGF0aWMgdWludDMyX3QgcGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1aW50OF90IGNo
ZWNrcG9pbnQpOworICAgIHN0YXRpYyB1aW50MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5k
ZXgsIENoZWNrcG9pbnQpOwogCiAgICAgdWludDMyX3QgbV9wYWNrZWRCaXRzIHsgaW52YWxpZE9m
ZnNldCB9OwogfTsKIAotaW5saW5lIHVpbnQzMl90IEJ5dGVjb2RlSW5kZXg6OnBhY2sodWludDMy
X3QgYnl0ZWNvZGVJbmRleCwgdWludDhfdCBjaGVja3BvaW50KQoraW5saW5lIHVpbnQzMl90IEJ5
dGVjb2RlSW5kZXg6OnBhY2sodWludDMyX3QgYnl0ZWNvZGVJbmRleCwgQ2hlY2twb2ludCBjaGVj
a3BvaW50KQogewogICAgIEFTU0VSVChjaGVja3BvaW50IDwgbnVtYmVyT2ZDaGVja3BvaW50cyk7
CiAgICAgQVNTRVJUKChieXRlY29kZUluZGV4IDw8IGNoZWNrcG9pbnRTaGlmdCkgPj4gY2hlY2tw
b2ludFNoaWZ0ID09IGJ5dGVjb2RlSW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAppbmRleCA0
MmE2MzVlYzhlM2U0ODcxMjQ5MzMzYWI4ODUwNmM1NzZmYjY3M2I5Li4xNjE4MjUwNDE1Nzk4MDFh
OWY0Mjk2YWFhYzZlMWNjNTk3NTI2YTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcApAQCAtMzEs
NyArMzEsNiBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZ1bGxCeXRlY29k
ZUxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlIDx3
dGYvU2NvcGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ0LDM2ICs0MywyMCBAQCBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sq
IGNvZGVCbG9jaykKICAgICAgICAgZHVtcFJlc3VsdHMoY29kZUJsb2NrKTsKIH0KIAotdm9pZCBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBGYXN0Qml0
VmVjdG9yJiByZXN1bHQpCi17Ci0gICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4Lm9mZnNldCgp
KTsKLSAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygp
KTsKLSAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKLSAgICByZXN1bHQucmVzaXpl
KGJsb2NrLT5vdXQoKS5udW1CaXRzKCkpOwotICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0
ZWNvZGVJbmRleChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3JhcGgs
ICpibG9jaywgYnl0ZWNvZGVJbmRleCwgcmVzdWx0KTsKLX0KLQotRmFzdEJpdFZlY3RvciBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIEZh
c3RCaXRWZWN0b3Igb3V0OwotICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleChjb2Rl
QmxvY2ssIGJ5dGVjb2RlSW5kZXgsIG91dCk7Ci0gICAgcmV0dXJuIG91dDsKLX0KLQogdm9pZCBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpCiB7CiAgICAgRmFzdEJpdFZl
Y3RvciBvdXQ7CiAKLSAgICByZXN1bHQubV9iZWZvcmVVc2VWZWN0b3IucmVzaXplKGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICByZXN1bHQubV9hZnRlclVzZVZlY3Rvci5y
ZXNpemUoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIHNpemVfdCBzaXpl
ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgcmVzdWx0Lm1fdXNlc0Jl
Zm9yZS5yZXNpemUoc2l6ZSk7CisgICAgcmVzdWx0Lm1fdXNlc0FmdGVyLnJlc2l6ZShzaXplKTsK
ICAgICAKICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayYgYmxvY2sgOiBtX2dyYXBoLmJhc2lj
QmxvY2tzSW5SZXZlcnNlT3JkZXIoKSkgewogICAgICAgICBpZiAoYmxvY2suaXNFbnRyeUJsb2Nr
KCkgfHwgYmxvY2suaXNFeGl0QmxvY2soKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKICAgICAgICAgb3V0ID0gYmxvY2sub3V0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGF1dG8g
dXNlID0gWyZdICh1bnNpZ25lZCBiaXRJbmRleCkgewogICAgICAgICAgICAgLy8gVGhpcyBpcyB0
aGUgdXNlIGZ1bmN0b3IsIHNvIHdlIHNldCB0aGUgYml0LgogICAgICAgICAgICAgb3V0W2JpdElu
ZGV4XSA9IHRydWU7CkBAIC04OSwxMiArNzIsMTcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bGxCeXQK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2suZGVsdGEoKS5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgICAgIGN1cnNvciAtPSBibG9jay5kZWx0YSgpW2ldOwogICAgICAgICAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChibG9jay5sZWFkZXJPZmZz
ZXQoKSArIGN1cnNvcik7Ci0KLSAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb25EZWYoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIGRlZik7Ci0gICAg
ICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uVXNlSW5FeGNlcHRpb25IYW5kbGVyKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25zLCBtX2dyYXBoLCBieXRlY29kZUluZGV4LCB1c2UpOwotICAgICAgICAg
ICAgcmVzdWx0Lm1fYWZ0ZXJVc2VWZWN0b3JbYnl0ZWNvZGVJbmRleC5vZmZzZXQoKV0gPSBvdXQ7
IC8vIEFmdGVyVXNlIHBvaW50LgotICAgICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvblVzZShj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKLSAg
ICAgICAgICAgIHJlc3VsdC5tX2JlZm9yZVVzZVZlY3RvcltieXRlY29kZUluZGV4Lm9mZnNldCgp
XSA9IG91dDsgLy8gQmVmb3JlVXNlIHBvaW50LgorICAgICAgICAgICAgYXV0byBpbnN0cnVjdGlv
biA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIGZvciAoQ2hl
Y2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsg
Y2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgICAgIEFTU0VSVChjaGVja3BvaW50IDwgaW5z
dHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCA9IGJ5dGVj
b2RlSW5kZXgud2l0aENoZWNrcG9pbnQoY2hlY2twb2ludCk7CisKKyAgICAgICAgICAgICAgICBz
dGVwT3ZlckJ5dGVjb2RlSW5kZXhEZWYoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG1fZ3JhcGgs
IGJ5dGVjb2RlSW5kZXgsIGRlZik7CisgICAgICAgICAgICAgICAgc3RlcE92ZXJCeXRlY29kZUlu
ZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dyYXBo
LCBieXRlY29kZUluZGV4LCB1c2UpOworICAgICAgICAgICAgICAgIHJlc3VsdC5tX3VzZXNBZnRl
cltyZXN1bHQudG9JbmRleChieXRlY29kZUluZGV4KV0gPSBvdXQ7IC8vIEFmdGVyVXNlIHBvaW50
LgorICAgICAgICAgICAgICAgIHN0ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZShjb2RlQmxvY2ssIGlu
c3RydWN0aW9ucywgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCwgdXNlKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQubV91c2VzQmVmb3JlW3Jlc3VsdC50b0luZGV4KGJ5dGVjb2RlSW5kZXgpXSA9IG91
dDsgLy8gQmVmb3JlVXNlIHBvaW50LgorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
fQpAQCAtMTUwLDcgKzEzOCw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1w
UmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgICAgIGNvbnN0IGF1dG8gY3Vy
cmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKIAogICAg
ICAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFyaWFibGVzOiIpOwotICAgICAgICAgICAgRmFzdEJp
dFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkpOworICAgICAgICAgICAgRmFzdEJp
dFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbihjb2RlQmxv
Y2ssIEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKTsKICAgICAgICAgICAgIGR1bXBCaXRW
ZWN0b3IobGl2ZUJlZm9yZSk7CiAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICAgICAgICAg
ICAgIGNvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZpbGUoKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKQEAgLTE3NiwxNCArMTY0LDEwIEBAIGNvbnN0ZXhwciBib29sIGVudW1WYWx1ZXNF
cXVhbEFzSW50ZWdyYWwoRW51bVR5cGUxIHYxLCBFbnVtVHlwZTIgdjIpCiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUyPih2Mik7
CiB9CiAKLVZlY3RvcjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1wcz4gbGl2ZW5lc3NGb3JD
aGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYgY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgpCitCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hl
Y2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4KQogewotICAgIFZlY3RvcjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1wcz4gcmVz
dWx0OwotICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
OwotCi0gICAgYXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7Ci0gICAgICAgIEFT
U0VSVChyZXN1bHQuc2l6ZSgpIDw9IG1heE51bUNoZWNrcG9pbnRUbXBzKTsKLSAgICB9KTsKKyAg
ICBCaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHJlc3VsdDsKKyAgICBDaGVja3BvaW50IGNo
ZWNrcG9pbnQgPSBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKIAogICAgIGlmICghY2hlY2tw
b2ludCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE5NSwxNiArMTc5LDE0IEBAIFZlY3Rv
cjxPcGVyYW5kLCBtYXhOdW1DaGVja3BvaW50VG1wcz4gbGl2ZW5lc3NGb3JDaGVja3BvaW50KGNv
bnN0IENvZGVCbG9jayYgY29kCiAgICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0VxdWFs
QXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BUYWlsQ2FsbFZhcmFyZ3M6Om1h
a2VDYWxsKSAmJiBlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6OmFyZ0Nv
dW50SW5jbHVkaW5nVGhpcywgT3BUYWlsQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhp
cykpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BD
YWxsVmFyYXJnczo6bWFrZUNhbGwsIE9wQ29uc3RydWN0VmFyYXJnczo6bWFrZUNhbGwpICYmIGVu
dW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdU
aGlzLCBPcENvbnN0cnVjdFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhpcykpOwogICAgICAg
ICBpZiAoY2hlY2twb2ludCA9PSBPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCkKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoT3BlcmFuZDo6dG1wKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVk
aW5nVGhpcykpOworICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjphcmdDb3Vu
dEluY2x1ZGluZ1RoaXMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBjYXNl
IG9wX2l0ZXJhdG9yX29wZW46IHsKLSAgICAgICAgaWYgKGNoZWNrcG9pbnQgPT0gT3BJdGVyYXRv
ck9wZW46OmdldE5leHQpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVCbG9jay5pbnN0
cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BJdGVyYXRvck9wZW4+KCkubV9pdGVy
YXRvcik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIGNhc2Ugb3BfaXRlcmF0
b3JfbmV4dDogewotICAgICAgICByZXN1bHQuYXBwZW5kKE9wZXJhbmQ6OnRtcChPcEl0ZXJhdG9y
TmV4dDo6bmV4dFJlc3VsdCkpOworICAgICAgICByZXN1bHQuc2V0KE9wSXRlcmF0b3JOZXh0Ojpu
ZXh0UmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgZGVmYXVsdDoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaAppbmRleCBiZTVlZTJmY2QzYTY0ZTU2M2FlYTFmM2YyMjI3OTFlNDY4
YmI2MTA0Li5hMjA0MTdmMjJjYjFiMmQzNzc2YjA5YTY3NzEzOWMyMjdkMjYwYzI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5oCkBAIC01MSwyNiArNTEsMjYgQEAgZW51bSBjbGFzcyBMaXZlbmVzc0NhbGN1
bGF0aW9uUG9pbnQgOiB1aW50OF90IHsKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlv
biB7CiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5h
bWUgVXNlRnVuY3Rvcj4KLSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uVXNlKENv
ZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBC
eXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJik7CisgICAgc3RhdGljIHZvaWQgc3RlcE92
ZXJCeXRlY29kZUluZGV4VXNlKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJik7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVuY3Rvcj4K
LSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uVXNlSW5FeGNlcHRpb25IYW5kbGVy
KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgm
LCBCeXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJik7CisgICAgc3RhdGljIHZvaWQgc3Rl
cE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKENvZGVCbG9ja1R5cGUqLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBj
b25zdCBVc2VGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwg
dHlwZW5hbWUgRGVmRnVuY3Rvcj4KLSAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9u
RGVmKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3Jh
cGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBEZWZGdW5jdG9yJik7CisgICAgc3RhdGljIHZvaWQg
c3RlcE92ZXJCeXRlY29kZUluZGV4RGVmKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlv
blN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4LCBjb25zdCBEZWZGdW5jdG9y
Jik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBVc2VG
dW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotICAgIHN0YXRpYyB2b2lkIHN0ZXBPdmVySW5z
dHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgQnl0ZWNv
ZGVHcmFwaCYsIEJ5dGVjb2RlSW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImLCBjb25zdCBEZWZGdW5j
dG9yJik7CisgICAgc3RhdGljIHZvaWQgc3RlcE92ZXJCeXRlY29kZUluZGV4KENvZGVCbG9ja1R5
cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUlu
ZGV4LCBjb25zdCBVc2VGdW5jdG9yJiwgY29uc3QgRGVmRnVuY3RvciYpOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KICAgICBzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3Ry
dWN0aW9uKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIEJ5dGVjb2Rl
R3JhcGgmLCBCeXRlY29kZUluZGV4LCBGYXN0Qml0VmVjdG9yJiBvdXQpOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPgotICAgIHN0
YXRpYyBib29sIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChDb2RlQmxvY2tU
eXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNC
bG9jayYsIEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CisgICAgc3RhdGlj
IGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwg
Y29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayYs
IEJ5dGVjb2RlSW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+CiAgICAgc3RhdGlj
IGJvb2wgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3Qg
SW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayYpOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25z
PgotICAgIHN0YXRpYyBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRl
eChDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0ZWNvZGVHcmFwaCYsIEJ5
dGVjb2RlSW5kZXgpOworICAgIHN0YXRpYyBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0
SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVjb2Rl
R3JhcGgmLCBCeXRlY29kZUluZGV4KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KICAgICBzdGF0aWMgdm9pZCBydW5MaXZlbmVz
c0ZpeHBvaW50KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdy
YXBoJik7CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNv
ZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOwogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2Rl
QmxvY2sqKTsKICAgICAKLSAgICBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVJbmRleChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4KTsKKyAgICBGYXN0Qml0VmVjdG9yIGdl
dExpdmVuZXNzSW5mb0F0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2Rl
SW5kZXggYnl0ZWNvZGVJbmRleCkgeyByZXR1cm4gQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9u
OjpnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uKGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVJbmRleCk7IH0KICAgICAKICAgICB2b2lkIGNv
bXB1dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiwgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIHJlc3Vs
dCk7CiAKQEAgLTkyLDEyICs5MiwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgZHVt
cFJlc3VsdHMoQ29kZUJsb2NrKik7CiAKLSAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVJbmRleChDb2RlQmxvY2sqLCBCeXRlY29kZUluZGV4LCBGYXN0Qml0VmVjdG9yJik7Ci0KICAg
ICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiB9OwogCi1WZWN0b3I8T3BlcmFuZCwgbWF4TnVtQ2hl
Y2twb2ludFRtcHM+IGxpdmVuZXNzRm9yQ2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smLCBCeXRl
Y29kZUluZGV4KTsKK0JpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gdG1wTGl2ZW5lc3NGb3JD
aGVja3BvaW50KGNvbnN0IENvZGVCbG9jayYsIEJ5dGVjb2RlSW5kZXgpOwogCiBpbmxpbmUgYm9v
bCBvcGVyYW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKIGlubGluZSBib29sIG9wZXJhbmRU
aGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9w
ZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKaW5kZXggYzYwOTY1YmNjOTdh
N2I4OTkwZGI5OGZkMjNkOTliNWUwOGY5Y2RkNS4uNjQ4YzRiNWU5NjMwODUxZDg5ODE3MWQxZDA3
NzU2NjI0ZWE2NTU1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJCeXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlcklubGluZXMuaCIKIApAQCAt
NTgsMTEgKzU5LDExIEBAIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1By
b3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uRGVmKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9j
aywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQoraW5s
aW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3ZlckJ5dGVjb2RlSW5k
ZXhEZWYoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYg
aW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
LCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCiB7CiAgICAgYXV0byogaW5zdHJ1Y3Rpb24gPSBpbnN0
cnVjdGlvbnMuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4KAotICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0aW9uLAorICAgICAgICBjb2Rl
QmxvY2ssIGluc3RydWN0aW9uLCBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSwKICAgICAgICAg
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKG9wZXJhbmQpKQogICAgICAgICAgICAgICAgIGRlZihvcGVyYW5k
LnRvTG9jYWwoKSk7CkBAIC03MCwxMSArNzEsMTEgQEAgaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZl
bmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uRGVmKENvZGVCbG9ja1R5cGUqIGMK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgVXNlRnVuY3Rv
cj4KLWlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0
cnVjdGlvblVzZShDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSkKK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5l
c3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlKENvZGVCbG9ja1R5cGUqIGNv
ZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgQnl0ZWNvZGVH
cmFwaCYsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgVXNlRnVuY3RvciYgdXNl
KQogewogICAgIGF1dG8qIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlSW5k
ZXgpLnB0cigpOwogICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleCgKLSAgICAgICAgY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbiwKKyAgICAgICAgY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCksCiAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhvcGVy
YW5kKSkKICAgICAgICAgICAgICAgICB1c2Uob3BlcmFuZC50b0xvY2FsKCkpOwpAQCAtODIsMTAg
KzgzLDEwIEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92
ZXJJbnN0cnVjdGlvblVzZShDb2RlQmxvY2tUeXBlKiBjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIFVzZUZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBCeXRlY29k
ZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb25Vc2VJbkV4Y2VwdGlvbkhh
bmRsZXIoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYs
IEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0
IFVzZUZ1bmN0b3ImIHVzZSkKK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlv
bjo6c3RlcE92ZXJCeXRlY29kZUluZGV4VXNlSW5FeGNlcHRpb25IYW5kbGVyKENvZGVCbG9ja1R5
cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBCeXRlY29kZUdyYXBoJiBn
cmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBVc2VGdW5jdG9yJiB1c2Up
CiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGNlcHRpb24gaGFuZGxlciwgd2Ugd2FudCB0aGUg
bGl2ZS1pbiB2YXJpYWJsZXMgb2YgdGhlIAotICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGVyIGJsb2Nr
IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBsaXZlLWluIG9mIHRoaXMgcGFydGljdWxhciBieXRlY29k
ZS4KKyAgICAvLyBleGNlcHRpb24gaGFuZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0aGUg
bGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3VsYXIgQnl0ZWNvZGVJbmRleC4KICAgICBpZiAoYXV0byog
aGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCkpIHsKICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBoYW5kbGVyQmxvY2sgPSBncmFwaC5m
aW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KTsKICAgICAgICAg
QVNTRVJUKGhhbmRsZXJCbG9jayk7CkBAIC05Niw5ICs5Nyw5IEBAIGlubGluZSB2b2lkIEJ5dGVj
b2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvblVzZUluRXhjZXB0aW9u
SGFuZGxlCiAvLyBTaW1wbGlmaWVkIGludGVyZmFjZSB0byBieXRlY29kZSB1c2UvZGVmLCB3aGlj
aCBkZXRlcm1pbmVzIGRlZnMgZmlyc3QgYW5kIHRoZW4gdXNlcywgYW5kIGluY2x1ZGVzCiAvLyBl
eGNlcHRpb24gaGFuZGxlcnMgaW4gdGhlIHVzZXMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlLCB0eXBlbmFtZSBVc2VGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotaW5saW5l
IHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwg
Y29uc3QgVXNlRnVuY3RvciYgdXNlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCitpbmxpbmUgdm9p
ZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVyQnl0ZWNvZGVJbmRleChDb2Rl
QmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlv
bnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNv
bnN0IFVzZUZ1bmN0b3ImIHVzZSwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQogewotICAgIC8vIFRo
aXMgYWJzdHJhY3RseSBleGVjdXRlIHRoZSBpbnN0cnVjdGlvbiBpbiByZXZlcnNlLiBJbnN0cnVj
dGlvbnMgbG9naWNhbGx5IGZpcnN0IHVzZSBvcGVyYW5kcyBhbmQKKyAgICAvLyBUaGlzIGFic3Ry
YWN0bHkgZXhlY3V0ZXMgdGhlIEJ5dGVjb2RlSW5kZXggaW4gcmV2ZXJzZS4gSW5zdHJ1Y3Rpb25z
IGxvZ2ljYWxseSBmaXJzdCB1c2Ugb3BlcmFuZHMgYW5kCiAgICAgLy8gdGhlbiBkZWZpbmUgb3Bl
cmFuZHMuIFRoaXMgbG9naWNhbCBvcmRlcmluZyBpcyBuZWNlc3NhcnkgZm9yIG9wZXJhdGlvbnMg
dGhhdCB1c2UgYW5kIGRlZiB0aGUgc2FtZQogICAgIC8vIG9wZXJhbmQsIGxpa2U6CiAgICAgLy8K
QEAgLTExMywzMSArMTE0LDM1IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdh
dGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlCiAgICAgLy8gdXNl
cyBiZWZvcmUgZGVmcywgdGhlbiB0aGUgYWRkIG9wZXJhdGlvbiBhYm92ZSB3b3VsZCBhcHBlYXIg
dG8gbm90IGhhdmUgbG9jMSBsaXZlLCBzaW5jZSB3ZSdkCiAgICAgLy8gZmlyc3QgYWRkIGl0IHRv
IHRoZSBvdXQgc2V0ICh0aGUgdXNlKSwgYW5kIHRoZW4gd2UnZCByZW1vdmUgaXQgKHRoZSBkZWYp
LgogCi0gICAgc3RlcE92ZXJJbnN0cnVjdGlvbkRlZihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywg
Z3JhcGgsIGJ5dGVjb2RlSW5kZXgsIGRlZik7Ci0gICAgc3RlcE92ZXJJbnN0cnVjdGlvblVzZUlu
RXhjZXB0aW9uSGFuZGxlcihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2Rl
SW5kZXgsIHVzZSk7Ci0gICAgc3RlcE92ZXJJbnN0cnVjdGlvblVzZShjb2RlQmxvY2ssIGluc3Ry
dWN0aW9ucywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgsIHVzZSk7CisgICAgc3RlcE92ZXJCeXRlY29k
ZUluZGV4RGVmKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVJbmRleCwg
ZGVmKTsKKyAgICBzdGVwT3ZlckJ5dGVjb2RlSW5kZXhVc2VJbkV4Y2VwdGlvbkhhbmRsZXIoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZUluZGV4LCB1c2UpOworICAgIHN0
ZXBPdmVyQnl0ZWNvZGVJbmRleFVzZShjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJ5
dGVjb2RlSW5kZXgsIHVzZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+
CiBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1
Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYg
aW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4LCBGYXN0Qml0VmVjdG9yJiBvdXQpCiB7Ci0gICAgc3RlcE92ZXJJbnN0cnVjdGlvbigK
LSAgICAgICAgY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZUluZGV4LAot
ICAgICAgICBbJl0gKHVuc2lnbmVkIGJpdEluZGV4KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlz
IHRoZSB1c2UgZnVuY3Rvciwgc28gd2Ugc2V0IHRoZSBiaXQuCi0gICAgICAgICAgICBvdXRbYml0
SW5kZXhdID0gdHJ1ZTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdICh1bnNpZ25lZCBiaXRJbmRl
eCkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmIGZ1bmN0b3IsIHNvIHdlIGNsZWFy
IHRoZSBiaXQuCi0gICAgICAgICAgICBvdXRbYml0SW5kZXhdID0gZmFsc2U7Ci0gICAgICAgIH0p
OworICAgIGF1dG8gbnVtYmVyT2ZDaGVja3BvaW50cyA9IGluc3RydWN0aW9ucy5hdChieXRlY29k
ZUluZGV4KS0+bnVtYmVyT2ZDaGVja3BvaW50cygpOworICAgIGZvciAoQ2hlY2twb2ludCBjaGVj
a3BvaW50ID0gbnVtYmVyT2ZDaGVja3BvaW50czsgY2hlY2twb2ludC0tOykgeworICAgICAgICBz
dGVwT3ZlckJ5dGVjb2RlSW5kZXgoCisgICAgICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0aW9u
cywgZ3JhcGgsIGJ5dGVjb2RlSW5kZXgud2l0aENoZWNrcG9pbnQoY2hlY2twb2ludCksCisgICAg
ICAgICAgICBbJl0gKHVuc2lnbmVkIGJpdEluZGV4KSB7CisgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyB0aGUgdXNlIGZ1bmN0b3IsIHNvIHdlIHNldCB0aGUgYml0LgorICAgICAgICAgICAgICAg
IG91dFtiaXRJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXSAo
dW5zaWduZWQgYml0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBkZWYg
ZnVuY3Rvciwgc28gd2UgY2xlYXIgdGhlIGJpdC4KKyAgICAgICAgICAgICAgICBvdXRbYml0SW5k
ZXhdID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KLWlubGluZSBib29sIEJ5
dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29k
ZUluZGV4KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25zJiBpbnN0
cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUJhc2ljQmxvY2smIGJsb2Nr
LCBCeXRlY29kZUluZGV4IHRhcmdldEluZGV4LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCitpbmxp
bmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9ySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlv
bnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlQmFzaWNCbG9j
ayYgYmxvY2ssIEJ5dGVjb2RlSW5kZXggdGFyZ2V0SW5kZXgsIEZhc3RCaXRWZWN0b3ImIHJlc3Vs
dCkKIHsKICAgICBBU1NFUlQoIWJsb2NrLmlzRXhpdEJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxv
Y2suaXNFbnRyeUJsb2NrKCkpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXRhcmdldEluZGV4
LmNoZWNrcG9pbnQoKSwgImNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24gY2FuJ3Qg
YmUgdXNlZCB0byBhc2sgcXVlc3Rpb25zIGFib3V0IGNoZWNrcG9pbnRzIik7CiAKICAgICBGYXN0
Qml0VmVjdG9yIG91dCA9IGJsb2NrLm91dCgpOwogCkBAIC0xNTgsMTkgKzE2MywyMCBAQCBpbmxp
bmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQmxvY2soQ29kZUJsb2NrVAogewogICAgIGlmIChibG9jay5pc0V4aXRCbG9jaygpIHx8IGJs
b2NrLmlzRW50cnlCbG9jaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNv
bXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIGluc3RydWN0aW9u
cywgZ3JhcGgsIGJsb2NrLCBCeXRlY29kZUluZGV4KGJsb2NrLmxlYWRlck9mZnNldCgpKSwgYmxv
Y2suaW4oKSk7CisgICAgcmV0dXJuIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24o
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBibG9jaywgQnl0ZWNvZGVJbmRleChibG9j
ay5sZWFkZXJPZmZzZXQoKSksIGJsb2NrLmluKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+Ci1pbmxpbmUgRmFzdEJpdFZlY3Rv
ciBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJ
bmRleChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1
Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
KQoraW5saW5lIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpnZXRM
aXZlbmVzc0luZm9BdEluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCksICJnZXRMaXZlbmVzc0luZm9BdEluc3RydWN0aW9uIGNhbid0
IGJlIHVzZWQgdG8gYXNrIHF1ZXN0aW9ucyBhYm91dCBjaGVja3BvaW50cyIpOwogICAgIEJ5dGVj
b2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogICAgIEFTU0VSVChibG9jayk7CiAgICAgQVNT
RVJUKCFibG9jay0+aXNFbnRyeUJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJs
b2NrKCkpOwogICAgIEZhc3RCaXRWZWN0b3Igb3V0OwogICAgIG91dC5yZXNpemUoYmxvY2stPm91
dCgpLm51bUJpdHMoKSk7Ci0gICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgKmJsb2NrLCBieXRlY29kZUluZGV4LCBv
dXQpOworICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9ySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBp
bnN0cnVjdGlvbnMsIGdyYXBoLCAqYmxvY2ssIGJ5dGVjb2RlSW5kZXgsIG91dCk7CiAgICAgcmV0
dXJuIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlVXNlRGVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZVVzZURlZi5jcHAKaW5kZXggY2U0NzBjOTIyZTg4M2ZlMDE3ZjA4ZDZiMmYzNjcyNDU3M2Rl
ODE5ZS4uNzM2NmNiNDBiNjk5NjQ4Njc0MmRmMmVhZjRiYWJjZDA4Y2RhODM3MCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCkBAIC0z
Myw2ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIFVTRVNfT1JfREVGUyhfX29w
Y29kZSwgLi4uKSBcCiAgICAgY2FzZSBfX29wY29kZTo6b3Bjb2RlSUQ6IHsgXAorICAgICAgICBz
dGF0aWNfYXNzZXJ0KF9fb3Bjb2RlOjpvcGNvZGVJRCA+PSBOVU1CRVJfT0ZfQllURUNPREVfV0lU
SF9DSEVDS1BPSU5UUywgIkRvbid0IHVzZSB0aGlzIG1hY3JvIGZvciBieXRlY29kZXMgdGhhdCBo
YXZlIGNoZWNrcG9pbnRzLiIpOyBcCiAgICAgICAgIGF1dG8gX19ieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxfX29wY29kZT4oKTsgXAogICAgICAgICBXVEZfTEFaWV9GT1JfRUFDSF9URVJNKENB
TExfRlVOQ1RPUiwgX19WQV9BUkdTX18pIFwKICAgICAgICAgcmV0dXJuOyBcCkBAIC00MSwxNyAr
NDIsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZGVmaW5lIFVTRVMgVVNFU19PUl9ERUZTCiAjZGVm
aW5lIERFRlMgVVNFU19PUl9ERUZTCiAKLXZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBjb25zdCBGdW5jdGlvbjx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5jdG9y
KQordm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBz
Y29wZVJlZ2lzdGVyLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENoZWNrcG9pbnQg
Y2hlY2twb2ludCwgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4mIGZ1
bmN0b3IpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KTsKIAotICAgIGF1dG8gaGFuZGxlTmV3QXJyYXlMaWtlID0gWyZdKGF1dG8gb3ApIHsKKworICAg
IGF1dG8gaGFuZGxlTmV3QXJyYXlMaWtlID0gWyZdIChhdXRvIG9wKSB7CiAgICAgICAgIGludCBi
YXNlID0gb3AubV9hcmd2Lm9mZnNldCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0
YXRpY19jYXN0PGludD4ob3AubV9hcmdjKTsgaSsrKQogICAgICAgICAgICAgZnVuY3RvcihWaXJ0
dWFsUmVnaXN0ZXIgeyBiYXNlIC0gaSB9KTsKICAgICB9OwogCi0gICAgYXV0byBoYW5kbGVPcENh
bGxMaWtlID0gWyZdKGF1dG8gb3ApIHsKKyAgICBhdXRvIGhhbmRsZU9wQ2FsbExpa2UgPSBbJl0g
KGF1dG8gb3ApIHsKICAgICAgICAgZnVuY3RvcihvcC5tX2NhbGxlZSk7CiAgICAgICAgIGludCBs
YXN0QXJnID0gLXN0YXRpY19jYXN0PGludD4ob3AubV9hcmd2KSArIENhbGxGcmFtZTo6dGhpc0Fy
Z3VtZW50T2Zmc2V0KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8
aW50PihvcC5tX2FyZ2MpOyBpKyspCkBAIC02MSw2ICs2MywxNSBAQCB2b2lkIGNvbXB1dGVVc2Vz
Rm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0
IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfTsKIAorICAgIGF1dG8gdXNlQXRFYWNoQ2hl
Y2twb2ludCA9IFsmXSAoYXV0by4uLiB2aXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIChmdW5j
dG9yKHZpcnR1YWxSZWdpc3RlcnMpLCAuLi4pOworICAgIH07CisKKyAgICBhdXRvIHVzZUF0RWFj
aENoZWNrcG9pbnRTdGFydGluZ1dpdGggPSBbJl0gKENoZWNrcG9pbnQgZmlyc3RVc2UsIGF1dG8u
Li4gdmlydHVhbFJlZ2lzdGVycykgeworICAgICAgICBpZiAoY2hlY2twb2ludCA+PSBmaXJzdFVz
ZSkKKyAgICAgICAgICAgIChmdW5jdG9yKHZpcnR1YWxSZWdpc3RlcnMpLCAuLi4pOworICAgIH07
CisKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgY2FzZSBvcF93aWRlMTY6CiAgICAgY2Fz
ZSBvcF93aWRlMzI6CkBAIC0yNTAsOSArMjYxLDIyIEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRl
Y29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1
CiAgICAgVVNFUyhPcEhhc1N0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVy
YXRvcikKICAgICBVU0VTKE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5
LCBlbnVtZXJhdG9yKQogICAgIFVTRVMoT3BJblN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9w
ZXJ0eSwgZW51bWVyYXRvcikKLSAgICBVU0VTKE9wQ29uc3RydWN0VmFyYXJncywgY2FsbGVlLCB0
aGlzVmFsdWUsIGFyZ3VtZW50cykKLSAgICBVU0VTKE9wQ2FsbFZhcmFyZ3MsIGNhbGxlZSwgdGhp
c1ZhbHVlLCBhcmd1bWVudHMpCi0gICAgVVNFUyhPcFRhaWxDYWxsVmFyYXJncywgY2FsbGVlLCB0
aGlzVmFsdWUsIGFyZ3VtZW50cykKKworICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CisgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKKyAg
ICAgICAgdXNlQXRFYWNoQ2hlY2twb2ludChieXRlY29kZS5tX2NhbGxlZSwgYnl0ZWNvZGUubV90
aGlzVmFsdWUsIGJ5dGVjb2RlLm1fYXJndW1lbnRzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCk7CisgICAgICAgIHVzZUF0RWFj
aENoZWNrcG9pbnQoYnl0ZWNvZGUubV9jYWxsZWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBieXRl
Y29kZS5tX2FyZ3VtZW50cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9j
b25zdHJ1Y3RfdmFyYXJnczogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKTsKKyAgICAgICAgdXNlQXRFYWNoQ2hlY2twb2ludChi
eXRlY29kZS5tX2NhbGxlZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUsIGJ5dGVjb2RlLm1fYXJndW1l
bnRzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFVTRVMoT3BHZXREaXJlY3RQbmFt
ZSwgYmFzZSwgcHJvcGVydHksIGluZGV4LCBlbnVtZXJhdG9yKQogCkBAIC0yNjUsOCArMjg5LDE5
IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGdlbmVyYXRv
ciwgYXJndW1lbnQpCiAKLSAgICBVU0VTKE9wSXRlcmF0b3JPcGVuLCBzeW1ib2xJdGVyYXRvciwg
aXRlcmFibGUpCi0gICAgVVNFUyhPcEl0ZXJhdG9yTmV4dCwgaXRlcmF0b3IsIG5leHQsIGl0ZXJh
YmxlKQorICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogeworICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOworICAgICAgICB1c2VBdEVhY2hD
aGVja3BvaW50U3RhcnRpbmdXaXRoKE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsLCBieXRlY29k
ZS5tX3N5bWJvbEl0ZXJhdG9yLCBieXRlY29kZS5tX2l0ZXJhYmxlKTsKKyAgICAgICAgdXNlQXRF
YWNoQ2hlY2twb2ludFN0YXJ0aW5nV2l0aChPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dCwgYnl0ZWNv
ZGUubV9pdGVyYXRvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIG9wX2l0
ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cEl0ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgdXNlQXRFYWNoQ2hlY2twb2ludChieXRlY29kZS5t
X2l0ZXJhdG9yKTsKKyAgICAgICAgdXNlQXRFYWNoQ2hlY2twb2ludFN0YXJ0aW5nV2l0aChPcEl0
ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQsIGJ5dGVjb2RlLm1fbmV4dCwgYnl0ZWNvZGUubV9pdGVy
YWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBjYXNlIG9wX25ld19hcnJheV93
aXRoX3NwcmVhZDoKICAgICAgICAgaGFuZGxlTmV3QXJyYXlMaWtlKGluc3RydWN0aW9uLT5hczxP
cE5ld0FycmF5V2l0aFNwcmVhZD4oKSk7CkBAIC0zMDIsOCArMzM3LDE0IEBAIHZvaWQgY29tcHV0
ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3Rlciwg
Y29uc3QgSW5zdHJ1CiAgICAgfQogfQogCi12b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRl
eEltcGwodW5zaWduZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBj
b25zdCBGdW5jdGlvbjx2b2lkKFZpcnR1YWxSZWdpc3Rlcik+JiBmdW5jdG9yKQordm9pZCBjb21w
dXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKHVuc2lnbmVkIG51bVZhcnMsIGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2hlY2twb2ludCBjaGVja3BvaW50LCBjb25zdCBTY29wZWRM
YW1iZGE8dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3RvcikKIHsKKworICAgIGF1dG8gZGVm
QXQgPSBbJl0gKENoZWNrcG9pbnQgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewor
ICAgICAgICBpZiAodGFyZ2V0ID09IGNoZWNrcG9pbnQpCisgICAgICAgICAgICBmdW5jdG9yKG9w
ZXJhbmQpOworICAgIH07CisKICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7
CiAgICAgY2FzZSBvcF93aWRlMTY6CiAgICAgY2FzZSBvcF93aWRlMzI6CkBAIC00MTIsMTAgKzQ1
MywyMyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWduZWQgbnVt
VmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgIERFRlMoT3BOZXdBc3luY0dlbmVy
YXRvckZ1bmNFeHAsIGRzdCkKICAgICBERUZTKE9wTmV3QXN5bmNGdW5jLCBkc3QpCiAgICAgREVG
UyhPcE5ld0FzeW5jRnVuY0V4cCwgZHN0KQotICAgIERFRlMoT3BDYWxsVmFyYXJncywgZHN0KQot
ICAgIERFRlMoT3BUYWlsQ2FsbFZhcmFyZ3MsIGRzdCkKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJn
czogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbFZhcmFy
Z3M+KCk7CisgICAgICAgIGRlZkF0KE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBieXRlY29kZS5t
X2RzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFy
YXJnczogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wVGFpbENh
bGxWYXJhcmdzPigpOworICAgICAgICBkZWZBdChPcFRhaWxDYWxsVmFyYXJnczo6bWFrZUNhbGws
IGJ5dGVjb2RlLm1fZHN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2Nv
bnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BDb25zdHJ1Y3RWYXJhcmdzPigpOworICAgICAgICBkZWZBdChPcENvbnN0cnVjdFZhcmFy
Z3M6Om1ha2VDYWxsLCBieXRlY29kZS5tX2RzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBERUZTKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBkc3QpCi0gICAgREVGUyhPcENv
bnN0cnVjdFZhcmFyZ3MsIGRzdCkKICAgICBERUZTKE9wR2V0RnJvbVNjb3BlLCBkc3QpCiAgICAg
REVGUyhPcENhbGwsIGRzdCkKICAgICBERUZTKE9wVGFpbENhbGwsIGRzdCkKQEAgLTUwMSw4ICs1
NTUsMjQgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKHVuc2lnbmVkIG51
bVZhcnMsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnUKIAogICAgIERFRlMoT3BDYXRjaCwgZXhj
ZXB0aW9uLCB0aHJvd25WYWx1ZSkKIAotICAgIERFRlMoT3BJdGVyYXRvck9wZW4sIGl0ZXJhdG9y
LCBuZXh0KQotICAgIERFRlMoT3BJdGVyYXRvck5leHQsIGRvbmUsIHZhbHVlKQorICAgIGNhc2Ug
b3BfaXRlcmF0b3Jfb3BlbjogeworICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wSXRlcmF0b3JPcGVuPigpOworCisgICAgICAgIGRlZkF0KE9wSXRlcmF0b3JPcGVuOjpz
eW1ib2xDYWxsLCBieXRlY29kZS5tX2l0ZXJhdG9yKTsKKyAgICAgICAgZGVmQXQoT3BJdGVyYXRv
ck9wZW46OmdldE5leHQsIGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKKworICAgICAgICBkZWZBdChPcEl0
ZXJhdG9yTmV4dDo6Z2V0RG9uZSwgYnl0ZWNvZGUubV9kb25lKTsKKyAgICAgICAgLy8gV2UgbmVl
ZCB0byBjbGFpbSB3ZSBzZXQgbV92YWx1ZSBoZXJlIGJlY2F1c2Ugd2UgY291bGQgZWFybHkgZXhp
dCBmcm9tIHRoZSBieXRlY29kZSBpZiB3ZSBhcmUgZG9uZS4KKyAgICAgICAgZGVmQXQoT3BJdGVy
YXRvck5leHQ6OmdldERvbmUsIGJ5dGVjb2RlLm1fdmFsdWUpOworCisgICAgICAgIGRlZkF0KE9w
SXRlcmF0b3JOZXh0OjpnZXRWYWx1ZSwgYnl0ZWNvZGUubV92YWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKICAgICBjYXNlIG9wX2VudGVyOiB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG51bVZhcnM7IGktLTspCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5oCmluZGV4IGIzYjAwYTk5MjM3MzNkMzFhYzg0ZTVkODgyZGE5MDNlOWJl
ZGM3ZmIuLjY2ZmViZjllZDE2MmY0MDE3Yjc3OWVmNDY3NTc4MDQ3Mjk1Yjk3MjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCkBAIC0zMiwy
MyArMzIsMjMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgY29tcHV0ZVVzZXNGb3JCeXRl
Y29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3Qg
RnVuY3Rpb248dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYpOwotdm9pZCBjb21wdXRlRGVmc0ZvckJ5
dGVjb2RlSW5kZXhJbXBsKHVuc2lnbmVkLCBjb25zdCBJbnN0cnVjdGlvbiosIGNvbnN0IEZ1bmN0
aW9uPHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4mKTsKK3ZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29k
ZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEluc3RydWN0aW9uKiwgQ2hlY2twb2lu
dCwgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4mKTsKK3ZvaWQgY29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCwgY29uc3QgSW5zdHJ1Y3Rpb24q
LCBDaGVja3BvaW50LCBjb25zdCBTY29wZWRMYW1iZGE8dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYp
OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaz4KLXZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29k
ZUluZGV4KEJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
Y29uc3QgRnVuY3Rpb248dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3RvcikKK3RlbXBsYXRl
PHR5cGVuYW1lIEJsb2NrLCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlSW5kZXgoQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBDaGVja3BvaW50IGNoZWNrcG9pbnQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICBpZiAo
b3Bjb2RlSUQgIT0gb3BfZW50ZXIgJiYgKGNvZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdn
aW5nT3Bjb2RlcygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSkgJiYgY29kZUJsb2NrLT5zY29w
ZVJlZ2lzdGVyKCkuaXNWYWxpZCgpKQogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jay0+c2NvcGVS
ZWdpc3RlcigpKTsKIAotICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoY29kZUJs
b2NrLT5zY29wZVJlZ2lzdGVyKCksIGluc3RydWN0aW9uLCBmdW5jdG9yKTsKKyAgICBjb21wdXRl
VXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLCBpbnN0
cnVjdGlvbiwgY2hlY2twb2ludCwgc2NvcGVkTGFtYmRhPHZvaWQoVmlydHVhbFJlZ2lzdGVyKT4o
ZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaz4KLXZvaWQgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZUluZGV4KEJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPiYgZnVuY3Rv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIEJsb2NrLCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBjb21w
dXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgoQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBDaGVja3BvaW50IGNoZWNrcG9pbnQsIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiB7Ci0gICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbChjb2RlQmxvY2st
Pm51bVZhcnMoKSwgaW5zdHJ1Y3Rpb24sIGZ1bmN0b3IpOworICAgIGNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVJbmRleEltcGwoY29kZUJsb2NrLT5udW1WYXJzKCksIGluc3RydWN0aW9uLCBjaGVja3Bv
aW50LCBzY29wZWRMYW1iZGE8dm9pZChWaXJ0dWFsUmVnaXN0ZXIpPihmdW5jdG9yKSk7CiB9CiAK
ICN1bmRlZiBDQUxMX0ZVTkNUT1IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKaW5kZXggMzZlOGQ4MTYyMWUwZjVjNTk0ODA0NjcyNmVjMDA1Yjg0YjcxZjg0
MS4uMjUwYTU1ZTQwZDcyMGQ2YzM1ZDMwMmViMGEyZGE4YzNmYmY3NjU0MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTM0LDcgKzM0LDcgQEAK
ICNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKICNpbmNsdWRlICJCeVZhbEluZm8uaCIK
ICNpbmNsdWRlICJCeXRlY29kZUR1bXBlci5oIgotI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCIK
ICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKQEAgLTE5MjQs
NyArMTkyNCw3IEBAIHZvaWQgQ29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRl
ZEZvckJ5dGVjb2RlSW5kZXhTbG93KGNvbnN0IE9wQ2F0Y2gmCiAgICAgLy8gaW50byB0aGUgREZH
LgogCiAgICAgYXV0byBuZXh0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRl
eCkubmV4dCgpLm9mZnNldCgpOwotICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUxvY2FscyA9IGJ5dGVj
b2RlTGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZUluZGV4KHRoaXMsIEJ5dGVjb2Rl
SW5kZXgobmV4dE9mZnNldCkpOworICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUxvY2FscyA9IGJ5dGVj
b2RlTGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRJbnN0cnVjdGlvbih0aGlzLCBCeXRlY29kZUlu
ZGV4KG5leHRPZmZzZXQpKTsKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBsaXZlT3BlcmFu
ZHM7CiAgICAgbGl2ZU9wZXJhbmRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGl2ZUxvY2Fscy5i
aXRDb3VudCgpKTsKICAgICBsaXZlTG9jYWxzLmZvckVhY2hTZXRCaXQoWyZdICh1bnNpZ25lZCBs
aXZlTG9jYWwpIHsKQEAgLTMxMTAsNyArMzExMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2YWxpZGF0
ZSgpCiB7CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIGxpdmVuZXNzKHRoaXMpOyAvLyBD
b21wdXRlIGRpcmVjdGx5IGZyb20gc2NyYXRjaCBzbyBpdCBkb2Vzbid0IGVmZmVjdCBDb2RlQmxv
Y2sgZm9vdHByaW50LgogICAgIAotICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0SGVhZCA9IGxpdmVu
ZXNzLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVJbmRleCh0aGlzLCBCeXRlY29kZUluZGV4KDAp
KTsKKyAgICBGYXN0Qml0VmVjdG9yIGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRMaXZlbmVzc0lu
Zm9BdEluc3RydWN0aW9uKHRoaXMsIEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgIAogICAgIGlmIChs
aXZlQXRIZWFkLm51bUJpdHMoKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbnVtQ2FsbGVlTG9j
YWxzKSkgewogICAgICAgICBiZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCmluZGV4
IDc5MTQ1M2YzZmQ3MjM0MzZlZTBlZDUxOTBmMGJjMjdkN2RhMjMwNWIuLjc5ODYyYjhhNjcwMTg3
MWM5YjNkYjM2MzBmODY2ZWRkM2E5ZDA2ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCkBAIC0zNSwxOCArMzUsMTkg
QEAgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogY2xhc3MgQ29kZUJsb2NrOwogCiAv
LyBOb3RlOiBGdWxsIGJ5dGVjb2RlIGxpdmVuZXNzIGRvZXMgbm90IHRyYWNrIGFueSBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgbGl2ZW5lc3Mgb2YgdGVtcHMuCi0vLyBJZiB5b3Ugd2FudCB0bXAgbGl2
ZW5lc3MgZm9yIGEgY2hlY2twb2ludCBhc2sgbGl2ZW5lc3NGb3JDaGVja3BvaW50LgorLy8gSWYg
eW91IHdhbnQgdG1wIGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNrIHRtcExpdmVuZXNzRm9y
Q2hlY2twb2ludC4KIGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBnZXRMaXZl
bmVzcyhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2lu
dCBwb2ludCkgY29uc3QKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB0aGlz
IGRvIHdoZW4gd2UgaGF2ZSBjaGVja3BvaW50cz8KKyAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0
byB3b3JyeSBhYm91dCBvdmVyZmxvd2luZyBpbnRvIHRoZSBuZXh0IGJ5dGVjb2Rlb2Zmc2V0IGlu
IG91ciB2ZWN0b3JzIGJlY2F1c2Ugd2UKKyAgICAgICAgLy8gc3RhdGljIGFzc2VydCB0aGF0IGJ5
dGVjb2RlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjaGVja3BvaW50cyBp
biBCeXRlY29kZVN0cnVjdHMuaAogICAgICAgICBzd2l0Y2ggKHBvaW50KSB7CiAgICAgICAgIGNh
c2UgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2U6Ci0gICAgICAgICAgICByZXR1
cm4gbV9iZWZvcmVVc2VWZWN0b3JbYnl0ZWNvZGVJbmRleC5vZmZzZXQoKV07CisgICAgICAgICAg
ICByZXR1cm4gbV91c2VzQmVmb3JlW3RvSW5kZXgoYnl0ZWNvZGVJbmRleCldOwogICAgICAgICBj
YXNlIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QWZ0ZXJVc2U6Ci0gICAgICAgICAgICByZXR1
cm4gbV9hZnRlclVzZVZlY3RvcltieXRlY29kZUluZGV4Lm9mZnNldCgpXTsKKyAgICAgICAgICAg
IHJldHVybiBtX3VzZXNBZnRlclt0b0luZGV4KGJ5dGVjb2RlSW5kZXgpXTsKICAgICAgICAgfQog
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTU5LDEwICs2
MCwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXM7CiAgICAgCisgICAgc3RhdGljIHNpemVfdCB0b0luZGV4KEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkgeyByZXR1cm4gYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSArIGJ5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpOyB9CisKICAgICAvLyBGSVhNRTogVXNlIEZhc3RCaXRWZWN0
b3IncyB2aWV3IG1lY2hhbmlzbSB0byBtYWtlIHRoZW0gY29tcGFjdC4KLSAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NDI3PFBhc3RlPgotICAgIFZlY3Rv
cjxGYXN0Qml0VmVjdG9yLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9iZWZvcmVVc2VWZWN0
b3I7Ci0gICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X2FmdGVyVXNlVmVjdG9yOworICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDQ0MjcKKyAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9y
T3ZlcmZsb3c+IG1fdXNlc0JlZm9yZTsKKyAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5z
YWZlVmVjdG9yT3ZlcmZsb3c+IG1fdXNlc0FmdGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCmluZGV4IDNk
NzBjZDU0M2VjZmFlOTAyMjUwMjk2MDFhMGQ0MDVlYzY3MWIyZDAuLmY2M2FkMjlmMjBmNTFlNmM2
MDlmY2NiOWRiY2I1NTg5NmUzMjJmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0cnVjdGlvbi5oCkBAIC0zOSw2ICszOSw3IEBAIHN0cnVjdCBKU09wY29kZVRyYWl0
cyB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBPcGNvZGVJRCB3aWRlMzIgPSBvcF93aWRlMzI7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCogb3Bjb2RlTGVuZ3RocyA9IDo6SlND
OjpvcGNvZGVMZW5ndGhzOwogICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogY29uc3Qq
IG9wY29kZU5hbWVzID0gOjpKU0M6Om9wY29kZU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIg
YXV0byBjaGVja3BvaW50Q291bnRUYWJsZSA9IGJ5dGVjb2RlQ2hlY2twb2ludENvdW50VGFibGU7
CiB9OwogCiBzdHJ1Y3QgV2FzbU9wY29kZVRyYWl0cyB7CkBAIC01MCw2ICs1MSw3IEBAIHN0cnVj
dCBXYXNtT3Bjb2RlVHJhaXRzIHsKICAgICBzdGF0aWMgY29uc3RleHByIE9wY29kZUlEIHdpZGUz
MiA9IHdhc21fd2lkZTMyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQqIG9w
Y29kZUxlbmd0aHMgPSB3YXNtT3Bjb2RlTGVuZ3RoczsKICAgICBzdGF0aWMgY29uc3RleHByIGNv
bnN0IGNoYXIqIGNvbnN0KiBvcGNvZGVOYW1lcyA9IHdhc21PcGNvZGVOYW1lczsKKyAgICBzdGF0
aWMgY29uc3RleHByIGF1dG8gY2hlY2twb2ludENvdW50VGFibGUgPSB3YXNtQ2hlY2twb2ludENv
dW50VGFibGU7CiB9OwogCiAKQEAgLTEyMiw2ICsxMjQsMTQgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gb3Bjb2RlSUQ8VHJhaXRzPigpIDwgVHJhaXRzOjpudW1iZXJPZkJ5dGVjb2Rlc1dpdGhD
aGVja3BvaW50czsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHMgPSBKU09w
Y29kZVRyYWl0cz4KKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoZWNrcG9pbnRzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghaGFzQ2hlY2twb2ludHM8VHJhaXRzPigpKQorICAgICAgICAgICAg
cmV0dXJuIDE7CisgICAgICAgIHJldHVybiBUcmFpdHM6OmNoZWNrcG9pbnRDb3VudFRhYmxlW29w
Y29kZUlEPFRyYWl0cz4oKV07CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRz
ID0gSlNPcGNvZGVUcmFpdHM+CiAgICAgaW50IHNpemVTaGlmdEFtb3VudCgpIGNvbnN0CiAgICAg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAppbmRleCBlNjQ2ZDA0YWI5MzlmZmI3NjcyNGNjMGE4ZDQ1MWYyOGRh
M2YwZWQyLi42ZjM1NzM4YjMxNjhjODhjNTE3YmZkNGUwZDUxNTUyM2ZmNmVlOTY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcApAQCAtNTIxNSwxMCArNTIxNSwxMiBAQCB2b2lkIEZvckluQ29udGV4dDo6Zmlu
YWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cgogICAgIGZvciAodW5zaWduZWQgb2Zmc2V0ID0gYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoKTsg
aXNWYWxpZCgpICYmIG9mZnNldCA8IGJvZHlCeXRlY29kZUVuZE9mZnNldDspIHsKICAgICAgICAg
YXV0byBpbnN0cnVjdGlvbiA9IGdlbmVyYXRvci5pbnN0cnVjdGlvbnMoKS5hdChvZmZzZXQpOwog
ICAgICAgICBBU1NFUlQoIWluc3RydWN0aW9uLT5pczxPcEVudGVyPigpKTsKLSAgICAgICAgY29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgIGlmIChsb2NhbCgpLT52
aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvcGVyYW5kKQotICAgICAgICAgICAgICAgIGludmFsaWRhdGUo
KTsKLSAgICAgICAgfSk7CisgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5z
dHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgeworICAgICAg
ICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24u
cHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAg
ICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KICAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCmluZGV4IDgwY2Q3M2RlNjYz
NTE2M2Y1MmNiNjhhZDk5YjJmNWI1ODhiZTFjNDQuLjhkNzg1OTUyNDBlY2E5NmY4MmNkOTViODRk
ZTNiOGYzZGEzYjMzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rm9yQWxsS2lsbHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtp
bGxzLmgKQEAgLTc5LDE4ICs3OSwyMSBAQCB2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdAogICAgICAg
ICAgICAgQVNTRVJUKGJlZm9yZS5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpICE9IGFmdGVy
LmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpOwogICAgICAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLm9mZnNldCgpID09IGFmdGVyLmJ5dGVjb2Rl
SW5kZXgoKS5vZmZzZXQoKSB8fCBub2RlQWZ0ZXItPm9wKCkgPT0gRXhpdE9LIHx8IG5vZGVBZnRl
ci0+b3AoKSA9PSBJbnZhbGlkYXRpb25Qb2ludCwgIldoZW4gdGhlIERGRyBkb2VzIGNvZGUgbW90
aW9uIGl0IHNob3VsZCBjaGFuZ2UgdGhlIGZvckV4aXQgb3JpZ2luIHRvIG1hdGNoIHRoZSBzdXJy
b3VuZGluZyBieXRlY29kZXMuIik7CiAKLSAgICAgICAgICAgIGF1dG8gY2hlY2twb2ludExpdmVC
ZWZvcmUgPSBsaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2Rl
SW5kZXgoKSk7Ci0gICAgICAgICAgICBhdXRvIGNoZWNrcG9pbnRMaXZlQWZ0ZXIgPSBsaXZlbmVz
c0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAg
ICAgICAgIGF1dG8gbGl2ZUJlZm9yZSA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJs
b2NrLCBiZWZvcmUuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgICAgIGF1dG8gbGl2ZUFmdGVy
ID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGFmdGVyLmJ5dGVjb2RlSW5k
ZXgoKSk7CisgICAgICAgICAgICBsaXZlQWZ0ZXIuaW52ZXJ0KCk7CisgICAgICAgICAgICBsaXZl
QmVmb3JlLmZpbHRlcihsaXZlQWZ0ZXIpOwogCi0gICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZl
bmVzcyYgZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKLSAgICAg
ICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVBZnRlciA9IGZ1bGxMaXZlbmVzcy5nZXRM
aXZlbmVzcyhhZnRlci5ieXRlY29kZUluZGV4KCksIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6
QmVmb3JlVXNlKTsKKyAgICAgICAgICAgIGxpdmVCZWZvcmUuZm9yRWFjaFNldEJpdChbJl0gKHNp
emVfdCB0bXApIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChiZWZvcmVJ
bmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQ6OnRtcCh0bXApKSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgewor
ICAgICAgICAgICAgLy8gV2UgYXJlIG1vdmluZyBvbiB0byBhbm90aGVyIGJ5dGVjb2RlLCBhbGwg
dGVtcHMgc2hvdWxkIGJlIGRlYWQgbm93LgorICAgICAgICAgICAgYXV0byBsaXZlQmVmb3JlID0g
dG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGJlZm9yZS5ieXRlY29kZUluZGV4
KCkpOwogCi0gICAgICAgICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6IGNoZWNrcG9pbnRMaXZl
QmVmb3JlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoZWNrcG9pbnRMaXZlQWZ0ZXIuY29udGFp
bnMob3BlcmFuZCkgfHwgKCFvcGVyYW5kLmlzVG1wKCkgJiYgbGl2ZUFmdGVyW29wZXJhbmQudmly
dHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCldKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoYmVmb3JlSW5saW5lQ2FsbEZy
YW1lLCBvcGVyYW5kKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBsaXZlQmVmb3JlLmZvckVhY2hTZXRCaXQoWyZdIChzaXplX3QgdG1wKSB7CisgICAg
ICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoYmVmb3JlSW5saW5lQ2FsbEZyYW1lLCBP
cGVyYW5kOjp0bXAodG1wKSkpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5lc3NGb3Io
Y29kZUJsb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggNTAz
NDEyMDFlYmQyMGYzNmJkMzY4MDM2OWUyOTM4ZmY3NDMyMzIxMC4uOGU4NDZjYmU5ZDRkMWM3ZTE2
OWJjZDg2ZjdhNzUwNDRhOTFkOGY1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAKQEAgLTExNTIsOCArMTE1Miw4IEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUo
T3BlcmFuZCBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgICAgICBpZiAo
IWNvZGVCbG9jay0+bnVtVG1wcygpIHx8IG9wZXJhbmRJbmRleCA8IHRtcE9mZnNldCkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgYXV0byBsaXZlID0gbGl2ZW5lc3NG
b3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7
Ci0gICAgICAgICAgICByZXR1cm4gbGl2ZS5jb250YWlucyhvcGVyYW5kKTsKKyAgICAgICAgICAg
IGF1dG8gYml0TWFwID0gdG1wTGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGNvZGVP
cmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4gYml0TWFwLmdl
dChvcGVyYW5kSW5kZXggLSB0bXBPZmZzZXQpOwogICAgICAgICB9CiAKICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgLSBjb2RlT3JpZ2luUHRy
LT5zdGFja09mZnNldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IDUy
YjM3MTc0M2FkODZhMjhiYWQ2MmQxZWVhOWMwZGUxNDc4ODAwNTMuLjg2MzYyMjdmMzk0ODMzNWRi
M2Q4NDBlODFkM2ZhMGM1Y2JiYTdmOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKQEAgLTkwNCw5ICs5MDQsMTAgQEAgcHVibGljOgogCiAgICAgICAgICAgICBpZiAoY29kZU9y
aWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgewogICAgICAgICAgICAgICAg
IEFTU0VSVChjb2RlQmxvY2stPm51bVRtcHMoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBsaXZl
ID0gbGl2ZW5lc3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVj
b2RlSW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgZm9yIChPcGVyYW5kIG9wZXJhbmQgOiBsaXZl
KQotICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJh
bWUsIG9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxpdmVUbXBzID0gdG1wTGl2ZW5l
c3NGb3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgo
KSk7CisgICAgICAgICAgICAgICAgbGl2ZVRtcHMuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0
bXApIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihyZW1hcE9wZXJhbmQoaW5saW5lQ2Fs
bEZyYW1lLCBPcGVyYW5kOjp0bXAodG1wKSkpOworICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhh
c2UuY3BwCmluZGV4IGQ0MzA3ZWQ4NzMwNmY0NDY2MjBiNzgxYjBmMDJkNWNhNDUzYzliYWIuLmNj
OGY5ZTE3NWRmYTljYThjMDhlNWM3MjAzOGM2NDRmMWRlYjdjMmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcApAQCAtODgs
NyArODgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoREZHTW92SGludFJlbW92YWxQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAg
ZGF0YUxvZygiICAgIExvY2FsczogIiwgbV9zdGF0ZSwgIlxuIik7CisgICAgICAgICAgICBkYXRh
TG9nKCIgICAgTG9jYWxzIGF0ICIsIGJsb2NrLT50ZXJtaW5hbCgpLT5vcmlnaW4uZm9yRXhpdCwg
IjogIiwgbV9zdGF0ZSwgIlxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBBc3N1bWUgdGhhdCBi
bG9ja3MgYWZ0ZXIgdXMgZXhpdC4KICAgICAgICAgY3VycmVudEVwb2NoLmJ1bXAoKTsKQEAgLTk5
LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE1vdkhp
bnQpIHsKICAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGlu
dFJlbW92YWxQaGFzZUludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgQXQgIiwgbm9kZSwgIjogY3VycmVudCA9ICIsIGN1cnJlbnRFcG9jaCwgIiwgbG9j
YWwgPSAiLCBsb2NhbEVwb2NoLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEF0ICIsIG5vZGUsICIgKCIsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpLCAiKTogY3VycmVu
dCA9ICIsIGN1cnJlbnRFcG9jaCwgIiwgbG9jYWwgPSAiLCBsb2NhbEVwb2NoLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWxvY2FsRXBvY2ggfHwgbG9jYWxFcG9jaCA9PSBjdXJyZW50RXBv
Y2gpIHsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoWm9t
YmllSGludCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKaW5kZXggNzE2MWZiZjI2OGYzNTAxOTI5
NzhhMmY4NTJkNTFjYzhiMTA5ZTczNS4uNWFkZTljOTVhMDRlYzY1NGJlMjkyZWFkMTE1NTRiODQ5
ZmFlNjkzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCkBAIC03NTgsNyAr
NzU4LDcgQEAgdm9pZCBQbGFuOjpjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBtX2NvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKTsKLSAgICBGYXN0Qml0VmVjdG9yIGxpdmVuZXNzID0gYWx0ZXJuYXRp
dmUtPmxpdmVuZXNzQW5hbHlzaXMoKS5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlSW5kZXgoYWx0
ZXJuYXRpdmUsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBGYXN0Qml0VmVjdG9yIGxp
dmVuZXNzID0gYWx0ZXJuYXRpdmUtPmxpdmVuZXNzQW5hbHlzaXMoKS5nZXRMaXZlbmVzc0luZm9B
dEluc3RydWN0aW9uKGFsdGVybmF0aXZlLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gbV9tdXN0SGFuZGxlVmFsdWVzLm51bWJlck9mTG9jYWxz
KCk7IGxvY2FsLS07KSB7CiAgICAgICAgIGlmICghbGl2ZW5lc3NbbG9jYWxdKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgppbmRleCA4MjM3NGI3ZmJlODZkNTc4OGIz
YTQwNTgxNThhODk4ZDZhNmEyMDhjLi4wNWQwOTg4MDY5MDZlYTgyMjMwMmRjMjEwMTYyYWM4ZTA5
ZTY4NmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29k
ZS5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgpAQCAt
MTMwLDE1ICsxMzAsMTggQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIDw8LUVPRgogc3RydWN0ICN7
Y2FwaXRhbGl6ZWRfbmFtZX0gOiBwdWJsaWMgSW5zdHJ1Y3Rpb24gewogICAgICN7b3Bjb2RlSUR9
CisgICAgI3tsZW5ndGhWYWx1ZX0KICAgICAje3RlbXBzfQogICAgICN7Y2hlY2twb2ludFZhbHVl
c30KIAorCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KICN7Y29uc3RydWN0b3JzfQogI3tzZXR0ZXJz
fSN7bWV0YWRhdGFfc3RydWN0X2FuZF9hY2Nlc3Nvcn0KICN7bWVtYmVyc30KIH07Cisje2NoZWNr
cG9pbnRTaXplQXNzZXJ0fQogRU9GCiAgICAgZW5kCiAKQEAgLTE0NiwxMiArMTQ5LDIyIEBAIEVP
RgogICAgICAgICAic3RhdGljIGNvbnN0ZXhwciAje29wY29kZUlEVHlwZX0gb3Bjb2RlSUQgPSAj
e25hbWV9OyIKICAgICBlbmQKIAorICAgIGRlZiBsZW5ndGhWYWx1ZQorICAgICAgICAic3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbGVuZ3RoID0gI3tsZW5ndGh9OyIKKyAgICBlbmQKKwogICAgIGRl
ZiBjaGVja3BvaW50VmFsdWVzCiAgICAgICAgIHJldHVybiBpZiBAY2hlY2twb2ludHMubmlsPwog
CiAgICAgICAgIFsiZW51bSBDaGVja3BvaW50cyA6IHVpbnQ4X3QgeyJdLmNvbmNhdChjaGVja3Bv
aW50cy5tYXB7IHxjaGVja3BvaW50fCAiICAgICAgICAje2NoZWNrcG9pbnR9LCIgfSkuY29uY2F0
KFsiICAgICAgICBudW1iZXJPZkNoZWNrcG9pbnRzLCIsICIgICAgfTsiXSkuam9pbigiXG4iKQog
ICAgIGVuZAogCisgICAgZGVmIGNoZWNrcG9pbnRTaXplQXNzZXJ0CisgICAgICAgIHJldHVybiBp
ZiBAY2hlY2twb2ludHMubmlsPworCisgICAgICAgICJzdGF0aWNfYXNzZXJ0KCN7Y2FwaXRhbGl6
ZWRfbmFtZX06Omxlbmd0aCA+ICN7Y2FwaXRhbGl6ZWRfbmFtZX06Om51bWJlck9mQ2hlY2twb2lu
dHMsIFwiRnVsbEJ5dGVjb2RlTGl2ZXNzIHJlbGllcyBvbiB0aGUgbGVuZ3RoIG9mICN7Y2FwaXRh
bGl6ZWRfbmFtZX0gYmVpbmcgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgY2hlY2twb2ludHNc
Iik7IgorICAgIGVuZAorCiAgICAgZGVmIHRlbXBzCiAgICAgICAgIHJldHVybiBpZiBAdG1wcy5u
aWw/CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlv
bi5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgppbmRleCBm
ODM4MGVkNTc1ZDMxM2M2ZWEwNmFiNWQ3MmMyNWE4Njc3NmQ5Y2M4Li43MmQwYzhiNDBmMTAyYmEy
Y2NiODdlZTM1NGRlZGIzYjQxMzI1Mzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9TZWN0aW9uLnJiCkBAIC04NCwxMyArODQsMTYgQEAgY2xhc3MgU2VjdGlvbgogCiAgICAg
ICBpZiBjb25maWdbOmVtaXRfaW5fc3RydWN0c19maWxlXQogICAgICAgICAgIGkgPSAwCisgICAg
ICAgICAgb3V0LndyaXRlKCJzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkICN7Y29uZmlnWzptYWNy
b19uYW1lX2NvbXBvbmVudF0uZG93bmNhc2V9Q2hlY2twb2ludENvdW50VGFibGVbXSA9IHtcbiIp
CiAgICAgICAgICAgd2hpbGUgdHJ1ZQogICAgICAgICAgICAgICBpZiAhb3Bjb2Rlc1tpXS5jaGVj
a3BvaW50cwotICAgICAgICAgICAgICAgICAgb3V0IDw8ICJcbiIKKyAgICAgICAgICAgICAgICAg
IG91dCA8PCAiICAgIDAsIC8vIHRoaXMgdW51c2VkIGVudHJ5IGlzIG5lZWRlZCBzaW5jZSBNU1ZD
IHdvbid0IGNvbXBpbGUgZW1wdHkgYXJyYXlzXG4iCisgICAgICAgICAgICAgICAgICBvdXQgPDwg
In07XG5cbiIKICAgICAgICAgICAgICAgICAgIG91dCA8PCAiI2RlZmluZSBOVU1CRVJfT0ZfI3tj
b25maWdbOm1hY3JvX25hbWVfY29tcG9uZW50XX1fV0lUSF9DSEVDS1BPSU5UUyAje2l9XG4iCiAg
ICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICBlbmQKIAorICAgICAgICAgICAg
ICBvdXQud3JpdGUoIiAgICAje29wY29kZXNbaV0uY2hlY2twb2ludHMubGVuZ3RofSxcbiIpCiAg
ICAgICAgICAgICAgIGkgKz0gMQogICAgICAgICAgIGVuZAogICAgICAgICAgIG91dCA8PCAiXG4i
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDZkZmY0MjRlYmQ2MjhiMzdlOGI2ZGM4MGVjOTIzNTI3NDdjMmFkYTIuLjVhOTE1MzFmYTFiZDI1
ZDQ0MGNmMjJkNWFjMTU5ZmJmMTc5NDBlODAgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDctMDcgIEtl
aXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgQnl0ZWNvZGUg
VXNlRGVmIHNob3VsZCBiZSBhd2FyZSBvZiBjaGVja3BvaW50cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNTY2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgKiBzdHJlc3MvZGVmLXRoZW4tdXNlLWluLXNpbmds
ZS1ieXRlY29kZS13aXRoLWNoZWNrcG9pbnRzLWZvci1vZi5qczogQWRkZWQuCisgICAgICAgIChm
b28pOgorCiAyMDIwLTA3LTA0ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNv
bT4KIAogICAgICAgICAlVHlwZWRBcnJheSUucHJvdG90eXBlLntpbmRleE9mLGxhc3RJbmRleE9m
fSBhcmUgbm90IHNwZWMtcGVyZmVjdApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZGVmLXRo
ZW4tdXNlLWluLXNpbmdsZS1ieXRlY29kZS13aXRoLWNoZWNrcG9pbnRzLWZvci1vZi5qcyBiL0pT
VGVzdHMvc3RyZXNzL2RlZi10aGVuLXVzZS1pbi1zaW5nbGUtYnl0ZWNvZGUtd2l0aC1jaGVja3Bv
aW50cy1mb3Itb2YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDAxODM1MWQ5YmY3M2Q3NDdmNzY4MTNkMTYzZDYw
NzQzZDgxZDYwNgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2RlZi10aGVuLXVz
ZS1pbi1zaW5nbGUtYnl0ZWNvZGUtd2l0aC1jaGVja3BvaW50cy1mb3Itb2YuanMKQEAgLTAsMCAr
MSwxNCBAQAorLy9AIHJlcXVpcmVPcHRpb25zKCItLWppdFBvbGljeVNjYWxlPTAiLCAiLS12YWxp
ZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcz0xIikKKworZnVuY3Rpb24gZm9vKCkgeworICBmb3IgKGxl
dCBpPTA7IGk8MTAwOyBpKyspIHsKKyAgICBsZXQgdTggPSBuZXcgVWludDhBcnJheSg0KTsKKyAg
ICBmb3IgKGxldCBxIG9mIHU4KSB7fQorICAgIGxldCB1MzIgPSBuZXcgVWludDMyQXJyYXkoMik7
CisgICAgZm9yIChsZXQgcSBvZiB1MzIpIHt9CisgIH0KK30KKworZm9yIChsZXQgaT0wOyBpPDEw
MDsgaSsrKSB7CisgIGZvbygpOworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>