<?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>194810</bug_id>
          
          <creation_ts>2019-02-19 00:48:31 -0800</creation_ts>
          <short_desc>Lazily decode cached bytecode</short_desc>
          <delta_ts>2019-03-07 12:00:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tadeu Zagallo">tzagallo</reporter>
          <assigned_to name="Tadeu Zagallo">tzagallo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1507619</commentid>
    <comment_count>0</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-02-19 00:48:31 -0800</bug_when>
    <thetext>Like lazy parsing, we should pause at code block boundaries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507659</commentid>
    <comment_count>1</comment_count>
      <attachid>362383</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-02-19 06:56:13 -0800</bug_when>
    <thetext>Created attachment 362383
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508060</commentid>
    <comment_count>2</comment_count>
      <attachid>362495</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-02-20 06:16:36 -0800</bug_when>
    <thetext>Created attachment 362495
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511081</commentid>
    <comment_count>3</comment_count>
      <attachid>362495</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-28 12:58:35 -0800</bug_when>
    <thetext>Comment on attachment 362495
Patch

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

The main implementation idea seems good to me, but I think I&apos;ve found some concurrency issues we should resolve.

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        of decoding UnlinkedFunctionExecutable&apos;s CodeBlocks, we store their

Instead of decoding =&gt; Instead of always eagerly decoding
CodeBlocks =&gt; UnlinkedCodeBlocks

&gt; Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp:281
&gt; +
&gt; +    m_isCached = false;

To my first estimation, this is slightly wrong given concurrency issues in visitChildren. I think this should be:


WTF::storeStoreFence();
m_isCached = false;
writeBarrier(this);

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:1821
&gt;      executable-&gt;finishCreation(decoder.vm());
&gt;  
&gt; -    m_unlinkedCodeBlockForCall.decode(decoder, executable-&gt;m_unlinkedCodeBlockForCall, executable);
&gt; -    m_unlinkedCodeBlockForConstruct.decode(decoder, executable-&gt;m_unlinkedCodeBlockForConstruct, executable);
&gt; +    if (!m_unlinkedCodeBlockForCall.isEmpty() || !m_unlinkedCodeBlockForConstruct.isEmpty()) {
&gt; +        executable-&gt;m_isCached = true;
&gt; +        executable-&gt;m_decoder = &amp;decoder;
&gt; +        if (!m_unlinkedCodeBlockForCall.isEmpty())
&gt; +            executable-&gt;m_cachedCodeBlockForCallOffset = decoder.offsetOf(&amp;m_unlinkedCodeBlockForCall);
&gt; +        if (!m_unlinkedCodeBlockForConstruct.isEmpty())
&gt; +            executable-&gt;m_cachedCodeBlockForConstructOffset = decoder.offsetOf(&amp;m_unlinkedCodeBlockForConstruct);
&gt; +    }

This also seems slightly wrong w.r.t concurrency issues. We usually treat finishCreation as a place that could allocate and invoke GC. Let&apos;s say that is true in this case (though it doesn&apos;t appear to be), this code is wrong since visitChildren may see m_isCached=false, but then this code may overwrite things that it&apos;s visiting. I think we can make this more robust by computing what we need and passing this information in inside the constructor above.

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:2040
&gt; +    RefPtr&lt;Decoder&gt; decoder = adoptRef(new Decoder(vm, buffer, size));

Should be Ref. 
Also, WebKit style is to make this a create(...) function on Decoder itself.

&gt; Source/JavaScriptCore/runtime/CachedTypes.h:37
&gt; +class Decoder : public RefCounted&lt;Decoder&gt; {

Can we move various implementation functions in this class into the cpp file since they&apos;re mostly (all?) used from there anyways?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511311</commentid>
    <comment_count>4</comment_count>
      <attachid>362495</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-02-28 23:26:49 -0800</bug_when>
    <thetext>Comment on attachment 362495
Patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp:281
&gt;&gt; +    m_isCached = false;
&gt; 
&gt; To my first estimation, this is slightly wrong given concurrency issues in visitChildren. I think this should be:
&gt; 
&gt; 
&gt; WTF::storeStoreFence();
&gt; m_isCached = false;
&gt; writeBarrier(this);

Since there&apos;s a defer GC above, I was counting that visitChildren would not be called here. Is that a wrong assumption?

&gt;&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:1821
&gt;&gt; +    }
&gt; 
&gt; This also seems slightly wrong w.r.t concurrency issues. We usually treat finishCreation as a place that could allocate and invoke GC. Let&apos;s say that is true in this case (though it doesn&apos;t appear to be), this code is wrong since visitChildren may see m_isCached=false, but then this code may overwrite things that it&apos;s visiting. I think we can make this more robust by computing what we need and passing this information in inside the constructor above.

We defer GC during all of decoding, so I think this should be fine?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512226</commentid>
    <comment_count>5</comment_count>
      <attachid>363525</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-03-04 10:30:10 -0800</bug_when>
    <thetext>Created attachment 363525
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512256</commentid>
    <comment_count>6</comment_count>
      <attachid>362495</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-04 11:47:05 -0800</bug_when>
    <thetext>Comment on attachment 362495
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp:281
&gt;&gt;&gt; +    m_isCached = false;
&gt;&gt; 
&gt;&gt; To my first estimation, this is slightly wrong given concurrency issues in visitChildren. I think this should be:
&gt;&gt; 
&gt;&gt; 
&gt;&gt; WTF::storeStoreFence();
&gt;&gt; m_isCached = false;
&gt;&gt; writeBarrier(this);
&gt; 
&gt; Since there&apos;s a defer GC above, I was counting that visitChildren would not be called here. Is that a wrong assumption?

Yes. DeferGC ensures you won&apos;t safe point into the GC. It doesn&apos;t mean we&apos;re not already concurrently marking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512257</commentid>
    <comment_count>7</comment_count>
      <attachid>363525</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-04 11:48:04 -0800</bug_when>
    <thetext>Comment on attachment 363525
Patch

r- for the same reason as before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512386</commentid>
    <comment_count>8</comment_count>
      <attachid>363558</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-03-04 15:38:52 -0800</bug_when>
    <thetext>Created attachment 363558
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513565</commentid>
    <comment_count>9</comment_count>
      <attachid>363558</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-07 10:05:55 -0800</bug_when>
    <thetext>Comment on attachment 363558
Patch

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

&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:2016
&gt; +        if (!cachedExecutable.unlinkedCodeBlockForCall().isEmpty())

Don’t you want to zero out these offsets if this check is falsey?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513595</commentid>
    <comment_count>10</comment_count>
      <attachid>363558</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-03-07 10:58:30 -0800</bug_when>
    <thetext>Comment on attachment 363558
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/CachedTypes.cpp:2016
&gt;&gt; +        if (!cachedExecutable.unlinkedCodeBlockForCall().isEmpty())
&gt; 
&gt; Don’t you want to zero out these offsets if this check is falsey?

I already initialize m_unlinkedCodeBlockForCall and m_unlinkedCodeBlockForConstruct above, so they should already be zeroed, but I guess I should not rely on that since it&apos;s setting a different member of the union, which I guess is UB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513604</commentid>
    <comment_count>11</comment_count>
      <attachid>363901</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-03-07 11:05:16 -0800</bug_when>
    <thetext>Created attachment 363901
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513634</commentid>
    <comment_count>12</comment_count>
      <attachid>363901</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-07 11:43:49 -0800</bug_when>
    <thetext>Comment on attachment 363901
Patch for landing

Clearing flags on attachment: 363901

Committed r242605: &lt;https://trac.webkit.org/changeset/242605&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513635</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-07 11:43:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513639</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-07 12:00:59 -0800</bug_when>
    <thetext>&lt;rdar://problem/48684573&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362383</attachid>
            <date>2019-02-19 06:56:13 -0800</date>
            <delta_ts>2019-02-20 06:16:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194810-20190219155535.patch</filename>
            <type>text/plain</type>
            <size>15961</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxNzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
YzJmMDI1MDhmMDQyNjQ5NWVlNDU5MTMzMjg4M2NiNGM2YmEwMmQzLi40YzEwODJhMGRmMzczYThm
NmU0YWZmZDExZmE4Y2EyMjU5MjNjNmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxOS0wMi0xOSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBMYXppbHkgZGVjb2RlIGNhY2hlZCBieXRlY29kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGlrZSBsYXp5IHBhcnNpbmcsIHdl
IHNob3VsZCBwYXVzZSBhdCBjb2RlIGJsb2NrIGJvdW5kYXJpZXMuIEluc3RlYWQKKyAgICAgICAg
b2YgZGVjb2RpbmcgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUncyBDb2RlQmxvY2tzLCB3ZSBz
dG9yZSB0aGVpcgorICAgICAgICBvZmZzZXRzIGluIHRoZSBleGVjdXRhYmxlIGFuZCBsYXppbHkg
ZGVjb2RlIHRoZW0gb24gdGhlIG5leHQgY2FsbCB0bworICAgICAgICBgdW5saW5rZWRDb2RlQmxv
Y2tGb3JgLgorCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUu
Y3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dW5saW5rZWRDb2RlQmxvY2tGb3IpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVjb2RlQ2FjaGVkQ29kZUJsb2Nrcyk6
CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAg
ICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRyOjpp
c0VtcHR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkV3JpdGVCYXJyaWVyOjppc0VtcHR5
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpkZWNvZGVDb2RlQmxvY2tJbXBs
KToKKyAgICAgICAgKEpTQzo6ZGVjb2RlRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlND
OjpEZWNvZGVyOjpEZWNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6fkRl
Y29kZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpEZWNvZGVyOjp2bSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRlY29kZXI6Om9mZnNldE9mKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
RGVjb2Rlcjo6Y2FjaGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpEZWNvZGVyOjph
ZGRGaW5hbGl6ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuaDoK
KyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAgICAgIChKU0M6OkRlY29kZXI6
On5EZWNvZGVyKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6dm0pOgorICAgICAgICAoSlNDOjpE
ZWNvZGVyOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkRlY29kZXI6OmNhY2hlT2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6cHRyRm9yT2Zmc2V0RnJvbUJhc2UpOgorICAgICAgICAo
SlNDOjpEZWNvZGVyOjphZGRGaW5hbGl6ZXIpOgorCiAyMDE5LTAyLTE5ICBUYWRldSBaYWdhbGxv
ICA8dHphZ2FsbG9AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgYnl0ZWNvZGUgY2FjaGUtcmVs
YXRlZCBmaWxlc3lzdGVtIGNvZGUgb3V0IG9mIENvZGVDYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5jcHAKaW5kZXggYTE0MmMyNDA1NWU5YjNiZTQxMmUzNjE0MjhkYzFmY2NjMTYzOTFkOC4uMjQy
MGU3ODRmYjg1MTI0YmQxODUxYjgyODcyOTFlYjQ2NDA5MmJkNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJCdWlsdGluRXhlY3V0YWJs
ZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkNhY2hlZFR5
cGVzLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAj
aW5jbHVkZSAiRGVidWdnZXIuaCIKQEAgLTEwMyw2ICsxMDQsOSBAQCBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdAogICAgICwgbV9zY3JpcHRNb2RlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzY3JpcHRN
b2RlKSkKICAgICAsIG1fc3VwZXJCaW5kaW5nKHN0YXRpY19jYXN0PHVuc2lnbmVkPihub2RlLT5z
dXBlckJpbmRpbmcoKSkpCiAgICAgLCBtX2Rlcml2ZWRDb250ZXh0VHlwZShzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oZGVyaXZlZENvbnRleHRUeXBlKSkKKyAgICAsIG1faXNDYWNoZWQoZmFsc2UpCisg
ICAgLCBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCgpCisgICAgLCBtX3VubGlua2VkQ29kZUJs
b2NrRm9yQ29uc3RydWN0KCkKICAgICAsIG1fbmFtZShub2RlLT5pZGVudCgpKQogICAgICwgbV9l
Y21hTmFtZShub2RlLT5lY21hTmFtZSgpKQogICAgICwgbV9pbmZlcnJlZE5hbWUobm9kZS0+aW5m
ZXJyZWROYW1lKCkpCkBAIC0xMjAsNiArMTI0LDEyIEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
CiAgICAgICAgIHNldENsYXNzU291cmNlKG5vZGUtPmNsYXNzU291cmNlKCkpOwogfQogCitVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKCkKK3sK
KyAgICBpZiAobV9pc0NhY2hlZCkKKyAgICAgICAgbV9kZWNvZGVyLn5SZWZQdHIoKTsKK30KKwog
dm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7
CiAgICAgc3RhdGljX2Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKS0+flVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7CkBAIC0xMzAsOCArMTQwLDEwIEBAIHZvaWQgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvCiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCk7Ci0gICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgaWYgKCF0
aGlzT2JqZWN0LT5tX2lzQ2FjaGVkKSB7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgfQogfQog
CiBTb3VyY2VDb2RlIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5rZWRTb3VyY2VDb2Rl
KGNvbnN0IFNvdXJjZUNvZGUmIHBhc3NlZFBhcmVudFNvdXJjZSkgY29uc3QKQEAgLTIxMyw2ICsy
MjUsOCBAQCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6dW5saW5rZWRDb2RlQmxvY2tGb3IoCiAgICAgVk0mIHZtLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kLCAKICAg
ICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IsIFNvdXJjZVBh
cnNlTW9kZSBwYXJzZU1vZGUpCiB7CisgICAgaWYgKG1faXNDYWNoZWQpCisgICAgICAgIGRlY29k
ZUNhY2hlZENvZGVCbG9ja3MoKTsKICAgICBzd2l0Y2ggKHNwZWNpYWxpemF0aW9uS2luZCkgewog
ICAgIGNhc2UgQ29kZUZvckNhbGw6CiAgICAgICAgIGlmIChVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbC5nZXQoKSkKQEAgLTI0
NCw2ICsyNTgsMjkgQEAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OnVubGlua2VkQ29kZUJsb2NrRm9yKAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKK3ZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlY29kZUNhY2hlZENvZGVCbG9j
a3MoKQoreworICAgIEFTU0VSVChtX2lzQ2FjaGVkKTsKKyAgICBBU1NFUlQobV9kZWNvZGVyKTsK
KyAgICBBU1NFUlQobV9jYWNoZWRDb2RlQmxvY2tGb3JDYWxsT2Zmc2V0IHx8IG1fY2FjaGVkQ29k
ZUJsb2NrRm9yQ29uc3RydWN0T2Zmc2V0KTsKKworICAgIFJlZlB0cjxEZWNvZGVyPiBkZWNvZGVy
ID0gV1RGTW92ZShtX2RlY29kZXIpOworICAgIGludDMyX3QgY2FjaGVkQ29kZUJsb2NrRm9yQ2Fs
bE9mZnNldCA9IG1fY2FjaGVkQ29kZUJsb2NrRm9yQ2FsbE9mZnNldDsKKyAgICBpbnQzMl90IGNh
Y2hlZENvZGVCbG9ja0ZvckNvbnN0cnVjdE9mZnNldCA9IG1fY2FjaGVkQ29kZUJsb2NrRm9yQ29u
c3RydWN0T2Zmc2V0OworCisgICAgRGVmZXJHQyBkZWZlckdDKGRlY29kZXItPnZtKCkuaGVhcCk7
CisKKyAgICAvLyBObyBuZWVkIHRvIGNsZWFyIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsIGhl
cmUsIHNpbmNlIHdlIG1vdmVkIHRoZSBkZWNvZGVyIG91dCBvZiB0aGUgc2FtZSBzbG90CisgICAg
aWYgKGNhY2hlZENvZGVCbG9ja0ZvckNhbGxPZmZzZXQpCisgICAgICAgIGRlY29kZUZ1bmN0aW9u
Q29kZUJsb2NrKCpkZWNvZGVyLCBjYWNoZWRDb2RlQmxvY2tGb3JDYWxsT2Zmc2V0LCBtX3VubGlu
a2VkQ29kZUJsb2NrRm9yQ2FsbCwgdGhpcyk7CisgICAgaWYgKGNhY2hlZENvZGVCbG9ja0ZvckNv
bnN0cnVjdE9mZnNldCkKKyAgICAgICAgZGVjb2RlRnVuY3Rpb25Db2RlQmxvY2soKmRlY29kZXIs
IGNhY2hlZENvZGVCbG9ja0ZvckNvbnN0cnVjdE9mZnNldCwgbV91bmxpbmtlZENvZGVCbG9ja0Zv
ckNvbnN0cnVjdCwgdGhpcyk7CisgICAgZWxzZQorICAgICAgICBtX3VubGlua2VkQ29kZUJsb2Nr
Rm9yQ29uc3RydWN0LmNsZWFyKCk7CisKKyAgICBtX2lzQ2FjaGVkID0gZmFsc2U7Cit9CisKIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpSYXJlRGF0YSYgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OmVuc3VyZVJhcmVEYXRhU2xvdygpCiB7CiAgICAgQVNTRVJUKCFtX3JhcmVEYXRhKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXggZGVmZDJmMDhiODcxODFlNmI3ZjRmZjYwMTU2OTA3
ZmRiNmViMzk3Zi4uM2ZhMTllNDJkNTVlOTg0MGZiNDFmNTExNzcwNzg4ZDQ4YmQwYWFlZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTc1LDYgKzc1LDggQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCisgICAgflVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KCk7CisKICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
OyB9CiAgICAgY29uc3QgSWRlbnRpZmllciYgZWNtYU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2Vj
bWFOYW1lOyB9CiAgICAgdm9pZCBzZXRFY21hTmFtZShjb25zdCBJZGVudGlmaWVyJiBuYW1lKSB7
IG1fZWNtYU5hbWUgPSBuYW1lOyB9CkBAIC0xOTMsNiArMTk1LDggQEAgcHJpdmF0ZToKICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSosIFN0cnVjdHVyZSosIGNvbnN0IFNvdXJjZUNv
ZGUmLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIFVubGlua2VkRnVuY3Rpb25LaW5kLCBDb25zdHJ1
Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUsIENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxl
LCAgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGluRGVmYXVsdENsYXNzQ29u
c3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImLCBWYXJp
YWJsZUVudmlyb25tZW50JiwgY29uc3QgQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlJik7CiAKKyAg
ICB2b2lkIGRlY29kZUNhY2hlZENvZGVCbG9ja3MoKTsKKwogICAgIHVuc2lnbmVkIG1fZmlyc3RM
aW5lT2Zmc2V0OwogICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OwogICAgIHVuc2lnbmVkIG1fdW5s
aW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKQEAgLTIxNiw5ICsyMjAsMjAgQEAgcHJpdmF0ZToKICAg
ICB1bnNpZ25lZCBtX3NjcmlwdE1vZGU6IDE7IC8vIEpTUGFyc2VyU2NyaXB0TW9kZQogICAgIHVu
c2lnbmVkIG1fc3VwZXJCaW5kaW5nIDogMTsKICAgICB1bnNpZ25lZCBtX2Rlcml2ZWRDb250ZXh0
VHlwZTogMjsKLQotICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBt
X3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbDsKLSAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jaz4gbV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdDsKKyAgICBib29s
IG1faXNDYWNoZWQgOiAxOworCisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fdW5saW5rZWRD
b2RlQmxvY2tGb3JDYWxsOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisgICAgICAgIH07
CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFJlZlB0cjxEZWNvZGVyPiBtX2RlY29k
ZXI7CisgICAgICAgICAgICBpbnQzMl90IG1fY2FjaGVkQ29kZUJsb2NrRm9yQ2FsbE9mZnNldDsK
KyAgICAgICAgICAgIGludDMyX3QgbV9jYWNoZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3RPZmZzZXQ7
CisgICAgICAgIH07CisgICAgfTsKIAogICAgIElkZW50aWZpZXIgbV9uYW1lOwogICAgIElkZW50
aWZpZXIgbV9lY21hTmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
ZFR5cGVzLmNwcAppbmRleCBhY2Q5NWRmYTk2NTBlZDAxMzQ2MjE1ZGE0Mzc5OTI4NWNmNDY2MmY4
Li45NDc0MmJhNjRjMDA5NDM4MzM5YTM0OWJlN2NjMWVlMDhkMzgxYmQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0yMTAsNjUgKzIxMCw2
IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgcHRyZGlmZl90PiBtX3B0clRv
T2Zmc2V0TWFwOwogfTsKIAotY2xhc3MgRGVjb2RlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRGVjb2Rlcik7Ci0gICAgV1RGX0ZPUkJJRF9IRUFQX0FMTE9DQVRJT047Ci0KLXB1YmxpYzoK
LSAgICBEZWNvZGVyKFZNJiB2bSwgY29uc3Qgdm9pZCogYmFzZUFkZHJlc3MsIHNpemVfdCBzaXpl
KQotICAgICAgICA6IG1fdm0odm0pCi0gICAgICAgICwgbV9iYXNlQWRkcmVzcyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihiYXNlQWRkcmVzcykpCi0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICAsIG1fc2l6ZShzaXplKQotI2VuZGlmCi0gICAgewotICAgICAgICBVTlVTRURfUEFSQU0o
c2l6ZSk7Ci0gICAgfQotCi0gICAgfkRlY29kZXIoKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRv
JiBwYWlyIDogbV9maW5hbGl6ZXJzKQotICAgICAgICAgICAgcGFpci52YWx1ZSgpOwotICAgIH0K
LQotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KLQotICAgIHB0cmRpZmZfdCBvZmZzZXRP
Zihjb25zdCB2b2lkKiBwdHIpCi0gICAgewotICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHB0cik7Ci0gICAgICAgIEFTU0VSVChhZGRyID49
IG1fYmFzZUFkZHJlc3MgJiYgYWRkciA8IG1fYmFzZUFkZHJlc3MgKyBtX3NpemUpOwotICAgICAg
ICByZXR1cm4gYWRkciAtIG1fYmFzZUFkZHJlc3M7Ci0gICAgfQotCi0gICAgdm9pZCBjYWNoZU9m
ZnNldChwdHJkaWZmX3Qgb2Zmc2V0LCB2b2lkKiBwdHIpCi0gICAgewotICAgICAgICBtX29mZnNl
dFRvUHRyTWFwLmFkZChvZmZzZXQsIHB0cik7Ci0gICAgfQotCi0gICAgV1RGOjpPcHRpb25hbDx2
b2lkKj4gcHRyRm9yT2Zmc2V0KHB0cmRpZmZfdCBvZmZzZXQpCi0gICAgewotICAgICAgICBhdXRv
IGl0ID0gbV9vZmZzZXRUb1B0ck1hcC5maW5kKG9mZnNldCk7Ci0gICAgICAgIGlmIChpdCA9PSBt
X29mZnNldFRvUHRyTWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICAgICAgcmV0dXJuIHsgaXQtPnZhbHVlIH07Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGFkZEZpbmFsaXplcihwdHJkaWZmX3Qgb2Zmc2V0LCBj
b25zdCBGdW5jdG9yJiBmbikKLSAgICB7Ci0gICAgICAgIG1fZmluYWxpemVycy5hZGQob2Zmc2V0
LCBmbik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFZNJiBtX3ZtOwotICAgIGNvbnN0IHVpbnQ4
X3QqIG1fYmFzZUFkZHJlc3M7Ci0jaWZuZGVmIE5ERUJVRwotICAgIHNpemVfdCBtX3NpemU7Ci0j
ZW5kaWYKLSAgICBIYXNoTWFwPHB0cmRpZmZfdCwgdm9pZCo+IG1fb2Zmc2V0VG9QdHJNYXA7Ci0g
ICAgSGFzaE1hcDxwdHJkaWZmX3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9maW5hbGl6ZXJz
OwotfTsKLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHN0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWU+IGVuY29kZShFbmNvZGVyJiwgVCYg
ZHN0LCBjb25zdCBTb3VyY2VUeXBlPFQ+JiBzcmMpCiB7CkBAIC0zNzEsNiArMzEyLDggQEAgY2xh
c3MgQ2FjaGVkUHRyIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFNvdXJjZSo+IHsKICAg
ICBmcmllbmQgc3RydWN0IENhY2hlZFJlZlB0cjsKIAogcHVibGljOgorICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1faXNFbXB0eTsgfQorCiAgICAgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgU291cmNlKiBzcmMpCiAgICAgewogICAgICAgICBtX2lzRW1wdHkg
PSAhc3JjOwpAQCAtNDUxLDYgKzM5NCw4IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBTb3VyY2UgPSBTb3VyY2VUeXBlPFQ+PgogY2xhc3MgQ2FjaGVkV3JpdGVCYXJy
aWVyIDogcHVibGljIENhY2hlZE9iamVjdDxXcml0ZUJhcnJpZXI8U291cmNlPj4gewogcHVibGlj
OgorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyLmlzRW1wdHkoKTsgfQor
CiAgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV3JpdGVCYXJyaWVyPFNv
dXJjZT4gc3JjKQogICAgIHsKICAgICAgICAgbV9wdHIuZW5jb2RlKGVuY29kZXIsIHNyYy5nZXQo
KSk7CkBAIC0xODY2LDggKzE4MTEsMTQgQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogQ2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUoRGVjb2QKICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihkZWNvZGVyLnZtKCkuaGVhcCkp
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKGRlY29kZXIsIGVudiwgKnRoaXMpOwogICAgIGV4
ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7CiAKLSAgICBtX3VubGlua2Vk
Q29kZUJsb2NrRm9yQ2FsbC5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZENv
ZGVCbG9ja0ZvckNhbGwsIGV4ZWN1dGFibGUpOwotICAgIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JD
b25zdHJ1Y3QuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRDb2RlQmxvY2tG
b3JDb25zdHJ1Y3QsIGV4ZWN1dGFibGUpOworICAgIGlmICghbV91bmxpbmtlZENvZGVCbG9ja0Zv
ckNhbGwuaXNFbXB0eSgpIHx8ICFtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LmlzRW1w
dHkoKSkgeworICAgICAgICBleGVjdXRhYmxlLT5tX2lzQ2FjaGVkID0gdHJ1ZTsKKyAgICAgICAg
ZXhlY3V0YWJsZS0+bV9kZWNvZGVyID0gJmRlY29kZXI7CisgICAgICAgIGlmICghbV91bmxpbmtl
ZENvZGVCbG9ja0ZvckNhbGwuaXNFbXB0eSgpKQorICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9j
YWNoZWRDb2RlQmxvY2tGb3JDYWxsT2Zmc2V0ID0gZGVjb2Rlci5vZmZzZXRPZigmbV91bmxpbmtl
ZENvZGVCbG9ja0ZvckNhbGwpOworICAgICAgICBpZiAoIW1fdW5saW5rZWRDb2RlQmxvY2tGb3JD
b25zdHJ1Y3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9jYWNoZWRDb2Rl
QmxvY2tGb3JDb25zdHJ1Y3RPZmZzZXQgPSBkZWNvZGVyLm9mZnNldE9mKCZtX3VubGlua2VkQ29k
ZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICB9CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0K
QEAgLTE4OTcsNiArMTg0OCw5IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImIGRlCiAgICAgLCBtX3Nj
cmlwdE1vZGUoY2FjaGVkRXhlY3V0YWJsZS5zY3JpcHRNb2RlKCkpCiAgICAgLCBtX3N1cGVyQmlu
ZGluZyhjYWNoZWRFeGVjdXRhYmxlLnN1cGVyQmluZGluZygpKQogICAgICwgbV9kZXJpdmVkQ29u
dGV4dFR5cGUoY2FjaGVkRXhlY3V0YWJsZS5kZXJpdmVkQ29udGV4dFR5cGUoKSkKKyAgICAsIG1f
aXNDYWNoZWQoZmFsc2UpCisgICAgLCBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCgpCisgICAg
LCBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkKIAogICAgICwgbV9uYW1lKGNhY2hl
ZEV4ZWN1dGFibGUubmFtZShkZWNvZGVyKSkKICAgICAsIG1fZWNtYU5hbWUoY2FjaGVkRXhlY3V0
YWJsZS5lY21hTmFtZShkZWNvZGVyKSkKQEAgLTIwODMsMTEgKzIwMzcsMTEgQEAgc3RkOjpwYWly
PE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0mIHZtLCBjb25z
dCBTb3VyY2VDb2RlS2UKIFVubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZN
JiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVf
dCBzaXplKQogewogICAgIGNvbnN0IGF1dG8qIGNhY2hlZEVudHJ5ID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBHZW5lcmljQ2FjaGVFbnRyeSo+KGJ1ZmZlcik7Ci0gICAgRGVjb2RlciBkZWNvZGVy
KHZtLCBidWZmZXIsIHNpemUpOworICAgIFJlZlB0cjxEZWNvZGVyPiBkZWNvZGVyID0gYWRvcHRS
ZWYobmV3IERlY29kZXIodm0sIGJ1ZmZlciwgc2l6ZSkpOwogICAgIHN0ZDo6cGFpcjxTb3VyY2VD
b2RlS2V5LCBVbmxpbmtlZENvZGVCbG9jayo+IGVudHJ5OwogICAgIHsKICAgICAgICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwotICAgICAgICBpZiAoIWNhY2hlZEVudHJ5LT5kZWNvZGUoZGVj
b2RlciwgZW50cnkpKQorICAgICAgICBpZiAoIWNhY2hlZEVudHJ5LT5kZWNvZGUoKmRlY29kZXIs
IGVudHJ5KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMjA5Niw0
ICsyMDUwLDExIEBAIFVubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJbXBsKFZNJiB2
bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2CiAgICAgcmV0dXJuIGVudHJ5LnNl
Y29uZDsKIH0KIAordm9pZCBkZWNvZGVGdW5jdGlvbkNvZGVCbG9jayhEZWNvZGVyJiBkZWNvZGVy
LCBpbnQzMl90IGNhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrT2Zmc2V0LCBXcml0ZUJhcnJpZXI8VW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywgY29uc3QgSlNDZWxsKiBvd25lcikK
K3sKKyAgICBBU1NFUlQoZGVjb2Rlci52bSgpLmhlYXAuaXNEZWZlcnJlZCgpKTsKKyAgICBhdXRv
KiBjYWNoZWRDb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxjb25zdCBDYWNoZWRXcml0ZUJhcnJpZXI8
Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+Kj4oZGVj
b2Rlci5wdHJGb3JPZmZzZXRGcm9tQmFzZShjYWNoZWRGdW5jdGlvbkNvZGVCbG9ja09mZnNldCkp
OworICAgIGNhY2hlZENvZGVCbG9jay0+ZGVjb2RlKGRlY29kZXIsIGNvZGVCbG9jaywgb3duZXIp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUeXBlcy5oCmluZGV4IGJjYjhhY2I2Y2U1NzBlOTcyNjM4OWMyNmQ3MGJjYmEyMWRh
OGQ0YWQuLjMzYmZhZmQ1MzkxMDAyOTI2OWVjYmFhYjdlNGQ0MjE4MmIxMmY3OTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaApAQCAtMzIsMTAgKzMyLDgy
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBTb3VyY2VDb2RlS2V5OwogY2xhc3MgVW5saW5r
ZWRDb2RlQmxvY2s7CitjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTb3VyY2U+CitjbGFzcyBDYWNoZWRXcml0ZUJhcnJpZXI7
CisKK2NsYXNzIERlY29kZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEZWNvZGVyPiB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRGVjb2Rlcik7CisKK3B1YmxpYzoKKyAgICBEZWNvZGVyKFZNJiB2
bSwgY29uc3Qgdm9pZCogYmFzZUFkZHJlc3MsIHNpemVfdCBzaXplKQorICAgICAgICA6IG1fdm0o
dm0pCisgICAgICAgICwgbV9iYXNlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihiYXNlQWRkcmVzcykpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAsIG1fc2l6ZShzaXpl
KQorI2VuZGlmCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAgfQorCisg
ICAgfkRlY29kZXIoKQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9maW5hbGl6
ZXJzKQorICAgICAgICAgICAgcGFpci52YWx1ZSgpOworICAgIH0KKworICAgIFZNJiB2bSgpIHsg
cmV0dXJuIG1fdm07IH0KKworICAgIHB0cmRpZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBwdHIp
CisgICAgeworICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHB0cik7CisgICAgICAgIEFTU0VSVChhZGRyID49IG1fYmFzZUFkZHJlc3MgJiYg
YWRkciA8IG1fYmFzZUFkZHJlc3MgKyBtX3NpemUpOworICAgICAgICByZXR1cm4gYWRkciAtIG1f
YmFzZUFkZHJlc3M7CisgICAgfQorCisgICAgdm9pZCBjYWNoZU9mZnNldChwdHJkaWZmX3Qgb2Zm
c2V0LCB2b2lkKiBwdHIpCisgICAgeworICAgICAgICBtX29mZnNldFRvUHRyTWFwLmFkZChvZmZz
ZXQsIHB0cik7CisgICAgfQorCisgICAgV1RGOjpPcHRpb25hbDx2b2lkKj4gcHRyRm9yT2Zmc2V0
KHB0cmRpZmZfdCBvZmZzZXQpCisgICAgeworICAgICAgICBhdXRvIGl0ID0gbV9vZmZzZXRUb1B0
ck1hcC5maW5kKG9mZnNldCk7CisgICAgICAgIGlmIChpdCA9PSBtX29mZnNldFRvUHRyTWFwLmVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsg
aXQtPnZhbHVlIH07CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogcHRyRm9yT2Zmc2V0RnJvbUJh
c2UocHRyZGlmZl90IG9mZnNldCkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBBU1NF
UlQob2Zmc2V0ID4gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9mZnNldCkgPCBtX3NpemUpOwor
I2VuZGlmCisgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzICsgb2Zmc2V0OworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBhZGRGaW5hbGl6ZXIocHRy
ZGlmZl90IG9mZnNldCwgY29uc3QgRnVuY3RvciYgZm4pCisgICAgeworICAgICAgICBtX2ZpbmFs
aXplcnMuYWRkKG9mZnNldCwgZm4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWTSYgbV92bTsK
KyAgICBjb25zdCB1aW50OF90KiBtX2Jhc2VBZGRyZXNzOworI2lmbmRlZiBOREVCVUcKKyAgICBz
aXplX3QgbV9zaXplOworI2VuZGlmCisgICAgSGFzaE1hcDxwdHJkaWZmX3QsIHZvaWQqPiBtX29m
ZnNldFRvUHRyTWFwOworICAgIEhhc2hNYXA8cHRyZGlmZl90LCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4+IG1fZmluYWxpemVyczsKK307CiAKIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNp
emVfdD4gZW5jb2RlQ29kZUJsb2NrKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0IFVu
bGlua2VkQ29kZUJsb2NrKik7CisKIFVubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJ
bXBsKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0IHZvaWQqLCBzaXplX3QpOwogCit2
b2lkIGRlY29kZUZ1bmN0aW9uQ29kZUJsb2NrKERlY29kZXImLCBpbnQzMl90IGNhY2hlZEZ1bmN0
aW9uQ29kZUJsb2NrT2Zmc2V0LCBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
az4mLCBjb25zdCBKU0NlbGwqKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVW5saW5rZWRDb2RlQmxv
Y2tUeXBlPgogVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBkZWNvZGVDb2RlQmxvY2soVk0mIHZtLCBj
b25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362495</attachid>
            <date>2019-02-20 06:16:36 -0800</date>
            <delta_ts>2019-03-04 10:30:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194810-20190220151557.patch</filename>
            <type>text/plain</type>
            <size>15606</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxNzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
YzJmMDI1MDhmMDQyNjQ5NWVlNDU5MTMzMjg4M2NiNGM2YmEwMmQzLi5jMjBiZDBkYWE1MDIxOWMy
ODZjMjQ0ZWFjZGIyMTRkNjQ1YjE2ZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxOS0wMi0yMCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBMYXppbHkgZGVjb2RlIGNhY2hlZCBieXRlY29kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGlrZSBsYXp5IHBhcnNpbmcsIHdl
IHNob3VsZCBwYXVzZSBhdCBjb2RlIGJsb2NrIGJvdW5kYXJpZXMuIEluc3RlYWQKKyAgICAgICAg
b2YgZGVjb2RpbmcgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUncyBDb2RlQmxvY2tzLCB3ZSBz
dG9yZSB0aGVpcgorICAgICAgICBvZmZzZXRzIGluIHRoZSBleGVjdXRhYmxlIGFuZCBsYXppbHkg
ZGVjb2RlIHRoZW0gb24gdGhlIG5leHQgY2FsbCB0bworICAgICAgICBgdW5saW5rZWRDb2RlQmxv
Y2tGb3JgLgorCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUu
Y3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dW5saW5rZWRDb2RlQmxvY2tGb3IpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVjb2RlQ2FjaGVkQ29kZUJsb2Nrcyk6
CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAg
ICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkUHRyOjpp
c0VtcHR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkV3JpdGVCYXJyaWVyOjppc0VtcHR5
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpkZWNvZGVDb2RlQmxvY2tJbXBs
KToKKyAgICAgICAgKEpTQzo6ZGVjb2RlRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAqIHJ1
bnRpbWUvQ2FjaGVkVHlwZXMuaDoKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6RGVjb2Rlcik6Cisg
ICAgICAgIChKU0M6OkRlY29kZXI6On5EZWNvZGVyKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6
dm0pOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkRl
Y29kZXI6OmNhY2hlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6cHRyRm9yT2Zmc2V0
RnJvbUJhc2UpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjphZGRGaW5hbGl6ZXIpOgorCiAyMDE5
LTAyLTE5ICBUYWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29tPgogCiAgICAgICAgIE1v
dmUgYnl0ZWNvZGUgY2FjaGUtcmVsYXRlZCBmaWxlc3lzdGVtIGNvZGUgb3V0IG9mIENvZGVDYWNo
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKaW5kZXggYTE0MmMyNDA1NWU5YjNiZTQxMmUzNjE0
MjhkYzFmY2NjMTYzOTFkOC4uMjQyMGU3ODRmYjg1MTI0YmQxODUxYjgyODcyOTFlYjQ2NDA5MmJk
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJCdWlsdGluRXhlY3V0YWJsZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5o
IgorI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5j
bHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKQEAgLTEwMyw2ICsxMDQs
OSBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUoVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdAogICAgICwgbV9zY3JpcHRNb2RlKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzY3JpcHRNb2RlKSkKICAgICAsIG1fc3VwZXJCaW5kaW5nKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihub2RlLT5zdXBlckJpbmRpbmcoKSkpCiAgICAgLCBtX2Rlcml2ZWRDb250
ZXh0VHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVyaXZlZENvbnRleHRUeXBlKSkKKyAgICAs
IG1faXNDYWNoZWQoZmFsc2UpCisgICAgLCBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCgpCisg
ICAgLCBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkKICAgICAsIG1fbmFtZShub2Rl
LT5pZGVudCgpKQogICAgICwgbV9lY21hTmFtZShub2RlLT5lY21hTmFtZSgpKQogICAgICwgbV9p
bmZlcnJlZE5hbWUobm9kZS0+aW5mZXJyZWROYW1lKCkpCkBAIC0xMjAsNiArMTI0LDEyIEBAIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0CiAgICAgICAgIHNldENsYXNzU291cmNlKG5vZGUtPmNsYXNz
U291cmNlKCkpOwogfQogCitVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6flVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKCkKK3sKKyAgICBpZiAobV9pc0NhY2hlZCkKKyAgICAgICAgbV9kZWNv
ZGVyLn5SZWZQdHIoKTsKK30KKwogdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqPihjZWxsKS0+flVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7CkBAIC0xMzAs
OCArMTQwLDEwIEBAIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvCiAgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCk7
Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNv
bnN0cnVjdCk7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5tX2lzQ2FjaGVkKSB7CisgICAgICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKTsKKyAg
ICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNv
bnN0cnVjdCk7CisgICAgfQogfQogCiBTb3VyY2VDb2RlIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlOjpsaW5rZWRTb3VyY2VDb2RlKGNvbnN0IFNvdXJjZUNvZGUmIHBhc3NlZFBhcmVudFNvdXJj
ZSkgY29uc3QKQEAgLTIxMyw2ICsyMjUsOCBAQCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dW5saW5rZWRDb2RlQmxvY2tGb3IoCiAgICAgVk0m
IHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3Bl
Y2lhbGl6YXRpb25LaW5kLCAKICAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQYXJzZXJF
cnJvciYgZXJyb3IsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCiB7CisgICAgaWYgKG1faXND
YWNoZWQpCisgICAgICAgIGRlY29kZUNhY2hlZENvZGVCbG9ja3MoKTsKICAgICBzd2l0Y2ggKHNw
ZWNpYWxpemF0aW9uS2luZCkgewogICAgIGNhc2UgQ29kZUZvckNhbGw6CiAgICAgICAgIGlmIChV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX3VubGlua2VkQ29kZUJsb2Nr
Rm9yQ2FsbC5nZXQoKSkKQEAgLTI0NCw2ICsyNTgsMjkgQEAgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2VkQ29kZUJsb2NrRm9yKAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OmRlY29kZUNhY2hlZENvZGVCbG9ja3MoKQoreworICAgIEFTU0VSVChtX2lzQ2FjaGVkKTsKKyAg
ICBBU1NFUlQobV9kZWNvZGVyKTsKKyAgICBBU1NFUlQobV9jYWNoZWRDb2RlQmxvY2tGb3JDYWxs
T2Zmc2V0IHx8IG1fY2FjaGVkQ29kZUJsb2NrRm9yQ29uc3RydWN0T2Zmc2V0KTsKKworICAgIFJl
ZlB0cjxEZWNvZGVyPiBkZWNvZGVyID0gV1RGTW92ZShtX2RlY29kZXIpOworICAgIGludDMyX3Qg
Y2FjaGVkQ29kZUJsb2NrRm9yQ2FsbE9mZnNldCA9IG1fY2FjaGVkQ29kZUJsb2NrRm9yQ2FsbE9m
ZnNldDsKKyAgICBpbnQzMl90IGNhY2hlZENvZGVCbG9ja0ZvckNvbnN0cnVjdE9mZnNldCA9IG1f
Y2FjaGVkQ29kZUJsb2NrRm9yQ29uc3RydWN0T2Zmc2V0OworCisgICAgRGVmZXJHQyBkZWZlckdD
KGRlY29kZXItPnZtKCkuaGVhcCk7CisKKyAgICAvLyBObyBuZWVkIHRvIGNsZWFyIG1fdW5saW5r
ZWRDb2RlQmxvY2tGb3JDYWxsIGhlcmUsIHNpbmNlIHdlIG1vdmVkIHRoZSBkZWNvZGVyIG91dCBv
ZiB0aGUgc2FtZSBzbG90CisgICAgaWYgKGNhY2hlZENvZGVCbG9ja0ZvckNhbGxPZmZzZXQpCisg
ICAgICAgIGRlY29kZUZ1bmN0aW9uQ29kZUJsb2NrKCpkZWNvZGVyLCBjYWNoZWRDb2RlQmxvY2tG
b3JDYWxsT2Zmc2V0LCBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCwgdGhpcyk7CisgICAgaWYg
KGNhY2hlZENvZGVCbG9ja0ZvckNvbnN0cnVjdE9mZnNldCkKKyAgICAgICAgZGVjb2RlRnVuY3Rp
b25Db2RlQmxvY2soKmRlY29kZXIsIGNhY2hlZENvZGVCbG9ja0ZvckNvbnN0cnVjdE9mZnNldCwg
bV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCwgdGhpcyk7CisgICAgZWxzZQorICAgICAg
ICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LmNsZWFyKCk7CisKKyAgICBtX2lzQ2Fj
aGVkID0gZmFsc2U7Cit9CisKIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpSYXJlRGF0YSYg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmVuc3VyZVJhcmVEYXRhU2xvdygpCiB7CiAgICAg
QVNTRVJUKCFtX3JhcmVEYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXggZGVmZDJmMDhi
ODcxODFlNmI3ZjRmZjYwMTU2OTA3ZmRiNmViMzk3Zi4uMWE3YTM3ZjJjYzkzYmI1ZjU5NWIwZDky
ZGZjMzU0ZjBhNmUyNGZmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTc1LDYgKzc1LDgg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCisgICAgflVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKCk7CisKICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgY29uc3QgSWRlbnRpZmllciYgZWNtYU5hbWUo
KSBjb25zdCB7IHJldHVybiBtX2VjbWFOYW1lOyB9CiAgICAgdm9pZCBzZXRFY21hTmFtZShjb25z
dCBJZGVudGlmaWVyJiBuYW1lKSB7IG1fZWNtYU5hbWUgPSBuYW1lOyB9CkBAIC0xOTMsNiArMTk1
LDggQEAgcHJpdmF0ZToKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSosIFN0cnVj
dHVyZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIFVubGlua2Vk
RnVuY3Rpb25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUsIENvbXBh
Y3RWYXJpYWJsZU1hcDo6SGFuZGxlLCAgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNC
dWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKERlY29kZXImLCBWYXJpYWJsZUVudmlyb25tZW50JiwgY29uc3QgQ2FjaGVkRnVuY3Rp
b25FeGVjdXRhYmxlJik7CiAKKyAgICB2b2lkIGRlY29kZUNhY2hlZENvZGVCbG9ja3MoKTsKKwog
ICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lT2Zmc2V0OwogICAgIHVuc2lnbmVkIG1fbGluZUNvdW50
OwogICAgIHVuc2lnbmVkIG1fdW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKQEAgLTIxNiw5ICsy
MjAsMjAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NjcmlwdE1vZGU6IDE7IC8vIEpTUGFy
c2VyU2NyaXB0TW9kZQogICAgIHVuc2lnbmVkIG1fc3VwZXJCaW5kaW5nIDogMTsKICAgICB1bnNp
Z25lZCBtX2Rlcml2ZWRDb250ZXh0VHlwZTogMjsKKyAgICBib29sIG1faXNDYWNoZWQgOiAxOwog
Ci0gICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fdW5saW5rZWRD
b2RlQmxvY2tGb3JDYWxsOwotICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrPiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0OworICAgIHVuaW9uIHsKKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fdW5saW5rZWRDb2Rl
QmxvY2tGb3JDYWxsOworICAgICAgICBSZWZQdHI8RGVjb2Rlcj4gbV9kZWNvZGVyOworICAgIH07
CisKKyAgICB1bmlvbiB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrPiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0OworICAgICAgICBzdHJ1Y3Qg
eworICAgICAgICAgICAgaW50MzJfdCBtX2NhY2hlZENvZGVCbG9ja0ZvckNhbGxPZmZzZXQ7Cisg
ICAgICAgICAgICBpbnQzMl90IG1fY2FjaGVkQ29kZUJsb2NrRm9yQ29uc3RydWN0T2Zmc2V0Owor
ICAgICAgICB9OworICAgIH07CiAKICAgICBJZGVudGlmaWVyIG1fbmFtZTsKICAgICBJZGVudGlm
aWVyIG1fZWNtYU5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5jcHAKaW5kZXggYWNkOTVkZmE5NjUwZWQwMTM0NjIxNWRhNDM3OTkyODVjZjQ2NjJmOC4u
OTQ3NDJiYTY0YzAwOTQzODMzOWEzNDliZTdjYzFlZTA4ZDM4MWJkNiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtMjEwLDY1ICsyMTAsNiBA
QCBwcml2YXRlOgogICAgIEhhc2hNYXA8Y29uc3Qgdm9pZCosIHB0cmRpZmZfdD4gbV9wdHJUb09m
ZnNldE1hcDsKIH07CiAKLWNsYXNzIERlY29kZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KERlY29kZXIpOwotICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9OOwotCi1wdWJsaWM6Ci0g
ICAgRGVjb2RlcihWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VBZGRyZXNzLCBzaXplX3Qgc2l6ZSkK
LSAgICAgICAgOiBtX3ZtKHZtKQotICAgICAgICAsIG1fYmFzZUFkZHJlc3MocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oYmFzZUFkZHJlc3MpKQotI2lmbmRlZiBOREVCVUcKLSAgICAg
ICAgLCBtX3NpemUoc2l6ZSkKLSNlbmRpZgotICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNp
emUpOwotICAgIH0KLQotICAgIH5EZWNvZGVyKCkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYg
cGFpciA6IG1fZmluYWxpemVycykKLSAgICAgICAgICAgIHBhaXIudmFsdWUoKTsKLSAgICB9Ci0K
LSAgICBWTSYgdm0oKSB7IHJldHVybiBtX3ZtOyB9Ci0KLSAgICBwdHJkaWZmX3Qgb2Zmc2V0T2Yo
Y29uc3Qgdm9pZCogcHRyKQotICAgIHsKLSAgICAgICAgY29uc3QgdWludDhfdCogYWRkciA9IHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihwdHIpOwotICAgICAgICBBU1NFUlQoYWRkciA+PSBt
X2Jhc2VBZGRyZXNzICYmIGFkZHIgPCBtX2Jhc2VBZGRyZXNzICsgbV9zaXplKTsKLSAgICAgICAg
cmV0dXJuIGFkZHIgLSBtX2Jhc2VBZGRyZXNzOwotICAgIH0KLQotICAgIHZvaWQgY2FjaGVPZmZz
ZXQocHRyZGlmZl90IG9mZnNldCwgdm9pZCogcHRyKQotICAgIHsKLSAgICAgICAgbV9vZmZzZXRU
b1B0ck1hcC5hZGQob2Zmc2V0LCBwdHIpOwotICAgIH0KLQotICAgIFdURjo6T3B0aW9uYWw8dm9p
ZCo+IHB0ckZvck9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgYXV0byBp
dCA9IG1fb2Zmc2V0VG9QdHJNYXAuZmluZChvZmZzZXQpOwotICAgICAgICBpZiAoaXQgPT0gbV9v
ZmZzZXRUb1B0ck1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgICAgIHJldHVybiB7IGl0LT52YWx1ZSB9OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBhZGRGaW5hbGl6ZXIocHRyZGlmZl90IG9mZnNldCwgY29u
c3QgRnVuY3RvciYgZm4pCi0gICAgewotICAgICAgICBtX2ZpbmFsaXplcnMuYWRkKG9mZnNldCwg
Zm4pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBWTSYgbV92bTsKLSAgICBjb25zdCB1aW50OF90
KiBtX2Jhc2VBZGRyZXNzOwotI2lmbmRlZiBOREVCVUcKLSAgICBzaXplX3QgbV9zaXplOwotI2Vu
ZGlmCi0gICAgSGFzaE1hcDxwdHJkaWZmX3QsIHZvaWQqPiBtX29mZnNldFRvUHRyTWFwOwotICAg
IEhhc2hNYXA8cHRyZGlmZl90LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fZmluYWxpemVyczsK
LX07Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX3NhbWU8VCwgU291cmNlVHlwZTxUPj46OnZhbHVlPiBlbmNvZGUoRW5jb2RlciYsIFQmIGRz
dCwgY29uc3QgU291cmNlVHlwZTxUPiYgc3JjKQogewpAQCAtMzcxLDYgKzMxMiw4IEBAIGNsYXNz
IENhY2hlZFB0ciA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxTb3VyY2UqPiB7CiAgICAg
ZnJpZW5kIHN0cnVjdCBDYWNoZWRSZWZQdHI7CiAKIHB1YmxpYzoKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBtX2lzRW1wdHk7IH0KKwogICAgIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFNvdXJjZSogc3JjKQogICAgIHsKICAgICAgICAgbV9pc0VtcHR5ID0g
IXNyYzsKQEAgLTQ1MSw2ICszOTQsOCBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgU291cmNlID0gU291cmNlVHlwZTxUPj4KIGNsYXNzIENhY2hlZFdyaXRlQmFycmll
ciA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8V3JpdGVCYXJyaWVyPFNvdXJjZT4+IHsKIHB1YmxpYzoK
KyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3B0ci5pc0VtcHR5KCk7IH0KKwog
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdyaXRlQmFycmllcjxTb3Vy
Y2U+IHNyYykKICAgICB7CiAgICAgICAgIG1fcHRyLmVuY29kZShlbmNvZGVyLCBzcmMuZ2V0KCkp
OwpAQCAtMTg2Niw4ICsxODExLDE0IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVjb2RlKERlY29kCiAgICAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZGVjb2Rlci52bSgpLmhlYXApKSBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShkZWNvZGVyLCBlbnYsICp0aGlzKTsKICAgICBleGVj
dXRhYmxlLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOwogCi0gICAgbV91bmxpbmtlZENv
ZGVCbG9ja0ZvckNhbGwuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRDb2Rl
QmxvY2tGb3JDYWxsLCBleGVjdXRhYmxlKTsKLSAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29u
c3RydWN0LmRlY29kZShkZWNvZGVyLCBleGVjdXRhYmxlLT5tX3VubGlua2VkQ29kZUJsb2NrRm9y
Q29uc3RydWN0LCBleGVjdXRhYmxlKTsKKyAgICBpZiAoIW1fdW5saW5rZWRDb2RlQmxvY2tGb3JD
YWxsLmlzRW1wdHkoKSB8fCAhbV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9pc0NhY2hlZCA9IHRydWU7CisgICAgICAgIGV4
ZWN1dGFibGUtPm1fZGVjb2RlciA9ICZkZWNvZGVyOworICAgICAgICBpZiAoIW1fdW5saW5rZWRD
b2RlQmxvY2tGb3JDYWxsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY2Fj
aGVkQ29kZUJsb2NrRm9yQ2FsbE9mZnNldCA9IGRlY29kZXIub2Zmc2V0T2YoJm1fdW5saW5rZWRD
b2RlQmxvY2tGb3JDYWxsKTsKKyAgICAgICAgaWYgKCFtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29u
c3RydWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY2FjaGVkQ29kZUJs
b2NrRm9yQ29uc3RydWN0T2Zmc2V0ID0gZGVjb2Rlci5vZmZzZXRPZigmbV91bmxpbmtlZENvZGVC
bG9ja0ZvckNvbnN0cnVjdCk7CisgICAgfQogCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CkBA
IC0xODk3LDYgKzE4NDgsOSBAQCBBTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiBkZQogICAgICwgbV9zY3Jp
cHRNb2RlKGNhY2hlZEV4ZWN1dGFibGUuc2NyaXB0TW9kZSgpKQogICAgICwgbV9zdXBlckJpbmRp
bmcoY2FjaGVkRXhlY3V0YWJsZS5zdXBlckJpbmRpbmcoKSkKICAgICAsIG1fZGVyaXZlZENvbnRl
eHRUeXBlKGNhY2hlZEV4ZWN1dGFibGUuZGVyaXZlZENvbnRleHRUeXBlKCkpCisgICAgLCBtX2lz
Q2FjaGVkKGZhbHNlKQorICAgICwgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwoKQorICAgICwg
bV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCgpCiAKICAgICAsIG1fbmFtZShjYWNoZWRF
eGVjdXRhYmxlLm5hbWUoZGVjb2RlcikpCiAgICAgLCBtX2VjbWFOYW1lKGNhY2hlZEV4ZWN1dGFi
bGUuZWNtYU5hbWUoZGVjb2RlcikpCkBAIC0yMDgzLDExICsyMDM3LDExIEBAIHN0ZDo6cGFpcjxN
YWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gZW5jb2RlQ29kZUJsb2NrKFZNJiB2bSwgY29uc3Qg
U291cmNlQ29kZUtlCiBVbmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYg
dm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qg
c2l6ZSkKIHsKICAgICBjb25zdCBhdXRvKiBjYWNoZWRFbnRyeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgR2VuZXJpY0NhY2hlRW50cnkqPihidWZmZXIpOwotICAgIERlY29kZXIgZGVjb2Rlcih2
bSwgYnVmZmVyLCBzaXplKTsKKyAgICBSZWZQdHI8RGVjb2Rlcj4gZGVjb2RlciA9IGFkb3B0UmVm
KG5ldyBEZWNvZGVyKHZtLCBidWZmZXIsIHNpemUpKTsKICAgICBzdGQ6OnBhaXI8U291cmNlQ29k
ZUtleSwgVW5saW5rZWRDb2RlQmxvY2sqPiBlbnRyeTsKICAgICB7CiAgICAgICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgaWYgKCFjYWNoZWRFbnRyeS0+ZGVjb2RlKGRlY29k
ZXIsIGVudHJ5KSkKKyAgICAgICAgaWYgKCFjYWNoZWRFbnRyeS0+ZGVjb2RlKCpkZWNvZGVyLCBl
bnRyeSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTIwOTYsNCAr
MjA1MCwxMSBAQCBVbmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYgdm0s
IGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgdgogICAgIHJldHVybiBlbnRyeS5zZWNv
bmQ7CiB9CiAKK3ZvaWQgZGVjb2RlRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYgZGVjb2Rlciwg
aW50MzJfdCBjYWNoZWRGdW5jdGlvbkNvZGVCbG9ja09mZnNldCwgV3JpdGVCYXJyaWVyPFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIGNvbnN0IEpTQ2VsbCogb3duZXIpCit7
CisgICAgQVNTRVJUKGRlY29kZXIudm0oKS5oZWFwLmlzRGVmZXJyZWQoKSk7CisgICAgYXV0byog
Y2FjaGVkQ29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ2FjaGVkV3JpdGVCYXJyaWVyPENh
Y2hlZEZ1bmN0aW9uQ29kZUJsb2NrLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPio+KGRlY29k
ZXIucHRyRm9yT2Zmc2V0RnJvbUJhc2UoY2FjaGVkRnVuY3Rpb25Db2RlQmxvY2tPZmZzZXQpKTsK
KyAgICBjYWNoZWRDb2RlQmxvY2stPmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2ssIG93bmVyKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWRUeXBlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVkVHlwZXMuaAppbmRleCBiY2I4YWNiNmNlNTcwZTk3MjYzODljMjZkNzBiY2JhMjFkYThk
NGFkLi45NzJiNGM5MjcwOTAyMzJhZGUxNDljMmE4YTk1OTg2NTM1ZjBkMDg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmgKQEAgLTMyLDEwICszMiw3OSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgU291cmNlQ29kZUtleTsKIGNsYXNzIFVubGlua2Vk
Q29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKKworY2xhc3MgRGVj
b2RlciA6IHB1YmxpYyBSZWZDb3VudGVkPERlY29kZXI+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEZWNvZGVyKTsKKworcHVibGljOgorICAgIERlY29kZXIoVk0mIHZtLCBjb25zdCB2b2lk
KiBiYXNlQWRkcmVzcywgc2l6ZV90IHNpemUpCisgICAgICAgIDogbV92bSh2bSkKKyAgICAgICAg
LCBtX2Jhc2VBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJhc2VBZGRy
ZXNzKSkKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICwgbV9zaXplKHNpemUpCisjZW5kaWYKKyAg
ICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyAgICB9CisKKyAgICB+RGVjb2Rlcigp
CisgICAgeworICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2ZpbmFsaXplcnMpCisgICAgICAg
ICAgICBwYWlyLnZhbHVlKCk7CisgICAgfQorCisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV92bTsg
fQorCisgICAgcHRyZGlmZl90IG9mZnNldE9mKGNvbnN0IHZvaWQqIHB0cikKKyAgICB7CisgICAg
ICAgIGNvbnN0IHVpbnQ4X3QqIGFkZHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocHRy
KTsKKyAgICAgICAgQVNTRVJUKGFkZHIgPj0gbV9iYXNlQWRkcmVzcyAmJiBhZGRyIDwgbV9iYXNl
QWRkcmVzcyArIG1fc2l6ZSk7CisgICAgICAgIHJldHVybiBhZGRyIC0gbV9iYXNlQWRkcmVzczsK
KyAgICB9CisKKyAgICB2b2lkIGNhY2hlT2Zmc2V0KHB0cmRpZmZfdCBvZmZzZXQsIHZvaWQqIHB0
cikKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0VG9QdHJNYXAuYWRkKG9mZnNldCwgcHRyKTsKKyAg
ICB9CisKKyAgICBXVEY6Ok9wdGlvbmFsPHZvaWQqPiBwdHJGb3JPZmZzZXQocHRyZGlmZl90IG9m
ZnNldCkKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBtX29mZnNldFRvUHRyTWFwLmZpbmQob2Zm
c2V0KTsKKyAgICAgICAgaWYgKGl0ID09IG1fb2Zmc2V0VG9QdHJNYXAuZW5kKCkpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4geyBpdC0+dmFsdWUgfTsK
KyAgICB9CisKKyAgICBjb25zdCB2b2lkKiBwdHJGb3JPZmZzZXRGcm9tQmFzZShwdHJkaWZmX3Qg
b2Zmc2V0KQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEFTU0VSVChvZmZzZXQgPiAw
ICYmIHN0YXRpY19jYXN0PHNpemVfdD4ob2Zmc2V0KSA8IG1fc2l6ZSk7CisjZW5kaWYKKyAgICAg
ICAgcmV0dXJuIG1fYmFzZUFkZHJlc3MgKyBvZmZzZXQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGFkZEZpbmFsaXplcihwdHJkaWZmX3Qgb2Zmc2V0
LCBjb25zdCBGdW5jdG9yJiBmbikKKyAgICB7CisgICAgICAgIG1fZmluYWxpemVycy5hZGQob2Zm
c2V0LCBmbik7CisgICAgfQorCitwcml2YXRlOgorICAgIFZNJiBtX3ZtOworICAgIGNvbnN0IHVp
bnQ4X3QqIG1fYmFzZUFkZHJlc3M7CisjaWZuZGVmIE5ERUJVRworICAgIHNpemVfdCBtX3NpemU7
CisjZW5kaWYKKyAgICBIYXNoTWFwPHB0cmRpZmZfdCwgdm9pZCo+IG1fb2Zmc2V0VG9QdHJNYXA7
CisgICAgSGFzaE1hcDxwdHJkaWZmX3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9maW5hbGl6
ZXJzOworfTsKIAogc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVD
b2RlQmxvY2soVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29uc3QgVW5saW5rZWRDb2RlQmxv
Y2sqKTsKKwogVW5saW5rZWRDb2RlQmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mLCBjb25z
dCBTb3VyY2VDb2RlS2V5JiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CiAKK3ZvaWQgZGVjb2RlRnVu
Y3Rpb25Db2RlQmxvY2soRGVjb2RlciYsIGludDMyX3QgY2FjaGVkRnVuY3Rpb25Db2RlQmxvY2tP
ZmZzZXQsIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiYsIGNvbnN0IEpT
Q2VsbCopOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CiBVbmxp
bmtlZENvZGVCbG9ja1R5cGUqIGRlY29kZUNvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNv
ZGVLZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363525</attachid>
            <date>2019-03-04 10:30:10 -0800</date>
            <delta_ts>2019-03-04 15:38:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194810-20190304192922.patch</filename>
            <type>text/plain</type>
            <size>18471</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTY5MDYyZDQxNjg4ODJjNDMyZjc3OTcyMTkyZjcyNzQ0NWE3ODFjLi4wMTExZGVkYTg3NDM0ZTBl
NDY4NWZmYzBjZTc4NzkwOTQ3MTc4ODI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxOS0wMy0wNCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBMYXppbHkgZGVjb2RlIGNhY2hlZCBieXRlY29kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGlrZSBsYXp5IHBhcnNpbmcsIHdl
IHNob3VsZCBwYXVzZSBhdCBjb2RlIGJsb2NrIGJvdW5kYXJpZXMuIEluc3RlYWQKKyAgICAgICAg
b2YgYWx3YXlzIGVhZ2VybHkgZGVjb2RpbmcgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUncyBV
bmxpbmtlZENvZGVCbG9ja3MsCisgICAgICAgIHdlIHN0b3JlIHRoZWlyIG9mZnNldHMgaW4gdGhl
IGV4ZWN1dGFibGUgYW5kIGxhemlseSBkZWNvZGUgdGhlbSBvbiB0aGUgbmV4dAorICAgICAgICBj
YWxsIHRvIGB1bmxpbmtlZENvZGVCbG9ja0ZvcmAuCisKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6
OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp+VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZENv
ZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpk
ZWNvZGVDYWNoZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwOgorICAg
ICAgICAoSlNDOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6fkRl
Y29kZXIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpE
ZWNvZGVyOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkRlY29kZXI6OmNhY2hlT2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6cHRyRm9yT2Zmc2V0RnJvbUJhc2UpOgorICAgICAgICAo
SlNDOjpEZWNvZGVyOjpoYW5kbGVGb3JFbnZpcm9ubWVudCBjb25zdCk6CisgICAgICAgIChKU0M6
OkRlY29kZXI6OnNldEhhbmRsZUZvckVudmlyb25tZW50KToKKyAgICAgICAgKEpTQzo6RGVjb2Rl
cjo6YWRkRmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVMZW5ndGhPYmplY3Q6Omlz
RW1wdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlY29kZSBj
b25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OmRlY29kZUNvZGVCbG9ja0ltcGwp
OgorICAgICAgICAoSlNDOjppc0NhY2hlZEJ5dGVjb2RlU3RpbGxWYWxpZCk6CisgICAgICAgIChK
U0M6OmRlY29kZUZ1bmN0aW9uQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5
cGVzLmg6CisgICAgICAgIChKU0M6OkRlY29kZXI6OnZtKToKKwogMjAxOS0wMy0wNCAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMaWJdIFJl
dHVybmluZyBHX1RZUEVfT0JKRUNUIGZyb20gYSBjb25zdHJ1Y3RvciBkb2VzIG5vdCB3b3JrCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmNwcAppbmRleCBhMTQyYzI0MDU1ZTliM2JlNDEyZTM2MTQyOGRj
MWZjY2MxNjM5MWQ4Li4yNDIwZTc4NGZiODUxMjRiZDE4NTFiODI4NzI5MWViNDY0MDkyYmQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUg
IkJ1aWx0aW5FeGVjdXRhYmxlcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisj
aW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRl
ICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgpAQCAtMTAzLDYgKzEwNCw5IEBA
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShW
TSogdm0sIFN0cnVjdHVyZSogc3RydWN0CiAgICAgLCBtX3NjcmlwdE1vZGUoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHNjcmlwdE1vZGUpKQogICAgICwgbV9zdXBlckJpbmRpbmcoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG5vZGUtPnN1cGVyQmluZGluZygpKSkKICAgICAsIG1fZGVyaXZlZENvbnRleHRU
eXBlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXJpdmVkQ29udGV4dFR5cGUpKQorICAgICwgbV9p
c0NhY2hlZChmYWxzZSkKKyAgICAsIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKCkKKyAgICAs
IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKQogICAgICwgbV9uYW1lKG5vZGUtPmlk
ZW50KCkpCiAgICAgLCBtX2VjbWFOYW1lKG5vZGUtPmVjbWFOYW1lKCkpCiAgICAgLCBtX2luZmVy
cmVkTmFtZShub2RlLT5pbmZlcnJlZE5hbWUoKSkKQEAgLTEyMCw2ICsxMjQsMTIgQEAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3QKICAgICAgICAgc2V0Q2xhc3NTb3VyY2Uobm9kZS0+Y2xhc3NTb3Vy
Y2UoKSk7CiB9CiAKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp+VW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUoKQoreworICAgIGlmIChtX2lzQ2FjaGVkKQorICAgICAgICBtX2RlY29kZXIu
flJlZlB0cigpOworfQorCiB2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGNlbGwpLT5+VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoKTsKQEAgLTEzMCw4ICsx
NDAsMTAgQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG8KICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKTsKLSAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3Ry
dWN0KTsKKyAgICBpZiAoIXRoaXNPYmplY3QtPm1faXNDYWNoZWQpIHsKKyAgICAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwpOworICAgICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3Ry
dWN0KTsKKyAgICB9CiB9CiAKIFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OmxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBj
b25zdApAQCAtMjEzLDYgKzIyNSw4IEBAIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZENvZGVCbG9ja0ZvcigKICAgICBWTSYgdm0s
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFs
aXphdGlvbktpbmQsIAogICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFBhcnNlckVycm9y
JiBlcnJvciwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSkKIHsKKyAgICBpZiAobV9pc0NhY2hl
ZCkKKyAgICAgICAgZGVjb2RlQ2FjaGVkQ29kZUJsb2NrcygpOwogICAgIHN3aXRjaCAoc3BlY2lh
bGl6YXRpb25LaW5kKSB7CiAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKICAgICAgICAgaWYgKFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JD
YWxsLmdldCgpKQpAQCAtMjQ0LDYgKzI1OCwyOSBAQCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dW5saW5rZWRDb2RlQmxvY2tGb3IoCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVj
b2RlQ2FjaGVkQ29kZUJsb2NrcygpCit7CisgICAgQVNTRVJUKG1faXNDYWNoZWQpOworICAgIEFT
U0VSVChtX2RlY29kZXIpOworICAgIEFTU0VSVChtX2NhY2hlZENvZGVCbG9ja0ZvckNhbGxPZmZz
ZXQgfHwgbV9jYWNoZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3RPZmZzZXQpOworCisgICAgUmVmUHRy
PERlY29kZXI+IGRlY29kZXIgPSBXVEZNb3ZlKG1fZGVjb2Rlcik7CisgICAgaW50MzJfdCBjYWNo
ZWRDb2RlQmxvY2tGb3JDYWxsT2Zmc2V0ID0gbV9jYWNoZWRDb2RlQmxvY2tGb3JDYWxsT2Zmc2V0
OworICAgIGludDMyX3QgY2FjaGVkQ29kZUJsb2NrRm9yQ29uc3RydWN0T2Zmc2V0ID0gbV9jYWNo
ZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3RPZmZzZXQ7CisKKyAgICBEZWZlckdDIGRlZmVyR0MoZGVj
b2Rlci0+dm0oKS5oZWFwKTsKKworICAgIC8vIE5vIG5lZWQgdG8gY2xlYXIgbV91bmxpbmtlZENv
ZGVCbG9ja0ZvckNhbGwgaGVyZSwgc2luY2Ugd2UgbW92ZWQgdGhlIGRlY29kZXIgb3V0IG9mIHRo
ZSBzYW1lIHNsb3QKKyAgICBpZiAoY2FjaGVkQ29kZUJsb2NrRm9yQ2FsbE9mZnNldCkKKyAgICAg
ICAgZGVjb2RlRnVuY3Rpb25Db2RlQmxvY2soKmRlY29kZXIsIGNhY2hlZENvZGVCbG9ja0ZvckNh
bGxPZmZzZXQsIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLCB0aGlzKTsKKyAgICBpZiAoY2Fj
aGVkQ29kZUJsb2NrRm9yQ29uc3RydWN0T2Zmc2V0KQorICAgICAgICBkZWNvZGVGdW5jdGlvbkNv
ZGVCbG9jaygqZGVjb2RlciwgY2FjaGVkQ29kZUJsb2NrRm9yQ29uc3RydWN0T2Zmc2V0LCBtX3Vu
bGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LCB0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIG1f
dW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIoKTsKKworICAgIG1faXNDYWNoZWQg
PSBmYWxzZTsKK30KKwogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlJhcmVEYXRhJiBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZW5zdXJlUmFyZURhdGFTbG93KCkKIHsKICAgICBBU1NF
UlQoIW1fcmFyZURhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAppbmRleCBiMGMzMDVlMmY1Yjlk
MGIzMzg1ODFhYmQ2OWYwOGRlODc3NTNmZTA0Li4zOWE3M2YyNmNmZWE5MjhmNzRkY2NhYmE1ODBk
YjNhYTc1MzQwNDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtNzUsNiArNzUsOCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKKyAgICB+VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUoKTsKKwogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSBjb25z
dCB7IHJldHVybiBtX25hbWU7IH0KICAgICBjb25zdCBJZGVudGlmaWVyJiBlY21hTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZWNtYU5hbWU7IH0KICAgICB2b2lkIHNldEVjbWFOYW1lKGNvbnN0IElk
ZW50aWZpZXImIG5hbWUpIHsgbV9lY21hTmFtZSA9IG5hbWU7IH0KQEAgLTE5Myw2ICsxOTUsOCBA
QCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiwgU3RydWN0dXJl
KiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgVW5saW5rZWRGdW5j
dGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0TW9kZSwgQ29tcGFjdFZh
cmlhYmxlTWFwOjpIYW5kbGUsICBKU0M6OkRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0J1aWx0
aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUoRGVjb2RlciYsIENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlLCBjb25zdCBDYWNoZWRGdW5j
dGlvbkV4ZWN1dGFibGUmKTsKIAorICAgIHZvaWQgZGVjb2RlQ2FjaGVkQ29kZUJsb2NrcygpOwor
CiAgICAgdW5zaWduZWQgbV9maXJzdExpbmVPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9saW5lQ291
bnQ7CiAgICAgdW5zaWduZWQgbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0OwpAQCAtMjE2LDkg
KzIyMCwyMCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2NyaXB0TW9kZTogMTsgLy8gSlNQ
YXJzZXJTY3JpcHRNb2RlCiAgICAgdW5zaWduZWQgbV9zdXBlckJpbmRpbmcgOiAxOwogICAgIHVu
c2lnbmVkIG1fZGVyaXZlZENvbnRleHRUeXBlOiAyOworICAgIGJvb2wgbV9pc0NhY2hlZCA6IDE7
CiAKLSAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV91bmxpbmtl
ZENvZGVCbG9ja0ZvckNhbGw7Ci0gICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s+IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisgICAgdW5pb24geworICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV91bmxpbmtlZENv
ZGVCbG9ja0ZvckNhbGw7CisgICAgICAgIFJlZlB0cjxEZWNvZGVyPiBtX2RlY29kZXI7CisgICAg
fTsKKworICAgIHVuaW9uIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICBpbnQzMl90IG1fY2FjaGVkQ29kZUJsb2NrRm9yQ2FsbE9mZnNldDsK
KyAgICAgICAgICAgIGludDMyX3QgbV9jYWNoZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3RPZmZzZXQ7
CisgICAgICAgIH07CisgICAgfTsKIAogICAgIElkZW50aWZpZXIgbV9uYW1lOwogICAgIElkZW50
aWZpZXIgbV9lY21hTmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
ZFR5cGVzLmNwcAppbmRleCBlODc0YWI3YjY5NWY0NDQ1NTY3ZTFhMmJhMzY3MDFjZjRiOTU0OGY5
Li4yY2NlZjRiN2VkOWNiNWQ0MTRiNDRlZjYxYWUxZTFjZmYyZmU4ZmIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0yMTEsNzggKzIxMSw3
MyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8Y29uc3Qgdm9pZCosIHB0cmRpZmZfdD4gbV9wdHJU
b09mZnNldE1hcDsKIH07CiAKLWNsYXNzIERlY29kZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKERlY29kZXIpOwotICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9OOwotCi1wdWJsaWM6
Ci0gICAgRGVjb2RlcihWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VBZGRyZXNzLCBzaXplX3Qgc2l6
ZSkKLSAgICAgICAgOiBtX3ZtKHZtKQotICAgICAgICAsIG1fYmFzZUFkZHJlc3Moc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGJhc2VBZGRyZXNzKSkKK0RlY29kZXI6OkRlY29kZXIoVk0mIHZt
LCBjb25zdCB2b2lkKiBiYXNlQWRkcmVzcywgc2l6ZV90IHNpemUpCisgICAgOiBtX3ZtKHZtKQor
ICAgICwgbV9iYXNlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihiYXNl
QWRkcmVzcykpCiAjaWZuZGVmIE5ERUJVRwotICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgICwg
bV9zaXplKHNpemUpCiAjZW5kaWYKLSAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzaXplKTsK
LSAgICB9Cit7CisgICAgVU5VU0VEX1BBUkFNKHNpemUpOworfQogCi0gICAgfkRlY29kZXIoKQot
ICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBmaW5hbGl6ZXIgOiBtX2ZpbmFsaXplcnMpCi0gICAg
ICAgICAgICBmaW5hbGl6ZXIoKTsKLSAgICB9CitEZWNvZGVyOjp+RGVjb2RlcigpCit7CisgICAg
Zm9yIChhdXRvJiBmaW5hbGl6ZXIgOiBtX2ZpbmFsaXplcnMpCisgICAgICAgIGZpbmFsaXplcigp
OworfQogCi0gICAgVk0mIHZtKCkgeyByZXR1cm4gbV92bTsgfQorUmVmPERlY29kZXI+IERlY29k
ZXI6OmNyZWF0ZShWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VBZGRyZXNzLCBzaXplX3Qgc2l6ZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWNvZGVyKHZtLCBiYXNlQWRkcmVzcywgc2l6
ZSkpOworfQogCi0gICAgcHRyZGlmZl90IG9mZnNldE9mKGNvbnN0IHZvaWQqIHB0cikKLSAgICB7
Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGFkZHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4ocHRyKTsKLSAgICAgICAgQVNTRVJUKGFkZHIgPj0gbV9iYXNlQWRkcmVzcyAmJiBhZGRyIDwg
bV9iYXNlQWRkcmVzcyArIG1fc2l6ZSk7Ci0gICAgICAgIHJldHVybiBhZGRyIC0gbV9iYXNlQWRk
cmVzczsKLSAgICB9CitwdHJkaWZmX3QgRGVjb2Rlcjo6b2Zmc2V0T2YoY29uc3Qgdm9pZCogcHRy
KQoreworICAgIGNvbnN0IHVpbnQ4X3QqIGFkZHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4ocHRyKTsKKyAgICBBU1NFUlQoYWRkciA+PSBtX2Jhc2VBZGRyZXNzICYmIGFkZHIgPCBtX2Jh
c2VBZGRyZXNzICsgbV9zaXplKTsKKyAgICByZXR1cm4gYWRkciAtIG1fYmFzZUFkZHJlc3M7Cit9
CiAKLSAgICB2b2lkIGNhY2hlT2Zmc2V0KHB0cmRpZmZfdCBvZmZzZXQsIHZvaWQqIHB0cikKLSAg
ICB7Ci0gICAgICAgIG1fb2Zmc2V0VG9QdHJNYXAuYWRkKG9mZnNldCwgcHRyKTsKLSAgICB9Cit2
b2lkIERlY29kZXI6OmNhY2hlT2Zmc2V0KHB0cmRpZmZfdCBvZmZzZXQsIHZvaWQqIHB0cikKK3sK
KyAgICBtX29mZnNldFRvUHRyTWFwLmFkZChvZmZzZXQsIHB0cik7Cit9CiAKLSAgICBPcHRpb25h
bDx2b2lkKj4gY2FjaGVkUHRyRm9yT2Zmc2V0KHB0cmRpZmZfdCBvZmZzZXQpCi0gICAgewotICAg
ICAgICBhdXRvIGl0ID0gbV9vZmZzZXRUb1B0ck1hcC5maW5kKG9mZnNldCk7Ci0gICAgICAgIGlm
IChpdCA9PSBtX29mZnNldFRvUHRyTWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsgaXQtPnZhbHVlIH07Ci0gICAgfQorV1RGOjpPcHRp
b25hbDx2b2lkKj4gRGVjb2Rlcjo6Y2FjaGVkUHRyRm9yT2Zmc2V0KHB0cmRpZmZfdCBvZmZzZXQp
Cit7CisgICAgYXV0byBpdCA9IG1fb2Zmc2V0VG9QdHJNYXAuZmluZChvZmZzZXQpOworICAgIGlm
IChpdCA9PSBtX29mZnNldFRvUHRyTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIHJldHVybiB7IGl0LT52YWx1ZSB9OworfQogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KLSAgICB2b2lkIGFkZEZpbmFsaXplcihjb25zdCBGdW5jdG9yJiBmaW5hbGl6
ZXIpCi0gICAgewotICAgICAgICBtX2ZpbmFsaXplcnMuYXBwZW5kKGZpbmFsaXplcik7Ci0gICAg
fQorY29uc3Qgdm9pZCogRGVjb2Rlcjo6cHRyRm9yT2Zmc2V0RnJvbUJhc2UocHRyZGlmZl90IG9m
ZnNldCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKG9mZnNldCA+IDAgJiYgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihvZmZzZXQpIDwgbV9zaXplKTsKKyNlbmRpZgorICAgIHJldHVybiBtX2Jh
c2VBZGRyZXNzICsgb2Zmc2V0OworfQogCi0gICAgQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUg
aGFuZGxlRm9yRW52aXJvbm1lbnQoQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQqIGVudmlyb25t
ZW50KSBjb25zdAotICAgIHsKLSAgICAgICAgYXV0byBpdCA9IG1fZW52aXJvbm1lbnRUb0hhbmRs
ZU1hcC5maW5kKGVudmlyb25tZW50KTsKLSAgICAgICAgQVNTRVJUKGl0ICE9IG1fZW52aXJvbm1l
bnRUb0hhbmRsZU1hcC5lbmQoKSk7Ci0gICAgICAgIHJldHVybiBpdC0+dmFsdWU7Ci0gICAgfQor
Q29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUgRGVjb2Rlcjo6aGFuZGxlRm9yRW52aXJvbm1lbnQo
Q29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQqIGVudmlyb25tZW50KSBjb25zdAoreworICAgIGF1
dG8gaXQgPSBtX2Vudmlyb25tZW50VG9IYW5kbGVNYXAuZmluZChlbnZpcm9ubWVudCk7CisgICAg
QVNTRVJUKGl0ICE9IG1fZW52aXJvbm1lbnRUb0hhbmRsZU1hcC5lbmQoKSk7CisgICAgcmV0dXJu
IGl0LT52YWx1ZTsKK30KIAotICAgIHZvaWQgc2V0SGFuZGxlRm9yRW52aXJvbm1lbnQoQ29tcGFj
dFZhcmlhYmxlRW52aXJvbm1lbnQqIGVudmlyb25tZW50LCBjb25zdCBDb21wYWN0VmFyaWFibGVN
YXA6OkhhbmRsZSYgaGFuZGxlKQotICAgIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Vu
dmlyb25tZW50VG9IYW5kbGVNYXAuYWRkKGVudmlyb25tZW50LCBoYW5kbGUpOwotICAgICAgICBB
U1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0KK3Zv
aWQgRGVjb2Rlcjo6c2V0SGFuZGxlRm9yRW52aXJvbm1lbnQoQ29tcGFjdFZhcmlhYmxlRW52aXJv
bm1lbnQqIGVudmlyb25tZW50LCBjb25zdCBDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZSYgaGFu
ZGxlKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9lbnZpcm9ubWVudFRvSGFuZGxlTWFwLmFk
ZChlbnZpcm9ubWVudCwgaGFuZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRk
UmVzdWx0LmlzTmV3RW50cnkpOworfQogCi1wcml2YXRlOgotICAgIFZNJiBtX3ZtOwotICAgIGNv
bnN0IHVpbnQ4X3QqIG1fYmFzZUFkZHJlc3M7Ci0jaWZuZGVmIE5ERUJVRwotICAgIHNpemVfdCBt
X3NpemU7Ci0jZW5kaWYKLSAgICBIYXNoTWFwPHB0cmRpZmZfdCwgdm9pZCo+IG1fb2Zmc2V0VG9Q
dHJNYXA7Ci0gICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9maW5hbGl6ZXJzOwot
ICAgIEhhc2hNYXA8Q29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQqLCBDb21wYWN0VmFyaWFibGVN
YXA6OkhhbmRsZT4gbV9lbnZpcm9ubWVudFRvSGFuZGxlTWFwOwotfTsKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+Cit2b2lkIERlY29kZXI6OmFkZEZpbmFsaXplcihjb25zdCBGdW5jdG9yJiBm
bikKK3sKKyAgICBtX2ZpbmFsaXplcnMuYXBwZW5kKGZuKTsKK30KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIHN0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxULCBTb3VyY2VUeXBl
PFQ+Pjo6dmFsdWU+IGVuY29kZShFbmNvZGVyJiwgVCYgZHN0LCBjb25zdCBTb3VyY2VUeXBlPFQ+
JiBzcmMpCkBAIC0zNDUsNiArMzQwLDEyIEBAIGNsYXNzIFZhcmlhYmxlTGVuZ3RoT2JqZWN0IDog
cHVibGljIENhY2hlZE9iamVjdDxTb3VyY2U+IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlw
ZW5hbWU+CiAgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRQdHI7CiAKK3B1YmxpYzoKKyAgICBib29s
IGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IHNfaW52
YWxpZE9mZnNldDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBjb25zdCB1aW50OF90KiBidWZm
ZXIoKSBjb25zdAogICAgIHsKQEAgLTM3MywxMSArMzc0LDYgQEAgcHJvdGVjdGVkOgogICAgICAg
ICByZXR1cm4gbmV3IChyZXN1bHQpIFRbc2l6ZV07CiAgICAgfQogCi0gICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29mZnNldCA9PSBzX2ludmFsaWRPZmZz
ZXQ7Ci0gICAgfQotCiBwcml2YXRlOgogICAgIGNvbnN0ZXhwciBzdGF0aWMgcHRyZGlmZl90IHNf
aW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8cHRyZGlmZl90Pjo6bWF4KCk7CiAK
QEAgLTQ4NCw2ICs0ODAsOCBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgU291cmNlID0gU291cmNlVHlwZTxUPj4KIGNsYXNzIENhY2hlZFdyaXRlQmFycmllciA6IHB1
YmxpYyBDYWNoZWRPYmplY3Q8V3JpdGVCYXJyaWVyPFNvdXJjZT4+IHsKIHB1YmxpYzoKKyAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3B0ci5pc0VtcHR5KCk7IH0KKwogICAgIHZv
aWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdyaXRlQmFycmllcjxTb3VyY2U+IHNy
YykKICAgICB7CiAgICAgICAgIG1fcHRyLmVuY29kZShlbmNvZGVyLCBzcmMuZ2V0KCkpOwpAQCAt
MTk2OCw4ICsxOTY2LDE0IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVjb2RlKERlY29kCiAgICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZShkZWNvZGVyLCBXVEZNb3ZlKGVudiksICp0aGlzKTsKICAgICBl
eGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihkZWNvZGVyLnZtKCkpOwogCi0gICAgbV91bmxpbmtl
ZENvZGVCbG9ja0ZvckNhbGwuZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRD
b2RlQmxvY2tGb3JDYWxsLCBleGVjdXRhYmxlKTsKLSAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9y
Q29uc3RydWN0LmRlY29kZShkZWNvZGVyLCBleGVjdXRhYmxlLT5tX3VubGlua2VkQ29kZUJsb2Nr
Rm9yQ29uc3RydWN0LCBleGVjdXRhYmxlKTsKKyAgICBpZiAoIW1fdW5saW5rZWRDb2RlQmxvY2tG
b3JDYWxsLmlzRW1wdHkoKSB8fCAhbV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9pc0NhY2hlZCA9IHRydWU7CisgICAgICAg
IGV4ZWN1dGFibGUtPm1fZGVjb2RlciA9ICZkZWNvZGVyOworICAgICAgICBpZiAoIW1fdW5saW5r
ZWRDb2RlQmxvY2tGb3JDYWxsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1f
Y2FjaGVkQ29kZUJsb2NrRm9yQ2FsbE9mZnNldCA9IGRlY29kZXIub2Zmc2V0T2YoJm1fdW5saW5r
ZWRDb2RlQmxvY2tGb3JDYWxsKTsKKyAgICAgICAgaWYgKCFtX3VubGlua2VkQ29kZUJsb2NrRm9y
Q29uc3RydWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY2FjaGVkQ29k
ZUJsb2NrRm9yQ29uc3RydWN0T2Zmc2V0ID0gZGVjb2Rlci5vZmZzZXRPZigmbV91bmxpbmtlZENv
ZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgfQogCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9
CkBAIC0xOTk5LDYgKzIwMDMsOSBAQCBBTFdBWVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVyJiBkZQogICAgICwgbV9z
Y3JpcHRNb2RlKGNhY2hlZEV4ZWN1dGFibGUuc2NyaXB0TW9kZSgpKQogICAgICwgbV9zdXBlckJp
bmRpbmcoY2FjaGVkRXhlY3V0YWJsZS5zdXBlckJpbmRpbmcoKSkKICAgICAsIG1fZGVyaXZlZENv
bnRleHRUeXBlKGNhY2hlZEV4ZWN1dGFibGUuZGVyaXZlZENvbnRleHRUeXBlKCkpCisgICAgLCBt
X2lzQ2FjaGVkKGZhbHNlKQorICAgICwgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwoKQorICAg
ICwgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCgpCiAKICAgICAsIG1fbmFtZShjYWNo
ZWRFeGVjdXRhYmxlLm5hbWUoZGVjb2RlcikpCiAgICAgLCBtX2VjbWFOYW1lKGNhY2hlZEV4ZWN1
dGFibGUuZWNtYU5hbWUoZGVjb2RlcikpCkBAIC0yMjE4LDExICsyMjI1LDExIEBAIHN0ZDo6cGFp
cjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gZW5jb2RlQ29kZUJsb2NrKFZNJiB2bSwgY29u
c3QgU291cmNlQ29kZUtlCiBVbmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChW
TSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXpl
X3Qgc2l6ZSkKIHsKICAgICBjb25zdCBhdXRvKiBjYWNoZWRFbnRyeSA9IGJpdHdpc2VfY2FzdDxj
b25zdCBHZW5lcmljQ2FjaGVFbnRyeSo+KGJ1ZmZlcik7Ci0gICAgRGVjb2RlciBkZWNvZGVyKHZt
LCBidWZmZXIsIHNpemUpOworICAgIFJlZjxEZWNvZGVyPiBkZWNvZGVyID0gRGVjb2Rlcjo6Y3Jl
YXRlKHZtLCBidWZmZXIsIHNpemUpOwogICAgIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBVbmxp
bmtlZENvZGVCbG9jayo+IGVudHJ5OwogICAgIHsKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwotICAgICAgICBpZiAoIWNhY2hlZEVudHJ5LT5kZWNvZGUoZGVjb2RlciwgZW50cnkp
KQorICAgICAgICBpZiAoIWNhY2hlZEVudHJ5LT5kZWNvZGUoZGVjb2Rlci5nZXQoKSwgZW50cnkp
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0yMjM4LDggKzIyNDUs
MTUgQEAgYm9vbCBpc0NhY2hlZEJ5dGVjb2RlU3RpbGxWYWxpZChWTSYgdm0sIGNvbnN0IENhY2hl
ZEJ5dGVjb2RlJiBjYWNoZWRCeXRlY29kZSwgY28KICAgICBpZiAoIXNpemUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBjb25zdCBhdXRvKiBjYWNoZWRFbnRyeSA9IGJpdHdpc2VfY2FzdDxj
b25zdCBHZW5lcmljQ2FjaGVFbnRyeSo+KGJ1ZmZlcik7Ci0gICAgRGVjb2RlciBkZWNvZGVyKHZt
LCBidWZmZXIsIHNpemUpOwotICAgIHJldHVybiBjYWNoZWRFbnRyeS0+aXNTdGlsbFZhbGlkKGRl
Y29kZXIsIGtleSwgdGFnRnJvbVNvdXJjZUNvZGVUeXBlKHR5cGUpKTsKKyAgICBSZWY8RGVjb2Rl
cj4gZGVjb2RlciA9IERlY29kZXI6OmNyZWF0ZSh2bSwgYnVmZmVyLCBzaXplKTsKKyAgICByZXR1
cm4gY2FjaGVkRW50cnktPmlzU3RpbGxWYWxpZChkZWNvZGVyLmdldCgpLCBrZXksIHRhZ0Zyb21T
b3VyY2VDb2RlVHlwZSh0eXBlKSk7Cit9CisKK3ZvaWQgZGVjb2RlRnVuY3Rpb25Db2RlQmxvY2so
RGVjb2RlciYgZGVjb2RlciwgaW50MzJfdCBjYWNoZWRGdW5jdGlvbkNvZGVCbG9ja09mZnNldCwg
V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIGNvbnN0
IEpTQ2VsbCogb3duZXIpCit7CisgICAgQVNTRVJUKGRlY29kZXIudm0oKS5oZWFwLmlzRGVmZXJy
ZWQoKSk7CisgICAgYXV0byogY2FjaGVkQ29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ2Fj
aGVkV3JpdGVCYXJyaWVyPENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrLCBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrPio+KGRlY29kZXIucHRyRm9yT2Zmc2V0RnJvbUJhc2UoY2FjaGVkRnVuY3Rpb25D
b2RlQmxvY2tPZmZzZXQpKTsKKyAgICBjYWNoZWRDb2RlQmxvY2stPmRlY29kZShkZWNvZGVyLCBj
b2RlQmxvY2ssIG93bmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuaAppbmRleCA3ZTkyZDU1MmNhMDI5MWQ1NDA5
MWM1YWJlMTZmZDA5Njk2NjU0NWNmLi45ZGIzYWJkYjgxNDg1MmI4MTQ0YzljYTBhZDNiOTE1YjJm
NGNmMjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmgK
QEAgLTI2LDYgKzI2LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisj
aW5jbHVkZSAiVmFyaWFibGVFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMzLDEy
ICszNSw0OCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlZEJ5dGVjb2RlOwogY2xhc3Mg
U291cmNlQ29kZUtleTsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jazsKKworY2xhc3MgRGVjb2RlciA6IHB1YmxpYyBSZWZDb3VudGVkPERl
Y29kZXI+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWNvZGVyKTsKKworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8RGVjb2Rlcj4gY3JlYXRlKFZNJiwgY29uc3Qgdm9pZCosIHNpemVfdCk7
CisKKyAgICB+RGVjb2RlcigpOworCisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV92bTsgfQorCisg
ICAgcHRyZGlmZl90IG9mZnNldE9mKGNvbnN0IHZvaWQqKTsKKyAgICB2b2lkIGNhY2hlT2Zmc2V0
KHB0cmRpZmZfdCwgdm9pZCopOworICAgIFdURjo6T3B0aW9uYWw8dm9pZCo+IGNhY2hlZFB0ckZv
ck9mZnNldChwdHJkaWZmX3QpOworICAgIGNvbnN0IHZvaWQqIHB0ckZvck9mZnNldEZyb21CYXNl
KHB0cmRpZmZfdCk7CisgICAgQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUgaGFuZGxlRm9yRW52
aXJvbm1lbnQoQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQqKSBjb25zdDsKKyAgICB2b2lkIHNl
dEhhbmRsZUZvckVudmlyb25tZW50KENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50KiwgY29uc3Qg
Q29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUmKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBhZGRGaW5hbGl6ZXIoY29uc3QgRnVuY3RvciYpOworCitwcml2YXRl
OgorICAgIERlY29kZXIoVk0mLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKKworICAgIFZNJiBtX3Zt
OworICAgIGNvbnN0IHVpbnQ4X3QqIG1fYmFzZUFkZHJlc3M7CisjaWZuZGVmIE5ERUJVRworICAg
IHNpemVfdCBtX3NpemU7CisjZW5kaWYKKyAgICBIYXNoTWFwPHB0cmRpZmZfdCwgdm9pZCo+IG1f
b2Zmc2V0VG9QdHJNYXA7CisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9maW5h
bGl6ZXJzOworICAgIEhhc2hNYXA8Q29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQqLCBDb21wYWN0
VmFyaWFibGVNYXA6OkhhbmRsZT4gbV9lbnZpcm9ubWVudFRvSGFuZGxlTWFwOworfTsKIAogZW51
bSBjbGFzcyBTb3VyY2VDb2RlVHlwZTsKIAogc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwg
c2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29uc3Qg
VW5saW5rZWRDb2RlQmxvY2sqKTsKKwogVW5saW5rZWRDb2RlQmxvY2sqIGRlY29kZUNvZGVCbG9j
a0ltcGwoVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CiAK
K3ZvaWQgZGVjb2RlRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYsIGludDMyX3QgY2FjaGVkRnVu
Y3Rpb25Db2RlQmxvY2tPZmZzZXQsIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrPiYsIGNvbnN0IEpTQ2VsbCopOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVC
bG9ja1R5cGU+CiBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGRlY29kZUNvZGVCbG9jayhWTSYgdm0s
IGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6
ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363558</attachid>
            <date>2019-03-04 15:38:52 -0800</date>
            <delta_ts>2019-03-07 11:05:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194810-20190305003805.patch</filename>
            <type>text/plain</type>
            <size>19502</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTY5MDYyZDQxNjg4ODJjNDMyZjc3OTcyMTkyZjcyNzQ0NWE3ODFjLi42NGQ2MDBmMTRlM2Q3NjYz
M2IzMDU5ZWRhNzE3ODIyNWRkYWYyNjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxOS0wMy0wNCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBMYXppbHkgZGVjb2RlIGNhY2hlZCBieXRlY29kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGlrZSBsYXp5IHBhcnNpbmcsIHdl
IHNob3VsZCBwYXVzZSBhdCBjb2RlIGJsb2NrIGJvdW5kYXJpZXMuIEluc3RlYWQKKyAgICAgICAg
b2YgYWx3YXlzIGVhZ2VybHkgZGVjb2RpbmcgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUncyBV
bmxpbmtlZENvZGVCbG9ja3MsCisgICAgICAgIHdlIHN0b3JlIHRoZWlyIG9mZnNldHMgaW4gdGhl
IGV4ZWN1dGFibGUgYW5kIGxhemlseSBkZWNvZGUgdGhlbSBvbiB0aGUgbmV4dAorICAgICAgICBj
YWxsIHRvIGB1bmxpbmtlZENvZGVCbG9ja0ZvcmAuCisKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6
OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp+VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZENv
ZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpk
ZWNvZGVDYWNoZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwOgorICAg
ICAgICAoSlNDOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6fkRl
Y29kZXIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpE
ZWNvZGVyOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkRlY29kZXI6OmNhY2hlT2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6cHRyRm9yT2Zmc2V0RnJvbUJhc2UpOgorICAgICAgICAo
SlNDOjpEZWNvZGVyOjpoYW5kbGVGb3JFbnZpcm9ubWVudCBjb25zdCk6CisgICAgICAgIChKU0M6
OkRlY29kZXI6OnNldEhhbmRsZUZvckVudmlyb25tZW50KToKKyAgICAgICAgKEpTQzo6RGVjb2Rl
cjo6YWRkRmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVMZW5ndGhPYmplY3Q6Omlz
RW1wdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2Vk
Q29kZUJsb2NrRm9yQ2FsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6dW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChK
U0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSk6CisgICAgICAgIChKU0M6OmRlY29kZUNvZGVCbG9ja0ltcGwpOgorICAgICAgICAoSlNDOjpp
c0NhY2hlZEJ5dGVjb2RlU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OmRlY29kZUZ1bmN0aW9u
Q29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmg6CisgICAgICAgIChK
U0M6OkRlY29kZXI6OnZtKToKKwogMjAxOS0wMy0wNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMaWJdIFJldHVybmluZyBHX1RZUEVfT0JK
RUNUIGZyb20gYSBjb25zdHJ1Y3RvciBkb2VzIG5vdCB3b3JrCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmNwcAppbmRleCBhMTQyYzI0MDU1ZTliM2JlNDEyZTM2MTQyOGRjMWZjY2MxNjM5MWQ4Li45NjI5
YzQ2YTNmNWIzN2U5ZjYyMWJmOWVhMjFjN2ViYjg5YmI5NDQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkJ1aWx0aW5FeGVjdXRhYmxl
cy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiQ2FjaGVkVHlw
ZXMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNp
bmNsdWRlICJEZWJ1Z2dlci5oIgpAQCAtMTAzLDYgKzEwNCw5IEBAIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSogdm0sIFN0cnVjdHVyZSog
c3RydWN0CiAgICAgLCBtX3NjcmlwdE1vZGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNjcmlwdE1v
ZGUpKQogICAgICwgbV9zdXBlckJpbmRpbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5vZGUtPnN1
cGVyQmluZGluZygpKSkKICAgICAsIG1fZGVyaXZlZENvbnRleHRUeXBlKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihkZXJpdmVkQ29udGV4dFR5cGUpKQorICAgICwgbV9pc0NhY2hlZChmYWxzZSkKKyAg
ICAsIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKCkKKyAgICAsIG1fdW5saW5rZWRDb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QoKQogICAgICwgbV9uYW1lKG5vZGUtPmlkZW50KCkpCiAgICAgLCBtX2Vj
bWFOYW1lKG5vZGUtPmVjbWFOYW1lKCkpCiAgICAgLCBtX2luZmVycmVkTmFtZShub2RlLT5pbmZl
cnJlZE5hbWUoKSkKQEAgLTEyMCw2ICsxMjQsMTIgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3QK
ICAgICAgICAgc2V0Q2xhc3NTb3VyY2Uobm9kZS0+Y2xhc3NTb3VyY2UoKSk7CiB9CiAKK1VubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp+VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoKQorewor
ICAgIGlmIChtX2lzQ2FjaGVkKQorICAgICAgICBtX2RlY29kZXIuflJlZlB0cigpOworfQorCiB2
b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsK
ICAgICBzdGF0aWNfY2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5+VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoKTsKQEAgLTEzMCw4ICsxNDAsMTAgQEAgdm9pZCBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG8KICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKTsKLSAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICBpZiAoIXRo
aXNPYmplY3QtPm1faXNDYWNoZWQpIHsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICB9CiB9CiAK
IFNvdXJjZUNvZGUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmtlZFNvdXJjZUNvZGUo
Y29uc3QgU291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlKSBjb25zdApAQCAtMjEzLDYgKzIy
NSw4IEBAIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlOjp1bmxpbmtlZENvZGVCbG9ja0ZvcigKICAgICBWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIAogICAg
IERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvciwgU291cmNlUGFy
c2VNb2RlIHBhcnNlTW9kZSkKIHsKKyAgICBpZiAobV9pc0NhY2hlZCkKKyAgICAgICAgZGVjb2Rl
Q2FjaGVkQ29kZUJsb2NrcygpOwogICAgIHN3aXRjaCAoc3BlY2lhbGl6YXRpb25LaW5kKSB7CiAg
ICAgY2FzZSBDb2RlRm9yQ2FsbDoKICAgICAgICAgaWYgKFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLmdldCgpKQpAQCAtMjQ0
LDYgKzI1OCwzMSBAQCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6dW5saW5rZWRDb2RlQmxvY2tGb3IoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAordm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVjb2RlQ2FjaGVkQ29kZUJsb2Nr
cygpCit7CisgICAgQVNTRVJUKG1faXNDYWNoZWQpOworICAgIEFTU0VSVChtX2RlY29kZXIpOwor
ICAgIEFTU0VSVChtX2NhY2hlZENvZGVCbG9ja0ZvckNhbGxPZmZzZXQgfHwgbV9jYWNoZWRDb2Rl
QmxvY2tGb3JDb25zdHJ1Y3RPZmZzZXQpOworCisgICAgUmVmUHRyPERlY29kZXI+IGRlY29kZXIg
PSBXVEZNb3ZlKG1fZGVjb2Rlcik7CisgICAgaW50MzJfdCBjYWNoZWRDb2RlQmxvY2tGb3JDYWxs
T2Zmc2V0ID0gbV9jYWNoZWRDb2RlQmxvY2tGb3JDYWxsT2Zmc2V0OworICAgIGludDMyX3QgY2Fj
aGVkQ29kZUJsb2NrRm9yQ29uc3RydWN0T2Zmc2V0ID0gbV9jYWNoZWRDb2RlQmxvY2tGb3JDb25z
dHJ1Y3RPZmZzZXQ7CisKKyAgICBEZWZlckdDIGRlZmVyR0MoZGVjb2Rlci0+dm0oKS5oZWFwKTsK
KworICAgIC8vIE5vIG5lZWQgdG8gY2xlYXIgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwgaGVy
ZSwgc2luY2Ugd2UgbW92ZWQgdGhlIGRlY29kZXIgb3V0IG9mIHRoZSBzYW1lIHNsb3QKKyAgICBp
ZiAoY2FjaGVkQ29kZUJsb2NrRm9yQ2FsbE9mZnNldCkKKyAgICAgICAgZGVjb2RlRnVuY3Rpb25D
b2RlQmxvY2soKmRlY29kZXIsIGNhY2hlZENvZGVCbG9ja0ZvckNhbGxPZmZzZXQsIG1fdW5saW5r
ZWRDb2RlQmxvY2tGb3JDYWxsLCB0aGlzKTsKKyAgICBpZiAoY2FjaGVkQ29kZUJsb2NrRm9yQ29u
c3RydWN0T2Zmc2V0KQorICAgICAgICBkZWNvZGVGdW5jdGlvbkNvZGVCbG9jaygqZGVjb2Rlciwg
Y2FjaGVkQ29kZUJsb2NrRm9yQ29uc3RydWN0T2Zmc2V0LCBtX3VubGlua2VkQ29kZUJsb2NrRm9y
Q29uc3RydWN0LCB0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIG1fdW5saW5rZWRDb2RlQmxvY2tG
b3JDb25zdHJ1Y3QuY2xlYXIoKTsKKworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAg
bV9pc0NhY2hlZCA9IGZhbHNlOworICAgIGRlY29kZXItPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIo
dGhpcyk7Cit9CisKIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpSYXJlRGF0YSYgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmVuc3VyZVJhcmVEYXRhU2xvdygpCiB7CiAgICAgQVNTRVJU
KCFtX3JhcmVEYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXggYjBjMzA1ZTJmNWI5ZDBi
MzM4NTgxYWJkNjlmMDhkZTg3NzUzZmUwNC4uMzlhNzNmMjZjZmVhOTI4Zjc0ZGNjYWJhNTgwZGIz
YWE3NTM0MDQzNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTc1LDYgKzc1LDggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCisgICAgflVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKCk7CisKICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CiAgICAgY29uc3QgSWRlbnRpZmllciYgZWNtYU5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2VjbWFOYW1lOyB9CiAgICAgdm9pZCBzZXRFY21hTmFtZShjb25zdCBJZGVu
dGlmaWVyJiBuYW1lKSB7IG1fZWNtYU5hbWUgPSBuYW1lOyB9CkBAIC0xOTMsNiArMTk1LDggQEAg
cHJpdmF0ZToKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSosIFN0cnVjdHVyZSos
IGNvbnN0IFNvdXJjZUNvZGUmLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIFVubGlua2VkRnVuY3Rp
b25LaW5kLCBDb25zdHJ1Y3RBYmlsaXR5LCBKU1BhcnNlclNjcmlwdE1vZGUsIENvbXBhY3RWYXJp
YWJsZU1hcDo6SGFuZGxlLCAgSlNDOjpEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNCdWlsdGlu
RGVmYXVsdENsYXNzQ29uc3RydWN0b3IpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KERlY29kZXImLCBDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZSwgY29uc3QgQ2FjaGVkRnVuY3Rp
b25FeGVjdXRhYmxlJik7CiAKKyAgICB2b2lkIGRlY29kZUNhY2hlZENvZGVCbG9ja3MoKTsKKwog
ICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lT2Zmc2V0OwogICAgIHVuc2lnbmVkIG1fbGluZUNvdW50
OwogICAgIHVuc2lnbmVkIG1fdW5saW5rZWRGdW5jdGlvbk5hbWVTdGFydDsKQEAgLTIxNiw5ICsy
MjAsMjAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NjcmlwdE1vZGU6IDE7IC8vIEpTUGFy
c2VyU2NyaXB0TW9kZQogICAgIHVuc2lnbmVkIG1fc3VwZXJCaW5kaW5nIDogMTsKICAgICB1bnNp
Z25lZCBtX2Rlcml2ZWRDb250ZXh0VHlwZTogMjsKKyAgICBib29sIG1faXNDYWNoZWQgOiAxOwog
Ci0gICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fdW5saW5rZWRD
b2RlQmxvY2tGb3JDYWxsOwotICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrPiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0OworICAgIHVuaW9uIHsKKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fdW5saW5rZWRDb2Rl
QmxvY2tGb3JDYWxsOworICAgICAgICBSZWZQdHI8RGVjb2Rlcj4gbV9kZWNvZGVyOworICAgIH07
CisKKyAgICB1bmlvbiB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrPiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0OworICAgICAgICBzdHJ1Y3Qg
eworICAgICAgICAgICAgaW50MzJfdCBtX2NhY2hlZENvZGVCbG9ja0ZvckNhbGxPZmZzZXQ7Cisg
ICAgICAgICAgICBpbnQzMl90IG1fY2FjaGVkQ29kZUJsb2NrRm9yQ29uc3RydWN0T2Zmc2V0Owor
ICAgICAgICB9OworICAgIH07CiAKICAgICBJZGVudGlmaWVyIG1fbmFtZTsKICAgICBJZGVudGlm
aWVyIG1fZWNtYU5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5jcHAKaW5kZXggZTg3NGFiN2I2OTVmNDQ0NTU2N2UxYTJiYTM2NzAxY2Y0Yjk1NDhmOS4u
OTZjY2QwZjQwMzQ0ZjQ5Yzg2NmMxYTliZDRjYjQ4ZmY2ZGZhMzYzZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtMjExLDc4ICsyMTEsNzMg
QEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPGNvbnN0IHZvaWQqLCBwdHJkaWZmX3Q+IG1fcHRyVG9P
ZmZzZXRNYXA7CiB9OwogCi1jbGFzcyBEZWNvZGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShEZWNvZGVyKTsKLSAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsKLQotcHVibGljOgot
ICAgIERlY29kZXIoVk0mIHZtLCBjb25zdCB2b2lkKiBiYXNlQWRkcmVzcywgc2l6ZV90IHNpemUp
Ci0gICAgICAgIDogbV92bSh2bSkKLSAgICAgICAgLCBtX2Jhc2VBZGRyZXNzKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihiYXNlQWRkcmVzcykpCitEZWNvZGVyOjpEZWNvZGVyKFZNJiB2bSwg
Y29uc3Qgdm9pZCogYmFzZUFkZHJlc3MsIHNpemVfdCBzaXplKQorICAgIDogbV92bSh2bSkKKyAg
ICAsIG1fYmFzZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYmFzZUFk
ZHJlc3MpKQogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1f
c2l6ZShzaXplKQogI2VuZGlmCi0gICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0g
ICAgfQoreworICAgIFVOVVNFRF9QQVJBTShzaXplKTsKK30KIAotICAgIH5EZWNvZGVyKCkKLSAg
ICB7Ci0gICAgICAgIGZvciAoYXV0byYgZmluYWxpemVyIDogbV9maW5hbGl6ZXJzKQotICAgICAg
ICAgICAgZmluYWxpemVyKCk7Ci0gICAgfQorRGVjb2Rlcjo6fkRlY29kZXIoKQoreworICAgIGZv
ciAoYXV0byYgZmluYWxpemVyIDogbV9maW5hbGl6ZXJzKQorICAgICAgICBmaW5hbGl6ZXIoKTsK
K30KIAotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KK1JlZjxEZWNvZGVyPiBEZWNvZGVy
OjpjcmVhdGUoVk0mIHZtLCBjb25zdCB2b2lkKiBiYXNlQWRkcmVzcywgc2l6ZV90IHNpemUpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGVjb2Rlcih2bSwgYmFzZUFkZHJlc3MsIHNpemUp
KTsKK30KIAotICAgIHB0cmRpZmZfdCBvZmZzZXRPZihjb25zdCB2b2lkKiBwdHIpCi0gICAgewot
ICAgICAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHB0cik7Ci0gICAgICAgIEFTU0VSVChhZGRyID49IG1fYmFzZUFkZHJlc3MgJiYgYWRkciA8IG1f
YmFzZUFkZHJlc3MgKyBtX3NpemUpOwotICAgICAgICByZXR1cm4gYWRkciAtIG1fYmFzZUFkZHJl
c3M7Ci0gICAgfQorcHRyZGlmZl90IERlY29kZXI6Om9mZnNldE9mKGNvbnN0IHZvaWQqIHB0cikK
K3sKKyAgICBjb25zdCB1aW50OF90KiBhZGRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHB0cik7CisgICAgQVNTRVJUKGFkZHIgPj0gbV9iYXNlQWRkcmVzcyAmJiBhZGRyIDwgbV9iYXNl
QWRkcmVzcyArIG1fc2l6ZSk7CisgICAgcmV0dXJuIGFkZHIgLSBtX2Jhc2VBZGRyZXNzOworfQog
Ci0gICAgdm9pZCBjYWNoZU9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0LCB2b2lkKiBwdHIpCi0gICAg
ewotICAgICAgICBtX29mZnNldFRvUHRyTWFwLmFkZChvZmZzZXQsIHB0cik7Ci0gICAgfQordm9p
ZCBEZWNvZGVyOjpjYWNoZU9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0LCB2b2lkKiBwdHIpCit7Cisg
ICAgbV9vZmZzZXRUb1B0ck1hcC5hZGQob2Zmc2V0LCBwdHIpOworfQogCi0gICAgT3B0aW9uYWw8
dm9pZCo+IGNhY2hlZFB0ckZvck9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAg
ICAgYXV0byBpdCA9IG1fb2Zmc2V0VG9QdHJNYXAuZmluZChvZmZzZXQpOwotICAgICAgICBpZiAo
aXQgPT0gbV9vZmZzZXRUb1B0ck1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgICAgIHJldHVybiB7IGl0LT52YWx1ZSB9OwotICAgIH0KK1dURjo6T3B0aW9u
YWw8dm9pZCo+IERlY29kZXI6OmNhY2hlZFB0ckZvck9mZnNldChwdHJkaWZmX3Qgb2Zmc2V0KQor
eworICAgIGF1dG8gaXQgPSBtX29mZnNldFRvUHRyTWFwLmZpbmQob2Zmc2V0KTsKKyAgICBpZiAo
aXQgPT0gbV9vZmZzZXRUb1B0ck1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICByZXR1cm4geyBpdC0+dmFsdWUgfTsKK30KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Ci0gICAgdm9pZCBhZGRGaW5hbGl6ZXIoY29uc3QgRnVuY3RvciYgZmluYWxpemVy
KQotICAgIHsKLSAgICAgICAgbV9maW5hbGl6ZXJzLmFwcGVuZChmaW5hbGl6ZXIpOwotICAgIH0K
K2NvbnN0IHZvaWQqIERlY29kZXI6OnB0ckZvck9mZnNldEZyb21CYXNlKHB0cmRpZmZfdCBvZmZz
ZXQpCit7CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVChvZmZzZXQgPiAwICYmIHN0YXRpY19j
YXN0PHNpemVfdD4ob2Zmc2V0KSA8IG1fc2l6ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbV9iYXNl
QWRkcmVzcyArIG9mZnNldDsKK30KIAotICAgIENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlIGhh
bmRsZUZvckVudmlyb25tZW50KENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50KiBlbnZpcm9ubWVu
dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGF1dG8gaXQgPSBtX2Vudmlyb25tZW50VG9IYW5kbGVN
YXAuZmluZChlbnZpcm9ubWVudCk7Ci0gICAgICAgIEFTU0VSVChpdCAhPSBtX2Vudmlyb25tZW50
VG9IYW5kbGVNYXAuZW5kKCkpOwotICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwotICAgIH0KK0Nv
bXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlIERlY29kZXI6OmhhbmRsZUZvckVudmlyb25tZW50KENv
bXBhY3RWYXJpYWJsZUVudmlyb25tZW50KiBlbnZpcm9ubWVudCkgY29uc3QKK3sKKyAgICBhdXRv
IGl0ID0gbV9lbnZpcm9ubWVudFRvSGFuZGxlTWFwLmZpbmQoZW52aXJvbm1lbnQpOworICAgIEFT
U0VSVChpdCAhPSBtX2Vudmlyb25tZW50VG9IYW5kbGVNYXAuZW5kKCkpOworICAgIHJldHVybiBp
dC0+dmFsdWU7Cit9CiAKLSAgICB2b2lkIHNldEhhbmRsZUZvckVudmlyb25tZW50KENvbXBhY3RW
YXJpYWJsZUVudmlyb25tZW50KiBlbnZpcm9ubWVudCwgY29uc3QgQ29tcGFjdFZhcmlhYmxlTWFw
OjpIYW5kbGUmIGhhbmRsZSkKLSAgICB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9lbnZp
cm9ubWVudFRvSGFuZGxlTWFwLmFkZChlbnZpcm9ubWVudCwgaGFuZGxlKTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9Cit2b2lk
IERlY29kZXI6OnNldEhhbmRsZUZvckVudmlyb25tZW50KENvbXBhY3RWYXJpYWJsZUVudmlyb25t
ZW50KiBlbnZpcm9ubWVudCwgY29uc3QgQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUmIGhhbmRs
ZSkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZW52aXJvbm1lbnRUb0hhbmRsZU1hcC5hZGQo
ZW52aXJvbm1lbnQsIGhhbmRsZSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKK30KIAotcHJpdmF0ZToKLSAgICBWTSYgbV92bTsKLSAgICBjb25z
dCB1aW50OF90KiBtX2Jhc2VBZGRyZXNzOwotI2lmbmRlZiBOREVCVUcKLSAgICBzaXplX3QgbV9z
aXplOwotI2VuZGlmCi0gICAgSGFzaE1hcDxwdHJkaWZmX3QsIHZvaWQqPiBtX29mZnNldFRvUHRy
TWFwOwotICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fZmluYWxpemVyczsKLSAg
ICBIYXNoTWFwPENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50KiwgQ29tcGFjdFZhcmlhYmxlTWFw
OjpIYW5kbGU+IG1fZW52aXJvbm1lbnRUb0hhbmRsZU1hcDsKLX07Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgordm9pZCBEZWNvZGVyOjphZGRGaW5hbGl6ZXIoY29uc3QgRnVuY3RvciYgZm4p
Cit7CisgICAgbV9maW5hbGl6ZXJzLmFwcGVuZChmbik7Cit9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiBzdGF0aWMgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8VCwgU291cmNlVHlwZTxU
Pj46OnZhbHVlPiBlbmNvZGUoRW5jb2RlciYsIFQmIGRzdCwgY29uc3QgU291cmNlVHlwZTxUPiYg
c3JjKQpAQCAtMzQ1LDYgKzM0MCwxMiBAQCBjbGFzcyBWYXJpYWJsZUxlbmd0aE9iamVjdCA6IHB1
YmxpYyBDYWNoZWRPYmplY3Q8U291cmNlPiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVu
YW1lPgogICAgIGZyaWVuZCBzdHJ1Y3QgQ2FjaGVkUHRyOwogCitwdWJsaWM6CisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBzX2ludmFs
aWRPZmZzZXQ7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgY29uc3QgdWludDhfdCogYnVmZmVy
KCkgY29uc3QKICAgICB7CkBAIC0zNzMsMTEgKzM3NCw2IEBAIHByb3RlY3RlZDoKICAgICAgICAg
cmV0dXJuIG5ldyAocmVzdWx0KSBUW3NpemVdOwogICAgIH0KIAotICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gc19pbnZhbGlkT2Zmc2V0
OwotICAgIH0KLQogcHJpdmF0ZToKICAgICBjb25zdGV4cHIgc3RhdGljIHB0cmRpZmZfdCBzX2lu
dmFsaWRPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHB0cmRpZmZfdD46Om1heCgpOwogCkBA
IC00ODQsNiArNDgwLDggQEAgcHJpdmF0ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFNvdXJjZSA9IFNvdXJjZVR5cGU8VD4+CiBjbGFzcyBDYWNoZWRXcml0ZUJhcnJpZXIgOiBwdWJs
aWMgQ2FjaGVkT2JqZWN0PFdyaXRlQmFycmllcjxTb3VyY2U+PiB7CiBwdWJsaWM6CisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9wdHIuaXNFbXB0eSgpOyB9CisKICAgICB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXcml0ZUJhcnJpZXI8U291cmNlPiBzcmMp
CiAgICAgewogICAgICAgICBtX3B0ci5lbmNvZGUoZW5jb2Rlciwgc3JjLmdldCgpKTsKQEAgLTE1
NzQsNiArMTU3Miw5IEBAIHB1YmxpYzoKIAogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpSYXJlRGF0YSogcmFyZURhdGEoRGVjb2RlciYgZGVjb2RlcikgY29uc3QgeyByZXR1cm4gbV9y
YXJlRGF0YS5kZWNvZGVBc1B0cihkZWNvZGVyKTsgfQogCisgICAgY29uc3QgQ2FjaGVkV3JpdGVC
YXJyaWVyPENhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
PiYgdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGVCbG9ja0ZvckNhbGw7IH0KKyAgICBjb25zdCBDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVu
Y3Rpb25Db2RlQmxvY2ssIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+JiB1bmxpbmtlZENvZGVC
bG9ja0ZvckNvbnN0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JD
b25zdHJ1Y3Q7IH0KKwogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZU9mZnNldDsK
ICAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKQEAgLTE5NjgsOSArMTk2OSw2IEBAIEFMV0FZU19J
TkxJTkUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENhY2hlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6ZGVjb2RlKERlY29kCiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZT4oZGVjb2Rlci52bSgpLmhlYXApKSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShkZWNvZGVy
LCBXVEZNb3ZlKGVudiksICp0aGlzKTsKICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihk
ZWNvZGVyLnZtKCkpOwogCi0gICAgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwuZGVjb2RlKGRl
Y29kZXIsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLCBleGVjdXRhYmxl
KTsKLSAgICBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LmRlY29kZShkZWNvZGVyLCBl
eGVjdXRhYmxlLT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LCBleGVjdXRhYmxlKTsK
LQogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCkBAIC0xOTk5LDYgKzE5OTcsOSBAQCBBTFdB
WVNfSU5MSU5FIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZShEZWNvZGVyJiBkZQogICAgICwgbV9zY3JpcHRNb2RlKGNhY2hlZEV4ZWN1dGFibGUu
c2NyaXB0TW9kZSgpKQogICAgICwgbV9zdXBlckJpbmRpbmcoY2FjaGVkRXhlY3V0YWJsZS5zdXBl
ckJpbmRpbmcoKSkKICAgICAsIG1fZGVyaXZlZENvbnRleHRUeXBlKGNhY2hlZEV4ZWN1dGFibGUu
ZGVyaXZlZENvbnRleHRUeXBlKCkpCisgICAgLCBtX2lzQ2FjaGVkKGZhbHNlKQorICAgICwgbV91
bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwoKQorICAgICwgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNv
bnN0cnVjdCgpCiAKICAgICAsIG1fbmFtZShjYWNoZWRFeGVjdXRhYmxlLm5hbWUoZGVjb2Rlcikp
CiAgICAgLCBtX2VjbWFOYW1lKGNhY2hlZEV4ZWN1dGFibGUuZWNtYU5hbWUoZGVjb2RlcikpCkBA
IC0yMDA4LDYgKzIwMDksMTUgQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoRGVjb2RlciYgZGUKIAogICAgICwgbV9y
YXJlRGF0YShjYWNoZWRFeGVjdXRhYmxlLnJhcmVEYXRhKGRlY29kZXIpKQogeworCisgICAgaWYg
KCFjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCgpLmlzRW1wdHkoKSB8
fCAhY2FjaGVkRXhlY3V0YWJsZS51bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCgpLmlzRW1w
dHkoKSkgeworICAgICAgICBtX2lzQ2FjaGVkID0gdHJ1ZTsKKyAgICAgICAgbV9kZWNvZGVyID0g
JmRlY29kZXI7CisgICAgICAgIGlmICghY2FjaGVkRXhlY3V0YWJsZS51bmxpbmtlZENvZGVCbG9j
a0ZvckNhbGwoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2NhY2hlZENvZGVCbG9ja0ZvckNh
bGxPZmZzZXQgPSBkZWNvZGVyLm9mZnNldE9mKCZjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkQ29k
ZUJsb2NrRm9yQ2FsbCgpKTsKKyAgICAgICAgaWYgKCFjYWNoZWRFeGVjdXRhYmxlLnVubGlua2Vk
Q29kZUJsb2NrRm9yQ29uc3RydWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9jYWNoZWRD
b2RlQmxvY2tGb3JDb25zdHJ1Y3RPZmZzZXQgPSBkZWNvZGVyLm9mZnNldE9mKCZjYWNoZWRFeGVj
dXRhYmxlLnVubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkpOworICAgIH0KIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KQEAgLTIyMTgsMTEgKzIyMjgsMTEgQEAgc3Rk
OjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2RlQmxvY2soVk0mIHZt
LCBjb25zdCBTb3VyY2VDb2RlS2UKIFVubGlua2VkQ29kZUJsb2NrKiBkZWNvZGVDb2RlQmxvY2tJ
bXBsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIs
IHNpemVfdCBzaXplKQogewogICAgIGNvbnN0IGF1dG8qIGNhY2hlZEVudHJ5ID0gYml0d2lzZV9j
YXN0PGNvbnN0IEdlbmVyaWNDYWNoZUVudHJ5Kj4oYnVmZmVyKTsKLSAgICBEZWNvZGVyIGRlY29k
ZXIodm0sIGJ1ZmZlciwgc2l6ZSk7CisgICAgUmVmPERlY29kZXI+IGRlY29kZXIgPSBEZWNvZGVy
OjpjcmVhdGUodm0sIGJ1ZmZlciwgc2l6ZSk7CiAgICAgc3RkOjpwYWlyPFNvdXJjZUNvZGVLZXks
IFVubGlua2VkQ29kZUJsb2NrKj4gZW50cnk7CiAgICAgewogICAgICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7Ci0gICAgICAgIGlmICghY2FjaGVkRW50cnktPmRlY29kZShkZWNvZGVyLCBl
bnRyeSkpCisgICAgICAgIGlmICghY2FjaGVkRW50cnktPmRlY29kZShkZWNvZGVyLmdldCgpLCBl
bnRyeSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTIyMzgsOCAr
MjI0OCwxNSBAQCBib29sIGlzQ2FjaGVkQnl0ZWNvZGVTdGlsbFZhbGlkKFZNJiB2bSwgY29uc3Qg
Q2FjaGVkQnl0ZWNvZGUmIGNhY2hlZEJ5dGVjb2RlLCBjbwogICAgIGlmICghc2l6ZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGNvbnN0IGF1dG8qIGNhY2hlZEVudHJ5ID0gYml0d2lzZV9j
YXN0PGNvbnN0IEdlbmVyaWNDYWNoZUVudHJ5Kj4oYnVmZmVyKTsKLSAgICBEZWNvZGVyIGRlY29k
ZXIodm0sIGJ1ZmZlciwgc2l6ZSk7Ci0gICAgcmV0dXJuIGNhY2hlZEVudHJ5LT5pc1N0aWxsVmFs
aWQoZGVjb2Rlciwga2V5LCB0YWdGcm9tU291cmNlQ29kZVR5cGUodHlwZSkpOworICAgIFJlZjxE
ZWNvZGVyPiBkZWNvZGVyID0gRGVjb2Rlcjo6Y3JlYXRlKHZtLCBidWZmZXIsIHNpemUpOworICAg
IHJldHVybiBjYWNoZWRFbnRyeS0+aXNTdGlsbFZhbGlkKGRlY29kZXIuZ2V0KCksIGtleSwgdGFn
RnJvbVNvdXJjZUNvZGVUeXBlKHR5cGUpKTsKK30KKwordm9pZCBkZWNvZGVGdW5jdGlvbkNvZGVC
bG9jayhEZWNvZGVyJiBkZWNvZGVyLCBpbnQzMl90IGNhY2hlZEZ1bmN0aW9uQ29kZUJsb2NrT2Zm
c2V0LCBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9jaywg
Y29uc3QgSlNDZWxsKiBvd25lcikKK3sKKyAgICBBU1NFUlQoZGVjb2Rlci52bSgpLmhlYXAuaXNE
ZWZlcnJlZCgpKTsKKyAgICBhdXRvKiBjYWNoZWRDb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxjb25z
dCBDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2s+Kj4oZGVjb2Rlci5wdHJGb3JPZmZzZXRGcm9tQmFzZShjYWNoZWRGdW5j
dGlvbkNvZGVCbG9ja09mZnNldCkpOworICAgIGNhY2hlZENvZGVCbG9jay0+ZGVjb2RlKGRlY29k
ZXIsIGNvZGVCbG9jaywgb3duZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCmluZGV4IDdlOTJkNTUyY2EwMjkx
ZDU0MDkxYzVhYmUxNmZkMDk2OTY2NTQ1Y2YuLjlkYjNhYmRiODE0ODUyYjgxNDRjOWNhMGFkM2I5
MTViMmY0Y2YyNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlZFR5cGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlw
ZXMuaApAQCAtMjYsNiArMjYsOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJKU0Nhc3Qu
aCIKKyNpbmNsdWRlICJWYXJpYWJsZUVudmlyb25tZW50LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
MzMsMTIgKzM1LDQ4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FjaGVkQnl0ZWNvZGU7CiBj
bGFzcyBTb3VyY2VDb2RlS2V5OwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CitjbGFzcyBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrOworCitjbGFzcyBEZWNvZGVyIDogcHVibGljIFJlZkNvdW50
ZWQ8RGVjb2Rlcj4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlY29kZXIpOworCitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxEZWNvZGVyPiBjcmVhdGUoVk0mLCBjb25zdCB2b2lkKiwgc2l6
ZV90KTsKKworICAgIH5EZWNvZGVyKCk7CisKKyAgICBWTSYgdm0oKSB7IHJldHVybiBtX3ZtOyB9
CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0T2YoY29uc3Qgdm9pZCopOworICAgIHZvaWQgY2FjaGVP
ZmZzZXQocHRyZGlmZl90LCB2b2lkKik7CisgICAgV1RGOjpPcHRpb25hbDx2b2lkKj4gY2FjaGVk
UHRyRm9yT2Zmc2V0KHB0cmRpZmZfdCk7CisgICAgY29uc3Qgdm9pZCogcHRyRm9yT2Zmc2V0RnJv
bUJhc2UocHRyZGlmZl90KTsKKyAgICBDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZSBoYW5kbGVG
b3JFbnZpcm9ubWVudChDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCopIGNvbnN0OworICAgIHZv
aWQgc2V0SGFuZGxlRm9yRW52aXJvbm1lbnQoQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQqLCBj
b25zdCBDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZSYpOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGFkZEZpbmFsaXplcihjb25zdCBGdW5jdG9yJik7CisKK3By
aXZhdGU6CisgICAgRGVjb2RlcihWTSYsIGNvbnN0IHZvaWQqLCBzaXplX3QpOworCisgICAgVk0m
IG1fdm07CisgICAgY29uc3QgdWludDhfdCogbV9iYXNlQWRkcmVzczsKKyNpZm5kZWYgTkRFQlVH
CisgICAgc2l6ZV90IG1fc2l6ZTsKKyNlbmRpZgorICAgIEhhc2hNYXA8cHRyZGlmZl90LCB2b2lk
Kj4gbV9vZmZzZXRUb1B0ck1hcDsKKyAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBt
X2ZpbmFsaXplcnM7CisgICAgSGFzaE1hcDxDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCosIENv
bXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlPiBtX2Vudmlyb25tZW50VG9IYW5kbGVNYXA7Cit9Owog
CiBlbnVtIGNsYXNzIFNvdXJjZUNvZGVUeXBlOwogCiBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4
X3Q+LCBzaXplX3Q+IGVuY29kZUNvZGVCbG9jayhWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmLCBj
b25zdCBVbmxpbmtlZENvZGVCbG9jayopOworCiBVbmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29k
ZUJsb2NrSW1wbChWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmLCBjb25zdCB2b2lkKiwgc2l6ZV90
KTsKIAordm9pZCBkZWNvZGVGdW5jdGlvbkNvZGVCbG9jayhEZWNvZGVyJiwgaW50MzJfdCBjYWNo
ZWRGdW5jdGlvbkNvZGVCbG9ja09mZnNldCwgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2s+JiwgY29uc3QgSlNDZWxsKik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2Vk
Q29kZUJsb2NrVHlwZT4KIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZGVjb2RlQ29kZUJsb2NrKFZN
JiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVf
dCBzaXplKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363901</attachid>
            <date>2019-03-07 11:05:16 -0800</date>
            <delta_ts>2019-03-07 11:43:49 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-194810-20190307200514.patch</filename>
            <type>text/plain</type>
            <size>19593</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyNjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YWM3YTc2YzE5MmM5YjljZTBjNTRkNzA3NmRkYThlN2VjZWNjMDhhLi42MmU2OWRjOWIwZTdhM2Y0
Yzk3NTI5M2JhOTQ5YzMxMjE1NmM1NjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxOS0wMy0wNCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBMYXppbHkgZGVjb2RlIGNhY2hlZCBieXRlY29kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgTGlrZSBsYXp5IHBhcnNpbmcsIHdlIHNo
b3VsZCBwYXVzZSBhdCBjb2RlIGJsb2NrIGJvdW5kYXJpZXMuIEluc3RlYWQKKyAgICAgICAgb2Yg
YWx3YXlzIGVhZ2VybHkgZGVjb2RpbmcgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUncyBVbmxp
bmtlZENvZGVCbG9ja3MsCisgICAgICAgIHdlIHN0b3JlIHRoZWlyIG9mZnNldHMgaW4gdGhlIGV4
ZWN1dGFibGUgYW5kIGxhemlseSBkZWNvZGUgdGhlbSBvbiB0aGUgbmV4dAorICAgICAgICBjYWxs
IHRvIGB1bmxpbmtlZENvZGVCbG9ja0ZvcmAuCisKKyAgICAgICAgKiBieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp+VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZENvZGVC
bG9ja0Zvcik6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNv
ZGVDYWNoZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwOgorICAgICAg
ICAoSlNDOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6fkRlY29k
ZXIpOgorICAgICAgICAoSlNDOjpEZWNvZGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpEZWNv
ZGVyOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkRlY29kZXI6OmNhY2hlT2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6RGVjb2Rlcjo6cHRyRm9yT2Zmc2V0RnJvbUJhc2UpOgorICAgICAgICAoSlND
OjpEZWNvZGVyOjpoYW5kbGVGb3JFbnZpcm9ubWVudCBjb25zdCk6CisgICAgICAgIChKU0M6OkRl
Y29kZXI6OnNldEhhbmRsZUZvckVudmlyb25tZW50KToKKyAgICAgICAgKEpTQzo6RGVjb2Rlcjo6
YWRkRmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVMZW5ndGhPYmplY3Q6OmlzRW1w
dHkgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRXcml0ZUJhcnJpZXI6OmlzRW1wdHkgY29u
c3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2VkQ29k
ZUJsb2NrRm9yQ2FsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6dW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6
OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6
CisgICAgICAgIChKU0M6OmRlY29kZUNvZGVCbG9ja0ltcGwpOgorICAgICAgICAoSlNDOjppc0Nh
Y2hlZEJ5dGVjb2RlU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OmRlY29kZUZ1bmN0aW9uQ29k
ZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmg6CisgICAgICAgIChKU0M6
OkRlY29kZXI6OnZtKToKKwogMjAxOS0wMy0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgRXhjZXB0aW9uIGlzIGEgSlNDZWxsLCBub3QgYSBKU09iamVjdC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUuY3BwCmluZGV4IGExNDJjMjQwNTVlOWIzYmU0MTJlMzYxNDI4ZGMx
ZmNjYzE2MzkxZDguLjk2MjljNDZhM2Y1YjM3ZTlmNjIxYmY5ZWEyMWM3ZWJiODliYjk0NDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAi
QnVpbHRpbkV4ZWN1dGFibGVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKKyNp
bmNsdWRlICJDYWNoZWRUeXBlcy5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUg
IkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCkBAIC0xMDMsNiArMTA0LDkgQEAg
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3QKICAgICAsIG1fc2NyaXB0TW9kZShzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc2NyaXB0TW9kZSkpCiAgICAgLCBtX3N1cGVyQmluZGluZyhzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obm9kZS0+c3VwZXJCaW5kaW5nKCkpKQogICAgICwgbV9kZXJpdmVkQ29udGV4dFR5
cGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlcml2ZWRDb250ZXh0VHlwZSkpCisgICAgLCBtX2lz
Q2FjaGVkKGZhbHNlKQorICAgICwgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwoKQorICAgICwg
bV91bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdCgpCiAgICAgLCBtX25hbWUobm9kZS0+aWRl
bnQoKSkKICAgICAsIG1fZWNtYU5hbWUobm9kZS0+ZWNtYU5hbWUoKSkKICAgICAsIG1faW5mZXJy
ZWROYW1lKG5vZGUtPmluZmVycmVkTmFtZSgpKQpAQCAtMTIwLDYgKzEyNCwxMiBAQCBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdAogICAgICAgICBzZXRDbGFzc1NvdXJjZShub2RlLT5jbGFzc1NvdXJj
ZSgpKTsKIH0KIAorVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6On5VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSgpCit7CisgICAgaWYgKG1faXNDYWNoZWQpCisgICAgICAgIG1fZGVjb2Rlci5+
UmVmUHRyKCk7Cit9CisKIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKj4oY2VsbCktPn5VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSgpOwpAQCAtMTMwLDggKzE0
MCwxMCBAQCB2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0bwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4o
Y2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwpOwotICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1
Y3QpOworICAgIGlmICghdGhpc09iamVjdC0+bV9pc0NhY2hlZCkgeworICAgICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCk7CisgICAgICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1
Y3QpOworICAgIH0KIH0KIAogU291cmNlQ29kZSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
bGlua2VkU291cmNlQ29kZShjb25zdCBTb3VyY2VDb2RlJiBwYXNzZWRQYXJlbnRTb3VyY2UpIGNv
bnN0CkBAIC0yMTMsNiArMjI1LDggQEAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2VkQ29kZUJsb2NrRm9yKAogICAgIFZNJiB2bSwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxp
emF0aW9uS2luZCwgCiAgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUGFyc2VyRXJyb3Im
IGVycm9yLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKQogeworICAgIGlmIChtX2lzQ2FjaGVk
KQorICAgICAgICBkZWNvZGVDYWNoZWRDb2RlQmxvY2tzKCk7CiAgICAgc3dpdGNoIChzcGVjaWFs
aXphdGlvbktpbmQpIHsKICAgICBjYXNlIENvZGVGb3JDYWxsOgogICAgICAgICBpZiAoVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gbV91bmxpbmtlZENvZGVCbG9ja0ZvckNh
bGwuZ2V0KCkpCkBAIC0yNDQsNiArMjU4LDMxIEBAIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sq
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZENvZGVCbG9ja0ZvcigKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNv
ZGVDYWNoZWRDb2RlQmxvY2tzKCkKK3sKKyAgICBBU1NFUlQobV9pc0NhY2hlZCk7CisgICAgQVNT
RVJUKG1fZGVjb2Rlcik7CisgICAgQVNTRVJUKG1fY2FjaGVkQ29kZUJsb2NrRm9yQ2FsbE9mZnNl
dCB8fCBtX2NhY2hlZENvZGVCbG9ja0ZvckNvbnN0cnVjdE9mZnNldCk7CisKKyAgICBSZWZQdHI8
RGVjb2Rlcj4gZGVjb2RlciA9IFdURk1vdmUobV9kZWNvZGVyKTsKKyAgICBpbnQzMl90IGNhY2hl
ZENvZGVCbG9ja0ZvckNhbGxPZmZzZXQgPSBtX2NhY2hlZENvZGVCbG9ja0ZvckNhbGxPZmZzZXQ7
CisgICAgaW50MzJfdCBjYWNoZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3RPZmZzZXQgPSBtX2NhY2hl
ZENvZGVCbG9ja0ZvckNvbnN0cnVjdE9mZnNldDsKKworICAgIERlZmVyR0MgZGVmZXJHQyhkZWNv
ZGVyLT52bSgpLmhlYXApOworCisgICAgLy8gTm8gbmVlZCB0byBjbGVhciBtX3VubGlua2VkQ29k
ZUJsb2NrRm9yQ2FsbCBoZXJlLCBzaW5jZSB3ZSBtb3ZlZCB0aGUgZGVjb2RlciBvdXQgb2YgdGhl
IHNhbWUgc2xvdAorICAgIGlmIChjYWNoZWRDb2RlQmxvY2tGb3JDYWxsT2Zmc2V0KQorICAgICAg
ICBkZWNvZGVGdW5jdGlvbkNvZGVCbG9jaygqZGVjb2RlciwgY2FjaGVkQ29kZUJsb2NrRm9yQ2Fs
bE9mZnNldCwgbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwsIHRoaXMpOworICAgIGlmIChjYWNo
ZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3RPZmZzZXQpCisgICAgICAgIGRlY29kZUZ1bmN0aW9uQ29k
ZUJsb2NrKCpkZWNvZGVyLCBjYWNoZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3RPZmZzZXQsIG1fdW5s
aW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QsIHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgbV91
bmxpbmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdC5jbGVhcigpOworCisgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICBtX2lzQ2FjaGVkID0gZmFsc2U7CisgICAgZGVjb2Rlci0+dm0oKS5o
ZWFwLndyaXRlQmFycmllcih0aGlzKTsKK30KKwogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OlJhcmVEYXRhJiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZW5zdXJlUmFyZURhdGFTbG93
KCkKIHsKICAgICBBU1NFUlQoIW1fcmFyZURhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAppbmRl
eCBiMGMzMDVlMmY1YjlkMGIzMzg1ODFhYmQ2OWYwOGRlODc3NTNmZTA0Li4zOWE3M2YyNmNmZWE5
MjhmNzRkY2NhYmE1ODBkYjNhYTc1MzQwNDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAt
NzUsNiArNzUsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAK
KyAgICB+VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoKTsKKwogICAgIGNvbnN0IElkZW50aWZp
ZXImIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICBjb25zdCBJZGVudGlmaWVy
JiBlY21hTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWNtYU5hbWU7IH0KICAgICB2b2lkIHNldEVj
bWFOYW1lKGNvbnN0IElkZW50aWZpZXImIG5hbWUpIHsgbV9lY21hTmFtZSA9IG5hbWU7IH0KQEAg
LTE5Myw2ICsxOTUsOCBAQCBwcml2YXRlOgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KFZNKiwgU3RydWN0dXJlKiwgY29uc3QgU291cmNlQ29kZSYsIEZ1bmN0aW9uTWV0YWRhdGFOb2Rl
KiwgVW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIEpTUGFyc2VyU2NyaXB0
TW9kZSwgQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUsICBKU0M6OkRlcml2ZWRDb250ZXh0VHlw
ZSwgYm9vbCBpc0J1aWx0aW5EZWZhdWx0Q2xhc3NDb25zdHJ1Y3Rvcik7CiAgICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUoRGVjb2RlciYsIENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlLCBj
b25zdCBDYWNoZWRGdW5jdGlvbkV4ZWN1dGFibGUmKTsKIAorICAgIHZvaWQgZGVjb2RlQ2FjaGVk
Q29kZUJsb2NrcygpOworCiAgICAgdW5zaWduZWQgbV9maXJzdExpbmVPZmZzZXQ7CiAgICAgdW5z
aWduZWQgbV9saW5lQ291bnQ7CiAgICAgdW5zaWduZWQgbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0
YXJ0OwpAQCAtMjE2LDkgKzIyMCwyMCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2NyaXB0
TW9kZTogMTsgLy8gSlNQYXJzZXJTY3JpcHRNb2RlCiAgICAgdW5zaWduZWQgbV9zdXBlckJpbmRp
bmcgOiAxOwogICAgIHVuc2lnbmVkIG1fZGVyaXZlZENvbnRleHRUeXBlOiAyOworICAgIGJvb2wg
bV9pc0NhY2hlZCA6IDE7CiAKLSAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jaz4gbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGw7Ci0gICAgV3JpdGVCYXJyaWVyPFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7Cisg
ICAgdW5pb24geworICAgICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
az4gbV91bmxpbmtlZENvZGVCbG9ja0ZvckNhbGw7CisgICAgICAgIFJlZlB0cjxEZWNvZGVyPiBt
X2RlY29kZXI7CisgICAgfTsKKworICAgIHVuaW9uIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7
CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBpbnQzMl90IG1fY2FjaGVkQ29kZUJsb2Nr
Rm9yQ2FsbE9mZnNldDsKKyAgICAgICAgICAgIGludDMyX3QgbV9jYWNoZWRDb2RlQmxvY2tGb3JD
b25zdHJ1Y3RPZmZzZXQ7CisgICAgICAgIH07CisgICAgfTsKIAogICAgIElkZW50aWZpZXIgbV9u
YW1lOwogICAgIElkZW50aWZpZXIgbV9lY21hTmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAppbmRleCBlODc0YWI3YjY5NWY0NDQ1NTY3ZTFhMmJh
MzY3MDFjZjRiOTU0OGY5Li4wMzQ0ODY5OWIxM2M0YmNiNjUwZWNlMDI2Y2ExYmY5MTJlNzc0ZTVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBA
IC0yMTEsNzggKzIxMSw3MyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8Y29uc3Qgdm9pZCosIHB0
cmRpZmZfdD4gbV9wdHJUb09mZnNldE1hcDsKIH07CiAKLWNsYXNzIERlY29kZXIgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKERlY29kZXIpOwotICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FU
SU9OOwotCi1wdWJsaWM6Ci0gICAgRGVjb2RlcihWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VBZGRy
ZXNzLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgOiBtX3ZtKHZtKQotICAgICAgICAsIG1fYmFzZUFk
ZHJlc3Moc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJhc2VBZGRyZXNzKSkKK0RlY29kZXI6
OkRlY29kZXIoVk0mIHZtLCBjb25zdCB2b2lkKiBiYXNlQWRkcmVzcywgc2l6ZV90IHNpemUpCisg
ICAgOiBtX3ZtKHZtKQorICAgICwgbV9iYXNlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihiYXNlQWRkcmVzcykpCiAjaWZuZGVmIE5ERUJVRwotICAgICAgICAsIG1fc2l6
ZShzaXplKQorICAgICwgbV9zaXplKHNpemUpCiAjZW5kaWYKLSAgICB7Ci0gICAgICAgIFVOVVNF
RF9QQVJBTShzaXplKTsKLSAgICB9Cit7CisgICAgVU5VU0VEX1BBUkFNKHNpemUpOworfQogCi0g
ICAgfkRlY29kZXIoKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBmaW5hbGl6ZXIgOiBtX2Zp
bmFsaXplcnMpCi0gICAgICAgICAgICBmaW5hbGl6ZXIoKTsKLSAgICB9CitEZWNvZGVyOjp+RGVj
b2RlcigpCit7CisgICAgZm9yIChhdXRvJiBmaW5hbGl6ZXIgOiBtX2ZpbmFsaXplcnMpCisgICAg
ICAgIGZpbmFsaXplcigpOworfQogCi0gICAgVk0mIHZtKCkgeyByZXR1cm4gbV92bTsgfQorUmVm
PERlY29kZXI+IERlY29kZXI6OmNyZWF0ZShWTSYgdm0sIGNvbnN0IHZvaWQqIGJhc2VBZGRyZXNz
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWNvZGVyKHZtLCBi
YXNlQWRkcmVzcywgc2l6ZSkpOworfQogCi0gICAgcHRyZGlmZl90IG9mZnNldE9mKGNvbnN0IHZv
aWQqIHB0cikKLSAgICB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGFkZHIgPSBzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4ocHRyKTsKLSAgICAgICAgQVNTRVJUKGFkZHIgPj0gbV9iYXNlQWRk
cmVzcyAmJiBhZGRyIDwgbV9iYXNlQWRkcmVzcyArIG1fc2l6ZSk7Ci0gICAgICAgIHJldHVybiBh
ZGRyIC0gbV9iYXNlQWRkcmVzczsKLSAgICB9CitwdHJkaWZmX3QgRGVjb2Rlcjo6b2Zmc2V0T2Yo
Y29uc3Qgdm9pZCogcHRyKQoreworICAgIGNvbnN0IHVpbnQ4X3QqIGFkZHIgPSBzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4ocHRyKTsKKyAgICBBU1NFUlQoYWRkciA+PSBtX2Jhc2VBZGRyZXNz
ICYmIGFkZHIgPCBtX2Jhc2VBZGRyZXNzICsgbV9zaXplKTsKKyAgICByZXR1cm4gYWRkciAtIG1f
YmFzZUFkZHJlc3M7Cit9CiAKLSAgICB2b2lkIGNhY2hlT2Zmc2V0KHB0cmRpZmZfdCBvZmZzZXQs
IHZvaWQqIHB0cikKLSAgICB7Ci0gICAgICAgIG1fb2Zmc2V0VG9QdHJNYXAuYWRkKG9mZnNldCwg
cHRyKTsKLSAgICB9Cit2b2lkIERlY29kZXI6OmNhY2hlT2Zmc2V0KHB0cmRpZmZfdCBvZmZzZXQs
IHZvaWQqIHB0cikKK3sKKyAgICBtX29mZnNldFRvUHRyTWFwLmFkZChvZmZzZXQsIHB0cik7Cit9
CiAKLSAgICBPcHRpb25hbDx2b2lkKj4gY2FjaGVkUHRyRm9yT2Zmc2V0KHB0cmRpZmZfdCBvZmZz
ZXQpCi0gICAgewotICAgICAgICBhdXRvIGl0ID0gbV9vZmZzZXRUb1B0ck1hcC5maW5kKG9mZnNl
dCk7Ci0gICAgICAgIGlmIChpdCA9PSBtX29mZnNldFRvUHRyTWFwLmVuZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHsgaXQtPnZhbHVlIH07Ci0g
ICAgfQorV1RGOjpPcHRpb25hbDx2b2lkKj4gRGVjb2Rlcjo6Y2FjaGVkUHRyRm9yT2Zmc2V0KHB0
cmRpZmZfdCBvZmZzZXQpCit7CisgICAgYXV0byBpdCA9IG1fb2Zmc2V0VG9QdHJNYXAuZmluZChv
ZmZzZXQpOworICAgIGlmIChpdCA9PSBtX29mZnNldFRvUHRyTWFwLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IGl0LT52YWx1ZSB9OworfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGFkZEZpbmFsaXplcihjb25zdCBG
dW5jdG9yJiBmaW5hbGl6ZXIpCi0gICAgewotICAgICAgICBtX2ZpbmFsaXplcnMuYXBwZW5kKGZp
bmFsaXplcik7Ci0gICAgfQorY29uc3Qgdm9pZCogRGVjb2Rlcjo6cHRyRm9yT2Zmc2V0RnJvbUJh
c2UocHRyZGlmZl90IG9mZnNldCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKG9mZnNl
dCA+IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihvZmZzZXQpIDwgbV9zaXplKTsKKyNlbmRpZgor
ICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzICsgb2Zmc2V0OworfQogCi0gICAgQ29tcGFjdFZhcmlh
YmxlTWFwOjpIYW5kbGUgaGFuZGxlRm9yRW52aXJvbm1lbnQoQ29tcGFjdFZhcmlhYmxlRW52aXJv
bm1lbnQqIGVudmlyb25tZW50KSBjb25zdAotICAgIHsKLSAgICAgICAgYXV0byBpdCA9IG1fZW52
aXJvbm1lbnRUb0hhbmRsZU1hcC5maW5kKGVudmlyb25tZW50KTsKLSAgICAgICAgQVNTRVJUKGl0
ICE9IG1fZW52aXJvbm1lbnRUb0hhbmRsZU1hcC5lbmQoKSk7Ci0gICAgICAgIHJldHVybiBpdC0+
dmFsdWU7Ci0gICAgfQorQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUgRGVjb2Rlcjo6aGFuZGxl
Rm9yRW52aXJvbm1lbnQoQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQqIGVudmlyb25tZW50KSBj
b25zdAoreworICAgIGF1dG8gaXQgPSBtX2Vudmlyb25tZW50VG9IYW5kbGVNYXAuZmluZChlbnZp
cm9ubWVudCk7CisgICAgQVNTRVJUKGl0ICE9IG1fZW52aXJvbm1lbnRUb0hhbmRsZU1hcC5lbmQo
KSk7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKK30KIAotICAgIHZvaWQgc2V0SGFuZGxlRm9yRW52
aXJvbm1lbnQoQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQqIGVudmlyb25tZW50LCBjb25zdCBD
b21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZSYgaGFuZGxlKQotICAgIHsKLSAgICAgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX2Vudmlyb25tZW50VG9IYW5kbGVNYXAuYWRkKGVudmlyb25tZW50LCBoYW5k
bGUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50
cnkpOwotICAgIH0KK3ZvaWQgRGVjb2Rlcjo6c2V0SGFuZGxlRm9yRW52aXJvbm1lbnQoQ29tcGFj
dFZhcmlhYmxlRW52aXJvbm1lbnQqIGVudmlyb25tZW50LCBjb25zdCBDb21wYWN0VmFyaWFibGVN
YXA6OkhhbmRsZSYgaGFuZGxlKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9lbnZpcm9ubWVu
dFRvSGFuZGxlTWFwLmFkZChlbnZpcm9ubWVudCwgaGFuZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworfQogCi1wcml2YXRlOgotICAgIFZN
JiBtX3ZtOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYmFzZUFkZHJlc3M7Ci0jaWZuZGVmIE5ERUJV
RwotICAgIHNpemVfdCBtX3NpemU7Ci0jZW5kaWYKLSAgICBIYXNoTWFwPHB0cmRpZmZfdCwgdm9p
ZCo+IG1fb2Zmc2V0VG9QdHJNYXA7Ci0gICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4g
bV9maW5hbGl6ZXJzOwotICAgIEhhc2hNYXA8Q29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQqLCBD
b21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZT4gbV9lbnZpcm9ubWVudFRvSGFuZGxlTWFwOwotfTsK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIERlY29kZXI6OmFkZEZpbmFsaXplcihj
b25zdCBGdW5jdG9yJiBmbikKK3sKKyAgICBtX2ZpbmFsaXplcnMuYXBwZW5kKGZuKTsKK30KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KIHN0YXRpYyBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2Ft
ZTxULCBTb3VyY2VUeXBlPFQ+Pjo6dmFsdWU+IGVuY29kZShFbmNvZGVyJiwgVCYgZHN0LCBjb25z
dCBTb3VyY2VUeXBlPFQ+JiBzcmMpCkBAIC0zNDUsNiArMzQwLDEyIEBAIGNsYXNzIFZhcmlhYmxl
TGVuZ3RoT2JqZWN0IDogcHVibGljIENhY2hlZE9iamVjdDxTb3VyY2U+IHsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSwgdHlwZW5hbWU+CiAgICAgZnJpZW5kIHN0cnVjdCBDYWNoZWRQdHI7CiAKK3B1
YmxpYzoKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0ID09IHNfaW52YWxpZE9mZnNldDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBjb25z
dCB1aW50OF90KiBidWZmZXIoKSBjb25zdAogICAgIHsKQEAgLTM3MywxMSArMzc0LDYgQEAgcHJv
dGVjdGVkOgogICAgICAgICByZXR1cm4gbmV3IChyZXN1bHQpIFRbc2l6ZV07CiAgICAgfQogCi0g
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29mZnNldCA9
PSBzX2ludmFsaWRPZmZzZXQ7Ci0gICAgfQotCiBwcml2YXRlOgogICAgIGNvbnN0ZXhwciBzdGF0
aWMgcHRyZGlmZl90IHNfaW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8cHRyZGlm
Zl90Pjo6bWF4KCk7CiAKQEAgLTQ4NCw2ICs0ODAsOCBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgU291cmNlID0gU291cmNlVHlwZTxUPj4KIGNsYXNzIENhY2hlZFdy
aXRlQmFycmllciA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8V3JpdGVCYXJyaWVyPFNvdXJjZT4+IHsK
IHB1YmxpYzoKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3B0ci5pc0VtcHR5
KCk7IH0KKwogICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdyaXRlQmFy
cmllcjxTb3VyY2U+IHNyYykKICAgICB7CiAgICAgICAgIG1fcHRyLmVuY29kZShlbmNvZGVyLCBz
cmMuZ2V0KCkpOwpAQCAtMTU3NCw2ICsxNTcyLDkgQEAgcHVibGljOgogCiAgICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OlJhcmVEYXRhKiByYXJlRGF0YShEZWNvZGVyJiBkZWNvZGVyKSBj
b25zdCB7IHJldHVybiBtX3JhcmVEYXRhLmRlY29kZUFzUHRyKGRlY29kZXIpOyB9CiAKKyAgICBj
b25zdCBDYWNoZWRXcml0ZUJhcnJpZXI8Q2FjaGVkRnVuY3Rpb25Db2RlQmxvY2ssIFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2s+JiB1bmxpbmtlZENvZGVCbG9ja0ZvckNhbGwoKSBjb25zdCB7IHJl
dHVybiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbDsgfQorICAgIGNvbnN0IENhY2hlZFdyaXRl
QmFycmllcjxDYWNoZWRGdW5jdGlvbkNvZGVCbG9jaywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
az4mIHVubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgY29uc3QgeyByZXR1cm4gbV91bmxp
bmtlZENvZGVCbG9ja0ZvckNvbnN0cnVjdDsgfQorCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1f
Zmlyc3RMaW5lT2Zmc2V0OwogICAgIHVuc2lnbmVkIG1fbGluZUNvdW50OwpAQCAtMTk2OCw5ICsx
OTY5LDYgQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQ2FjaGVk
RnVuY3Rpb25FeGVjdXRhYmxlOjpkZWNvZGUoRGVjb2QKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlPihkZWNvZGVyLnZtKCkuaGVhcCkpIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKGRlY29kZXIsIFdURk1vdmUoZW52KSwgKnRoaXMpOwogICAgIGV4ZWN1dGFibGUt
PmZpbmlzaENyZWF0aW9uKGRlY29kZXIudm0oKSk7CiAKLSAgICBtX3VubGlua2VkQ29kZUJsb2Nr
Rm9yQ2FsbC5kZWNvZGUoZGVjb2RlciwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZENvZGVCbG9ja0Zv
ckNhbGwsIGV4ZWN1dGFibGUpOwotICAgIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3Qu
ZGVjb2RlKGRlY29kZXIsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1
Y3QsIGV4ZWN1dGFibGUpOwotCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CiAKQEAgLTE5OTks
NiArMTk5Nyw5IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKERlY29kZXImIGRlCiAgICAgLCBtX3NjcmlwdE1vZGUo
Y2FjaGVkRXhlY3V0YWJsZS5zY3JpcHRNb2RlKCkpCiAgICAgLCBtX3N1cGVyQmluZGluZyhjYWNo
ZWRFeGVjdXRhYmxlLnN1cGVyQmluZGluZygpKQogICAgICwgbV9kZXJpdmVkQ29udGV4dFR5cGUo
Y2FjaGVkRXhlY3V0YWJsZS5kZXJpdmVkQ29udGV4dFR5cGUoKSkKKyAgICAsIG1faXNDYWNoZWQo
ZmFsc2UpCisgICAgLCBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCgpCisgICAgLCBtX3VubGlu
a2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkKIAogICAgICwgbV9uYW1lKGNhY2hlZEV4ZWN1dGFi
bGUubmFtZShkZWNvZGVyKSkKICAgICAsIG1fZWNtYU5hbWUoY2FjaGVkRXhlY3V0YWJsZS5lY21h
TmFtZShkZWNvZGVyKSkKQEAgLTIwMDgsNiArMjAwOSwxOSBAQCBBTFdBWVNfSU5MSU5FIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShEZWNvZGVy
JiBkZQogCiAgICAgLCBtX3JhcmVEYXRhKGNhY2hlZEV4ZWN1dGFibGUucmFyZURhdGEoZGVjb2Rl
cikpCiB7CisKKyAgICBpZiAoIWNhY2hlZEV4ZWN1dGFibGUudW5saW5rZWRDb2RlQmxvY2tGb3JD
YWxsKCkuaXNFbXB0eSgpIHx8ICFjYWNoZWRFeGVjdXRhYmxlLnVubGlua2VkQ29kZUJsb2NrRm9y
Q29uc3RydWN0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIG1faXNDYWNoZWQgPSB0cnVlOworICAg
ICAgICBtX2RlY29kZXIgPSAmZGVjb2RlcjsKKyAgICAgICAgaWYgKCFjYWNoZWRFeGVjdXRhYmxl
LnVubGlua2VkQ29kZUJsb2NrRm9yQ2FsbCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fY2Fj
aGVkQ29kZUJsb2NrRm9yQ2FsbE9mZnNldCA9IGRlY29kZXIub2Zmc2V0T2YoJmNhY2hlZEV4ZWN1
dGFibGUudW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsKCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX2NhY2hlZENvZGVCbG9ja0ZvckNhbGxPZmZzZXQgPSAwOworICAgICAgICBpZiAoIWNh
Y2hlZEV4ZWN1dGFibGUudW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKS5pc0VtcHR5KCkp
CisgICAgICAgICAgICBtX2NhY2hlZENvZGVCbG9ja0ZvckNvbnN0cnVjdE9mZnNldCA9IGRlY29k
ZXIub2Zmc2V0T2YoJmNhY2hlZEV4ZWN1dGFibGUudW5saW5rZWRDb2RlQmxvY2tGb3JDb25zdHJ1
Y3QoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY2FjaGVkQ29kZUJsb2NrRm9yQ29u
c3RydWN0T2Zmc2V0ID0gMDsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGU+CkBAIC0yMjE4LDExICsyMjMyLDExIEBAIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhf
dD4sIHNpemVfdD4gZW5jb2RlQ29kZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtlCiBV
bmxpbmtlZENvZGVCbG9jayogZGVjb2RlQ29kZUJsb2NrSW1wbChWTSYgdm0sIGNvbnN0IFNvdXJj
ZUNvZGVLZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBj
b25zdCBhdXRvKiBjYWNoZWRFbnRyeSA9IGJpdHdpc2VfY2FzdDxjb25zdCBHZW5lcmljQ2FjaGVF
bnRyeSo+KGJ1ZmZlcik7Ci0gICAgRGVjb2RlciBkZWNvZGVyKHZtLCBidWZmZXIsIHNpemUpOwor
ICAgIFJlZjxEZWNvZGVyPiBkZWNvZGVyID0gRGVjb2Rlcjo6Y3JlYXRlKHZtLCBidWZmZXIsIHNp
emUpOwogICAgIHN0ZDo6cGFpcjxTb3VyY2VDb2RlS2V5LCBVbmxpbmtlZENvZGVCbG9jayo+IGVu
dHJ5OwogICAgIHsKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgICAgICBp
ZiAoIWNhY2hlZEVudHJ5LT5kZWNvZGUoZGVjb2RlciwgZW50cnkpKQorICAgICAgICBpZiAoIWNh
Y2hlZEVudHJ5LT5kZWNvZGUoZGVjb2Rlci5nZXQoKSwgZW50cnkpKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0yMjM4LDggKzIyNTIsMTUgQEAgYm9vbCBpc0NhY2hl
ZEJ5dGVjb2RlU3RpbGxWYWxpZChWTSYgdm0sIGNvbnN0IENhY2hlZEJ5dGVjb2RlJiBjYWNoZWRC
eXRlY29kZSwgY28KICAgICBpZiAoIXNpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBj
b25zdCBhdXRvKiBjYWNoZWRFbnRyeSA9IGJpdHdpc2VfY2FzdDxjb25zdCBHZW5lcmljQ2FjaGVF
bnRyeSo+KGJ1ZmZlcik7Ci0gICAgRGVjb2RlciBkZWNvZGVyKHZtLCBidWZmZXIsIHNpemUpOwot
ICAgIHJldHVybiBjYWNoZWRFbnRyeS0+aXNTdGlsbFZhbGlkKGRlY29kZXIsIGtleSwgdGFnRnJv
bVNvdXJjZUNvZGVUeXBlKHR5cGUpKTsKKyAgICBSZWY8RGVjb2Rlcj4gZGVjb2RlciA9IERlY29k
ZXI6OmNyZWF0ZSh2bSwgYnVmZmVyLCBzaXplKTsKKyAgICByZXR1cm4gY2FjaGVkRW50cnktPmlz
U3RpbGxWYWxpZChkZWNvZGVyLmdldCgpLCBrZXksIHRhZ0Zyb21Tb3VyY2VDb2RlVHlwZSh0eXBl
KSk7Cit9CisKK3ZvaWQgZGVjb2RlRnVuY3Rpb25Db2RlQmxvY2soRGVjb2RlciYgZGVjb2Rlciwg
aW50MzJfdCBjYWNoZWRGdW5jdGlvbkNvZGVCbG9ja09mZnNldCwgV3JpdGVCYXJyaWVyPFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2ssIGNvbnN0IEpTQ2VsbCogb3duZXIpCit7
CisgICAgQVNTRVJUKGRlY29kZXIudm0oKS5oZWFwLmlzRGVmZXJyZWQoKSk7CisgICAgYXV0byog
Y2FjaGVkQ29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ2FjaGVkV3JpdGVCYXJyaWVyPENh
Y2hlZEZ1bmN0aW9uQ29kZUJsb2NrLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPio+KGRlY29k
ZXIucHRyRm9yT2Zmc2V0RnJvbUJhc2UoY2FjaGVkRnVuY3Rpb25Db2RlQmxvY2tPZmZzZXQpKTsK
KyAgICBjYWNoZWRDb2RlQmxvY2stPmRlY29kZShkZWNvZGVyLCBjb2RlQmxvY2ssIG93bmVyKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWRUeXBlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVkVHlwZXMuaAppbmRleCA3ZTkyZDU1MmNhMDI5MWQ1NDA5MWM1YWJlMTZmZDA5Njk2NjU0
NWNmLi45ZGIzYWJkYjgxNDg1MmI4MTQ0YzljYTBhZDNiOTE1YjJmNGNmMjZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmgKQEAgLTI2LDYgKzI2LDggQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisjaW5jbHVkZSAiVmFyaWFibGVF
bnZpcm9ubWVudC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01h
bGxvY1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMzLDEyICszNSw0OCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIGNsYXNzIENhY2hlZEJ5dGVjb2RlOwogY2xhc3MgU291cmNlQ29kZUtleTsKIGNs
YXNzIFVubGlua2VkQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsK
KworY2xhc3MgRGVjb2RlciA6IHB1YmxpYyBSZWZDb3VudGVkPERlY29kZXI+IHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEZWNvZGVyKTsKKworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RGVj
b2Rlcj4gY3JlYXRlKFZNJiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CisKKyAgICB+RGVjb2Rlcigp
OworCisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV92bTsgfQorCisgICAgcHRyZGlmZl90IG9mZnNl
dE9mKGNvbnN0IHZvaWQqKTsKKyAgICB2b2lkIGNhY2hlT2Zmc2V0KHB0cmRpZmZfdCwgdm9pZCop
OworICAgIFdURjo6T3B0aW9uYWw8dm9pZCo+IGNhY2hlZFB0ckZvck9mZnNldChwdHJkaWZmX3Qp
OworICAgIGNvbnN0IHZvaWQqIHB0ckZvck9mZnNldEZyb21CYXNlKHB0cmRpZmZfdCk7CisgICAg
Q29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUgaGFuZGxlRm9yRW52aXJvbm1lbnQoQ29tcGFjdFZh
cmlhYmxlRW52aXJvbm1lbnQqKSBjb25zdDsKKyAgICB2b2lkIHNldEhhbmRsZUZvckVudmlyb25t
ZW50KENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50KiwgY29uc3QgQ29tcGFjdFZhcmlhYmxlTWFw
OjpIYW5kbGUmKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBh
ZGRGaW5hbGl6ZXIoY29uc3QgRnVuY3RvciYpOworCitwcml2YXRlOgorICAgIERlY29kZXIoVk0m
LCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKKworICAgIFZNJiBtX3ZtOworICAgIGNvbnN0IHVpbnQ4
X3QqIG1fYmFzZUFkZHJlc3M7CisjaWZuZGVmIE5ERUJVRworICAgIHNpemVfdCBtX3NpemU7Cisj
ZW5kaWYKKyAgICBIYXNoTWFwPHB0cmRpZmZfdCwgdm9pZCo+IG1fb2Zmc2V0VG9QdHJNYXA7Cisg
ICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9maW5hbGl6ZXJzOworICAgIEhhc2hN
YXA8Q29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQqLCBDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRs
ZT4gbV9lbnZpcm9ubWVudFRvSGFuZGxlTWFwOworfTsKIAogZW51bSBjbGFzcyBTb3VyY2VDb2Rl
VHlwZTsKIAogc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBlbmNvZGVDb2Rl
QmxvY2soVk0mLCBjb25zdCBTb3VyY2VDb2RlS2V5JiwgY29uc3QgVW5saW5rZWRDb2RlQmxvY2sq
KTsKKwogVW5saW5rZWRDb2RlQmxvY2sqIGRlY29kZUNvZGVCbG9ja0ltcGwoVk0mLCBjb25zdCBT
b3VyY2VDb2RlS2V5JiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CiAKK3ZvaWQgZGVjb2RlRnVuY3Rp
b25Db2RlQmxvY2soRGVjb2RlciYsIGludDMyX3QgY2FjaGVkRnVuY3Rpb25Db2RlQmxvY2tPZmZz
ZXQsIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiYsIGNvbnN0IEpTQ2Vs
bCopOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CiBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqIGRlY29kZUNvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVL
ZXkmIGtleSwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>