<?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>170102</bug_id>
          
          <creation_ts>2017-03-25 14:40:18 -0700</creation_ts>
          <short_desc>Air::Liveness shouldn&apos;t need HashSets</short_desc>
          <delta_ts>2017-04-19 14:32:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>171010</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1291261</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-25 14:40:18 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291262</commentid>
    <comment_count>1</comment_count>
      <attachid>305400</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-25 14:46:54 -0700</bug_when>
    <thetext>Created attachment 305400
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291271</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-25 15:45:21 -0700</bug_when>
    <thetext>It works, but it looks like a slow-down!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291289</commentid>
    <comment_count>3</comment_count>
      <attachid>305410</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-25 19:13:32 -0700</bug_when>
    <thetext>Created attachment 305410
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291290</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-25 19:14:49 -0700</bug_when>
    <thetext>Attachment 305410 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3TimingScope.cpp:60:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/Vector.h:1516:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291291</commentid>
    <comment_count>5</comment_count>
      <attachid>305411</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-25 19:15:40 -0700</bug_when>
    <thetext>Created attachment 305411
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291292</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-25 19:17:38 -0700</bug_when>
    <thetext>Attachment 305411 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3TimingScope.cpp:60:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/Vector.h:1516:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291357</commentid>
    <comment_count>7</comment_count>
      <attachid>305435</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-26 13:34:05 -0700</bug_when>
    <thetext>Created attachment 305435
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291359</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-26 13:37:24 -0700</bug_when>
    <thetext>Attachment 305435 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3TimingScope.cpp:60:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/Vector.h:1516:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291367</commentid>
    <comment_count>9</comment_count>
      <attachid>305435</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-26 15:01:47 -0700</bug_when>
    <thetext>Comment on attachment 305435
the patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        compile time progression on WasmBench.

Cool.

&gt; Source/JavaScriptCore/b3/air/AirLiveness.h:133
&gt;              dirtyBlocks.set(blockIndex);

Cool.

&gt; Source/JavaScriptCore/b3/air/AirLiveness.h:188
&gt; +                        liveAtTail = m_workset.values();

OK, m_workset.values() is already sorted.

&gt; Source/JavaScriptCore/b3/air/AirLiveness.h:202
&gt; +                        mergeBuffer.resize(0);
&gt; +                        mergeBuffer.reserveCapacity(liveAtTail.size() + m_workset.size());
&gt; +                        auto iter = mergeDeduplicatedSorted(
&gt; +                            liveAtTail.begin(), liveAtTail.end(),
&gt; +                            m_workset.begin(), m_workset.end(),
&gt; +                            mergeBuffer.begin());
&gt; +                        mergeBuffer.resize(iter - mergeBuffer.begin());
&gt; +                        
&gt; +                        if (mergeBuffer.size() == liveAtTail.size())
&gt; +                            continue;
&gt; +                    
&gt; +                        RELEASE_ASSERT(mergeBuffer.size() &gt; liveAtTail.size());
&gt; +                        liveAtTail = mergeBuffer;

OK, merging 2 sorted sequence into one sorted mergeBuffer.

&gt; Source/JavaScriptCore/b3/air/AirTmp.h:95
&gt; +

Is this used?

&gt; Source/JavaScriptCore/b3/air/AirTmp.h:149
&gt; +    }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291368</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-26 15:06:02 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #9)
&gt; Comment on attachment 305435 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=305435&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:11
&gt; &gt; +        compile time progression on WasmBench.
&gt; 
&gt; Cool.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirLiveness.h:133
&gt; &gt;              dirtyBlocks.set(blockIndex);
&gt; 
&gt; Cool.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirLiveness.h:188
&gt; &gt; +                        liveAtTail = m_workset.values();
&gt; 
&gt; OK, m_workset.values() is already sorted.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirLiveness.h:202
&gt; &gt; +                        mergeBuffer.resize(0);
&gt; &gt; +                        mergeBuffer.reserveCapacity(liveAtTail.size() + m_workset.size());
&gt; &gt; +                        auto iter = mergeDeduplicatedSorted(
&gt; &gt; +                            liveAtTail.begin(), liveAtTail.end(),
&gt; &gt; +                            m_workset.begin(), m_workset.end(),
&gt; &gt; +                            mergeBuffer.begin());
&gt; &gt; +                        mergeBuffer.resize(iter - mergeBuffer.begin());
&gt; &gt; +                        
&gt; &gt; +                        if (mergeBuffer.size() == liveAtTail.size())
&gt; &gt; +                            continue;
&gt; &gt; +                    
&gt; &gt; +                        RELEASE_ASSERT(mergeBuffer.size() &gt; liveAtTail.size());
&gt; &gt; +                        liveAtTail = mergeBuffer;
&gt; 
&gt; OK, merging 2 sorted sequence into one sorted mergeBuffer.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirTmp.h:95
&gt; &gt; +
&gt; 
&gt; Is this used?

It&apos;s meant to be a replacement for when we say Arg(tmp).bank().  I think I may have used it in an earlier version of this patch.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirTmp.h:149
&gt; &gt; +    }
&gt; 
&gt; Ditto.

Same thing, earlier version of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291369</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-26 15:11:45 -0700</bug_when>
    <thetext>Landed in r214409.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291384</commentid>
    <comment_count>12</comment_count>
      <attachid>305435</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-26 17:49:17 -0700</bug_when>
    <thetext>Comment on attachment 305435
the patch

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

Oops, one nit comment.

&gt; Source/JavaScriptCore/b3/air/AirLiveness.h:191
&gt; +                        mergeBuffer.reserveCapacity(liveAtTail.size() + m_workset.size());

I think this just allocates capacity(), but the size() of mergeBuffer is still zero.
So, I think the following mergeDeduplicatedSorted is not safe especially in regards of ASAN.
I think we need to perform `resize(liveAtTail.size() + m_workset.size()` here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291385</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-26 17:52:10 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #12)
&gt; Comment on attachment 305435 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=305435&amp;action=review
&gt; 
&gt; Oops, one nit comment.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirLiveness.h:191
&gt; &gt; +                        mergeBuffer.reserveCapacity(liveAtTail.size() + m_workset.size());
&gt; 
&gt; I think this just allocates capacity(), but the size() of mergeBuffer is
&gt; still zero.
&gt; So, I think the following mergeDeduplicatedSorted is not safe especially in
&gt; regards of ASAN.
&gt; I think we need to perform `resize(liveAtTail.size() + m_workset.size()`
&gt; here.

You&apos;re right!  Previously this was OK because I was using uncheckedAppend but then I switched to insertion iterators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291387</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-26 19:20:06 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #13)
&gt; (In reply to Yusuke Suzuki from comment #12)
&gt; &gt; Comment on attachment 305435 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=305435&amp;action=review
&gt; &gt; 
&gt; &gt; Oops, one nit comment.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/air/AirLiveness.h:191
&gt; &gt; &gt; +                        mergeBuffer.reserveCapacity(liveAtTail.size() + m_workset.size());
&gt; &gt; 
&gt; &gt; I think this just allocates capacity(), but the size() of mergeBuffer is
&gt; &gt; still zero.
&gt; &gt; So, I think the following mergeDeduplicatedSorted is not safe especially in
&gt; &gt; regards of ASAN.
&gt; &gt; I think we need to perform `resize(liveAtTail.size() + m_workset.size()`
&gt; &gt; here.
&gt; 
&gt; You&apos;re right!  Previously this was OK because I was using uncheckedAppend
&gt; but then I switched to insertion iterators.

Fixed in https://bugs.webkit.org/show_bug.cgi?id=170111</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305400</attachid>
            <date>2017-03-25 14:46:54 -0700</date>
            <delta_ts>2017-03-25 19:13:32 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22212</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lv
biAyMTQ0MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjU5Nyw2ICsyNTk3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IC8vIFRoaXMgcGF0dGVybiBpcyBzdXBlciB1c2VmdWwgb24gYm90aCB4ODYgYW5kIEFSTTY0LCBz
aW5jZSB0aGUgaW52ZXJzaW9uIG9mIHRoZSBDQVMgcmVzdWx0CiAgICAgICAgICAgICAvLyBjYW4g
YmUgZG9uZSB3aXRoIHplcm8gY29zdCBvbiB4ODYgKGp1c3QgZmxpcCB0aGUgc2V0IGZyb20gRSB0
byBORSkgYW5kIGl0J3MgYSBwcm9ncmVzc2lvbgogICAgICAgICAgICAgLy8gb24gQVJNNjQgKHNp
bmNlIFNUWCByZXR1cm5zIDAgb24gc3VjY2Vzcywgc28gb3JkaW5hcmlseSB3ZSBoYXZlIHRvIGZs
aXAgaXQpLgorICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcgZm9yIEF0b21p
Y1N0cm9uZ0NBUworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2OTg2NwogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0lu
dCgxKQogICAgICAgICAgICAgICAgICYmIGlzQXRvbWljQ0FTKG1fdmFsdWUtPmNoaWxkKDApLT5v
cGNvZGUoKSkKICAgICAgICAgICAgICAgICAmJiBjYW5CZUludGVybmFsKG1fdmFsdWUtPmNoaWxk
KDApKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVGltaW5nU2NvcGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1RpbWluZ1Njb3BlLmNw
cAkocmV2aXNpb24gMjE0NDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVGltaW5n
U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDIzICsyOSw1MyBAQAogI2lmIEVOQUJMRShCM19K
SVQpCiAKICNpbmNsdWRlICJCM0NvbW1vbi5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvTG9jay5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAor
bmFtZXNwYWNlIHsKKworY2xhc3MgU3RhdGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0
YXRlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTdGF0ZSgp
IHsgfQorICAgIAorICAgIFNlY29uZHMgYWRkVG9Ub3RhbChjb25zdCBjaGFyKiBuYW1lLCBTZWNv
bmRzIGR1cmF0aW9uKQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhsb2Nr
KTsKKyAgICAgICAgcmV0dXJuIHRvdGFscy5hZGQobmFtZSwgU2Vjb25kcygwKSkuaXRlcmF0b3It
PnZhbHVlICs9IGR1cmF0aW9uOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxj
b25zdCBjaGFyKiwgU2Vjb25kcz4gdG90YWxzOworICAgIExvY2sgbG9jazsKK307CisKK1N0YXRl
JiBzdGF0ZSgpCit7CisgICAgc3RhdGljIEF0b21pYzxTdGF0ZSo+IHNfc3RhdGU7CisgICAgcmV0
dXJuIGVuc3VyZVBvaW50ZXIoc19zdGF0ZSwgW10geyByZXR1cm4gbmV3IFN0YXRlKCk7IH0pOwor
fQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwogVGltaW5nU2NvcGU6OlRpbWluZ1Njb3Bl
KGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgOiBtX25hbWUobmFtZSkKIHsKICAgICBpZiAoc2hvdWxk
TWVhc3VyZVBoYXNlVGltaW5nKCkpCi0gICAgICAgIG1fYmVmb3JlID0gbW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lTVMoKTsKKyAgICAgICAgbV9iZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3co
KTsKIH0KIAogVGltaW5nU2NvcGU6On5UaW1pbmdTY29wZSgpCiB7CiAgICAgaWYgKHNob3VsZE1l
YXN1cmVQaGFzZVRpbWluZygpKSB7Ci0gICAgICAgIGRvdWJsZSBhZnRlciA9IG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZU1TKCk7Ci0gICAgICAgIGRhdGFMb2coIltCM10gIiwgbV9uYW1lLCAi
IHRvb2s6ICIsIGFmdGVyIC0gbV9iZWZvcmUsICIgbXMuXG4iKTsKKyAgICAgICAgU2Vjb25kcyBk
dXJhdGlvbiA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9iZWZvcmU7CisgICAgICAgIGRhdGFM
b2coCisgICAgICAgICAgICAiW0IzXSAiLCBtX25hbWUsICIgdG9vazogIiwgZHVyYXRpb24ubWls
bGlzZWNvbmRzKCksICIgbXMgIiwKKyAgICAgICAgICAgICIodG90YWw6ICIsIHN0YXRlKCkuYWRk
VG9Ub3RhbChtX25hbWUsIGR1cmF0aW9uKS5taWxsaXNlY29uZHMoKSwgIiBtcykuXG4iKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1RpbWluZ1Njb3BlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVGltaW5nU2NvcGUuaAko
cmV2aXNpb24gMjE0NDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVGltaW5nU2Nv
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQog
CisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0zOSw3ICs0MCw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBjb25zdCBjaGFyKiBtX25hbWU7Ci0gICAgZG91Ymxl
IG1fYmVmb3JlOworICAgIE1vbm90b25pY1RpbWUgbV9iZWZvcmU7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2
ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxp
dmVuZXNzLmgJKHJldmlzaW9uIDIxNDQwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDIxICsxMTAsMjYgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgLy8gVGhlIGxpdmVBdFRhaWwgb2YgZWFjaCBibG9jayBhdXRv
bWF0aWNhbGx5IGNvbnRhaW5zIHRoZSBMYXRlVXNlJ3Mgb2YgdGhlIHRlcm1pbmFsLgogICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICAgICAgdHlwZW5hbWUg
QWRhcHRlcjo6SW5kZXhTZXQmIGxpdmVBdFRhaWwgPSBtX2xpdmVBdFRhaWxbYmxvY2tdOworICAg
ICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiYgbGl2ZUF0VGFpbCA9IG1fbGl2ZUF0VGFpbFtibG9j
a107CiAKICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCkuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVy
OjpUaGluZz4oCiAgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYg
dGhpbmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGJhbmssIFdpZHRoKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChBcmc6OmlzTGF0ZVVzZShyb2xlKQogICAgICAgICAgICAgICAgICAgICAgICAg
JiYgQWRhcHRlcjo6YWNjZXB0c0JhbmsoYmFuaykKICAgICAgICAgICAgICAgICAgICAgICAgICYm
IEFkYXB0ZXI6OmFjY2VwdHNSb2xlKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgbGl2
ZUF0VGFpbC5hZGQoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsaXZlQXRUYWlsLmFwcGVuZChBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcp
KTsKICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpz
b3J0KGxpdmVBdFRhaWwuYmVnaW4oKSwgbGl2ZUF0VGFpbC5lbmQoKSk7CisgICAgICAgICAgICBy
ZW1vdmVSZXBlYXRlZEVsZW1lbnRzKGxpdmVBdFRhaWwpOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gQmxvY2tzIHdpdGggbmV3IGxpdmUgdmFsdWVzIGF0IHRhaWwuCiAgICAgICAgIEJpdFZlY3Rv
ciBkaXJ0eUJsb2NrczsKLSAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBjb2RlLnNpemUoKTsgKytibG9ja0luZGV4KQorICAgICAgICBmb3IgKHNpemVfdCBi
bG9ja0luZGV4ID0gY29kZS5zaXplKCk7IGJsb2NrSW5kZXgtLTspCiAgICAgICAgICAgICBkaXJ0
eUJsb2Nrcy5zZXQoYmxvY2tJbmRleCk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8dW5zaWdu
ZWQ+IG1lcmdlQnVmZmVyOwogCiAgICAgICAgIGJvb2wgY2hhbmdlZDsKICAgICAgICAgZG8gewpA
QCAtMTcwLDE1ICsxNzUsMzAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQu
cmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWQuc2l6ZSgpICsgbV93b3Jrc2V0LnNpemUoKSk7CiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1ZSA6IG1fd29ya3NldCkKICAgICAg
ICAgICAgICAgICAgICAgbGl2ZUF0SGVhZC51bmNoZWNrZWRBcHBlbmQobmV3VmFsdWUpOwotCisg
ICAgICAgICAgICAgICAgc3RkOjpzb3J0KGxpdmVBdEhlYWQuYmVnaW4oKSwgbGl2ZUF0SGVhZC5l
bmQoKSk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgewotICAgICAgICAgICAgICAg
ICAgICB0eXBlbmFtZSBBZGFwdGVyOjpJbmRleFNldCYgbGl2ZUF0VGFpbCA9IG1fbGl2ZUF0VGFp
bFtwcmVkZWNlc3Nvcl07Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbmV3VmFs
dWUgOiBtX3dvcmtzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXZlQXRUYWls
LmFkZChuZXdWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpcnR5
QmxvY2tzLnF1aWNrU2V0KHByZWRlY2Vzc29yLT5pbmRleCgpKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVuc2ln
bmVkPiYgbGl2ZUF0VGFpbCA9IG1fbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl07CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsYXN0VmFsdWUgPSBVSU5U
X01BWDsKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VCdWZmZXIucmVzaXplKDApOworICAgICAg
ICAgICAgICAgICAgICBtZXJnZVNvcnRlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVB
dFRhaWwuYmVnaW4oKSwgbGl2ZUF0VGFpbC5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpdmVBdEhlYWQuYmVnaW4oKSwgbGl2ZUF0SGVhZC5lbmQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFsmXSAodW5zaWduZWQgbGVmdCwgdW5zaWduZWQgcmlnaHQpIHsgcmV0dXJuIGxlZnQg
PCByaWdodDsgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAodW5zaWduZWQgdmFsdWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbGFzdFZhbHVlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCdWZmZXIuYXBw
ZW5kKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSB2YWx1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1lcmdlQnVmZmVyLnNpemUoKSA9PSBsaXZlQXRUYWlsLnNp
emUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobWVyZ2VCdWZmZXIuc2l6
ZSgpID4gbGl2ZUF0VGFpbC5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWls
ID0gbWVyZ2VCdWZmZXI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICB9IHdoaWxlIChjaGFuZ2VkKTsKQEAgLTE5Myw3ICsyMTMsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHsKICAgICAgICAgICAgIGF1dG8mIHdvcmtzZXQgPSBsaXZlbmVzcy5tX3dvcmtzZXQ7CiAgICAg
ICAgICAgICB3b3Jrc2V0LmNsZWFyKCk7Ci0gICAgICAgICAgICB0eXBlbmFtZSBBZGFwdGVyOjpJ
bmRleFNldCYgbGl2ZUF0VGFpbCA9IGxpdmVuZXNzLm1fbGl2ZUF0VGFpbFtibG9ja107CisgICAg
ICAgICAgICBWZWN0b3I8dW5zaWduZWQ+JiBsaXZlQXRUYWlsID0gbGl2ZW5lc3MubV9saXZlQXRU
YWlsW2Jsb2NrXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggOiBsaXZlQXRUYWls
KQogICAgICAgICAgICAgICAgIHdvcmtzZXQuYWRkKGluZGV4KTsKICAgICAgICAgfQpAQCAtMzc4
LDkgKzM5OCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPFZlY3Rvcjx1bnNp
Z25lZD4+KCp0aGlzLCBtX2xpdmVBdEhlYWRbYmxvY2tdKTsKICAgICB9CiAKLSAgICBJdGVyYWJs
ZTx0eXBlbmFtZSBBZGFwdGVyOjpJbmRleFNldD4gbGl2ZUF0VGFpbChCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICBJdGVyYWJsZTxWZWN0b3I8dW5zaWduZWQ+PiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sq
IGJsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPHR5cGVuYW1lIEFkYXB0ZXI6
OkluZGV4U2V0PigqdGhpcywgbV9saXZlQXRUYWlsW2Jsb2NrXSk7CisgICAgICAgIHJldHVybiBJ
dGVyYWJsZTxWZWN0b3I8dW5zaWduZWQ+PigqdGhpcywgbV9saXZlQXRUYWlsW2Jsb2NrXSk7CiAg
ICAgfQogCiAgICAgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiB3b3Jrc2V0
KCkgeyByZXR1cm4gbV93b3Jrc2V0OyB9CkBAIC0zOTEsNyArNDExLDcgQEAgcHJpdmF0ZToKIAog
ICAgIEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3dvcmtzZXQ7CiAgICAg
SW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPHVuc2lnbmVkPj4gbV9saXZlQXRIZWFkOwotICAg
IEluZGV4TWFwPEJhc2ljQmxvY2ssIHR5cGVuYW1lIEFkYXB0ZXI6OkluZGV4U2V0PiBtX2xpdmVB
dFRhaWw7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPHVuc2lnbmVkPj4gbV9saXZl
QXRUYWlsOwogfTsKIAogdGVtcGxhdGU8QmFuayBiYW5rLCBBcmc6OlRlbXBlcmF0dXJlIG1pbmlt
dW1UZW1wZXJhdHVyZSA9IEFyZzo6Q29sZD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BsaXRDb29sVG1wcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGxpdENvb2xUbXBzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwbGl0Q29vbFRtcHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwbGl0Q29vbFRt
cHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmdJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5o
IgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFt
ZXNwYWNlIHsKKwordGVtcGxhdGU8QmFuayBiYW5rPgordm9pZCBzcGxpdENvb2xUbXBzSW1wbChD
b2RlJiBjb2RlKQoreworICAgIFRtcExpdmVuZXNzPGJhbmssIEFyZzo6V2FybT4gbGl2ZW5lc3Mo
Y29kZSk7CisgICAgCisgICAgVmVjdG9yPFRtcD4gY29vbFRtcHMoY29kZS5udW1UbXBzKGJhbmsp
KTsKKyAgICAKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICB0
eXBlbmFtZSBUbXBMaXZlbmVzczxiYW5rLCBBcmc6Oldhcm0+OjpMb2NhbENhbGMgbG9jYWxDYWxj
KGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxv
Y2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxv
Y2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5k
ZXgpOworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgIFsmXSAo
VG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGFyZ0JhbmssIFdpZHRoKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChhcmdCYW5rICE9IGJhbmspCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0NvbGRVc2Uocm9sZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlm
ICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGxvY2FsQ2FsYy5pc0xpdmUodG1wKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGlmICghY29vbFRtcHNbdG1wLnRtcEluZGV4KGJhbmspXSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvb2xUbXBzW3RtcC50bXBJbmRleChiYW5rKV0gPSBjb2RlLm5ld1RtcChiYW5rKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBJbmRleE1hcDxC
YXNpY0Jsb2NrLCBJbnNlcnRpb25TZXQ+IGluc2VydGlvblNldHMoY29kZS5zaXplKCksIGNvZGUp
OworICAgIAorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytp
bnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4
KTsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBbJl0gKFRt
cCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBhcmdCYW5rLCBXaWR0aCB3aWR0aCkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoYmFuayAhPSBhcmdCYW5rKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgVG1wIGNvb2xUbXAgPSBjb29sVG1w
c1t0bXAudG1wSW5kZXgoYmFuayldOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvb2xUbXAp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgT3Bjb2RlIG1vdmVPcGNvZGUgPSBPb3BzOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChiYW5rKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdQ
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVPcGNvZGUgPSBNb3ZlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBGUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBXaWR0aDMyOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtb3ZlT3Bjb2RlID0gTW92ZUZsb2F0OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFdp
ZHRoNjQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVPcGNvZGUgPSBNb3Zl
RG91YmxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgSW5zdCBtb3ZlSW5zdChtb3ZlT3Bjb2RlLCBpbnN0Lm9yaWdpbiwgdG1wLCBjb29s
VG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGluc3RJbmRleCArIDEgPT0gYmxvY2stPnNpemUoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJs
b2NrcygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXRzW3N1
Y2Nlc3Nvcl0uaW5zZXJ0SW5zdCgwLCBtb3ZlSW5zdCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXRzW2Jsb2Nr
XS5pbnNlcnRJbnN0KGluc3RJbmRleCArIDEsIFdURk1vdmUobW92ZUluc3QpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNDb2xkVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0g
Y29vbFRtcDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkKKyAgICAgICAgaW5zZXJ0aW9uU2V0c1ti
bG9ja10uZXhlY3V0ZShibG9jayk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2
b2lkIHNwbGl0Q29vbFRtcHMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2Nv
cGUoY29kZSwgInNwbGl0Q29vbFRtcHMiKTsKKyAgICAKKyAgICBicmVha0NyaXRpY2FsRWRnZXMo
Y29kZSk7CisgICAgCisgICAgc3BsaXRDb29sVG1wc0ltcGw8R1A+KGNvZGUpOworICAgIHNwbGl0
Q29vbFRtcHNJbXBsPEZQPihjb2RlKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGxpdENvb2xUbXBzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGxpdENvb2xUbXBzLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGxpdENvb2xUbXBzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOwor
CisvLyBBbnl0aW1lIGEgVG1wIGhhcyBhIGNvbGQgdXNlIGF0IGEgcG9pbnQgd2hlcmUgaXQgaXMg
ZGVhZCBmb3Igd2FybSB1c2VzLCB3ZSBzcGxpdCB0aGUgVG1wIGludG8gdHdvOgorLy8gb25lIGZv
ciB0aGUgd2FybSB1c2VzIGFuZCBvbmUgZm9yIHRoZSBjb2xkIG9uZXMuCit2b2lkIHNwbGl0Q29v
bFRtcHMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VG1wLmgJKHJldmlzaW9uIDIxNDQwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKKyNpbmNsdWRlICJCM0JhbmsuaCIKICNpbmNsdWRlICJGUFJJbmZvLmgiCiAjaW5j
bHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIlJlZy5oIgpAQCAtNzUsNyArNzYsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV92YWx1ZTsgfQotCisgICAgCiAgICAgYm9vbCBpc0dQKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBpc0VuY29kZWRHUChtX3ZhbHVlKTsKQEAgLTg2LDYgKzg3LDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKG1fdmFsdWUpOwogICAgIH0KIAorICAgIC8v
IEZvciBudWxsIHRtcHMsIHJldHVybnMgR1AuCisgICAgQmFuayBiYW5rKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0ZQKCkgPyBGUCA6IEdQOworICAgIH0KKwogICAgIGJvb2wgaXNH
UFIoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQUihtX3ZhbHVlKTsK
QEAgLTEzMiw2ICsxMzksMTQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGRlY29k
ZUZQVG1wKG1fdmFsdWUpOwogICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCB0bXBJbmRleChCYW5r
IGJhbmspIGNvbnN0CisgICAgeworICAgICAgICBpZiAoYmFuayA9PSBHUCkKKyAgICAgICAgICAg
IHJldHVybiBncFRtcEluZGV4KCk7CisgICAgICAgIEFTU0VSVChiYW5rID09IEZQKTsKKyAgICAg
ICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9CiAKICAgICB1bnNpZ25lZCB0bXBJbmRleCgp
IGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJh
cnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAkocmV2aXNpb24gMjE0
NDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVy
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMTIgKzEzMCwxMiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGEsIGNvbnN0IENo
aWxkQW5kT3JpZ2luJiBiKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEu
Y2hpbGQgPCBiLmNoaWxkOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgYXV0byBl
bmQgPSBzdGQ6OnVuaXF1ZSgKLSAgICAgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJzLmJlZ2lu
KCksIG1fbmVlZGVkQmFycmllcnMuZW5kKCksCisgICAgICAgICAgICByZW1vdmVSZXBlYXRlZEVs
ZW1lbnRzKAorICAgICAgICAgICAgICAgIG1fbmVlZGVkQmFycmllcnMsIAogICAgICAgICAgICAg
ICAgIFsmXSAoY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGEsIGNvbnN0IENoaWxkQW5kT3JpZ2luJiBi
KSAtPiBib29sewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jaGlsZCA9PSBiLmNoaWxk
OwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX25l
ZWRlZEJhcnJpZXJzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byBpdGVyID0gbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpOyBpdGVyICE9IG1fbmVl
ZGVkQmFycmllcnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxk
ID0gaXRlci0+Y2hpbGQ7CiAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRpY09yaWdp
biA9IGl0ZXItPnNlbWFudGljT3JpZ2luOwogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMTQ0MDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjUyLDcgKzE2NTIsNyBAQCBwdWJsaWM6CiAgICAgewogI2lmIEVOQUJMRShG
QVNUX1RMU19KSVQpCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RUTFMo
KSkKLSAgICAgICAgICAgIHN0b3JlVG9UTFNQdHIoc3JjLCBmYXN0VExTT2Zmc2V0Rm9yS2V5KFdU
Rl9XQVNNX0NPTlRFWFRfS0VZKSk7CisgICAgICAgICAgICByZXR1cm4gc3RvcmVUb1RMU1B0cihz
cmMsIGZhc3RUTFNPZmZzZXRGb3JLZXkoV1RGX1dBU01fQ09OVEVYVF9LRVkpKTsKICNlbmRpZgog
ICAgICAgICAvLyBGSVhNRTogU2F2ZSB0aGlzIHN0YXRlIGVsc2V3aGVyZSB0byBhbGxvdyBQSUMu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3NzMKICAgICAgICAg
c3RvcmVQdHIoc3JjLCAmbV92bS0+d2FzbUNvbnRleHQpOwpJbmRleDogU291cmNlL1dURi93dGYv
QXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkocmV2aXNp
b24gMjE0NDAwKQorKysgU291cmNlL1dURi93dGYvQXRvbWljcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MTksNiArNTE5LDIzIEBAIGlubGluZSBUKiBjb25zdW1lKFQqIHBvaW50ZXIsIERlcGVuZGVu
Y3kKICNlbmRpZgogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jPgorQUxX
QVlTX0lOTElORSBUJiBlbnN1cmVQb2ludGVyKEF0b21pYzxUKj4mIHBvaW50ZXIsIGNvbnN0IEZ1
bmMmIGZ1bmMpCit7CisgICAgZm9yICg7OykgeworICAgICAgICBUKiBvbGRWYWx1ZSA9IHBvaW50
ZXIubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgaWYgKG9sZFZhbHVl
KSB7CisgICAgICAgICAgICAvLyBPbiBhbGwgc2Vuc2libGUgQ1BVcywgd2UgZ2V0IGFuIGltcGxp
Y2l0IGRlcGVuZGVuY3ktYmFzZWQgbG9hZC1sb2FkIGJhcnJpZXIgd2hlbgorICAgICAgICAgICAg
Ly8gbG9hZGluZyB0aGlzLgorICAgICAgICAgICAgcmV0dXJuICpvbGRWYWx1ZTsKKyAgICAgICAg
fQorICAgICAgICBUKiBuZXdWYWx1ZSA9IGZ1bmMoKTsKKyAgICAgICAgaWYgKHBvaW50ZXIuY29t
cGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgbmV3VmFsdWUpKQorICAgICAgICAgICAgcmV0dXJu
ICpuZXdWYWx1ZTsKKyAgICAgICAgZGVsZXRlIG5ld1ZhbHVlOworICAgIH0KK30KKwogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6QXRvbWljOwpAQCAtNTI4LDYgKzU0NSw3IEBAIHVz
aW5nIFdURjo6VHJhbnNhY3Rpb25BYm9ydExpa2VsaWhvb2Q7CiB1c2luZyBXVEY6OmNvbnN1bWU7
CiB1c2luZyBXVEY6OmRlcGVuZGVuY3k7CiB1c2luZyBXVEY6OmRlcGVuZGVuY3lXaXRoOwordXNp
bmcgV1RGOjplbnN1cmVQb2ludGVyOwogdXNpbmcgV1RGOjpudWxsRGVwZW5kZW5jeTsKIAogI2Vu
ZGlmIC8vIEF0b21pY3NfaApJbmRleDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDIxNDQw
MCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NzEsNiArNDcxLDM0IEBAIEFMV0FZU19JTkxJTkUgY29uc3RleHByIHR5cGVuYW1lIHJlbW92ZV8K
ICAgICByZXR1cm4gbW92ZShmb3J3YXJkPFQ+KHZhbHVlKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIEl0ZXJhdG9yVHlwZUxlZnQsIHR5cGVuYW1lIEl0ZXJhdG9yVHlwZVJpZ2h0LCB0eXBlbmFt
ZSBWZWN0b3JUeXBlRHN0LCB0eXBlbmFtZSBMZXNzRnVuYywgdHlwZW5hbWUgQXBwZW5kRnVuYz4K
K3ZvaWQgbWVyZ2VTb3J0ZWQoSXRlcmF0b3JUeXBlTGVmdCBsZWZ0QmVnaW4sIEl0ZXRhdG9yVHlw
ZUxlZnQgbGVmdEVuZCwgSXRldGF0b3JUeXBlUmlnaHQgcmlnaHRCZWdpbiwgSXRlcmF0b3JUeXBl
UmlnaHQgcmlnaHRFbmQsIGNvbnN0IExlc3NGdW5jJiBsZXNzRnVuYywgY29uc3QgQXBwZW5kRnVu
YyYgYXBwZW5kRnVuYykKK3sKKyAgICBJdGVyYXRvclR5cGVMZWZ0IGxlZnRJdGVyID0gbGVmdEJl
Z2luOworICAgIEl0ZXJhdG9yVHlwZVJpZ2h0IHJpZ2h0SXRlciA9IHJpZ2h0QmVnaW47CisgICAg
CisgICAgaWYgKGxlZnRJdGVyIDwgbGVmdEVuZCAmJiByaWdodEl0ZXIgPCByaWdodEVuZCkgewor
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBpZiAobGVzc0Z1bmMoKmxlZnRJdGVyLCAq
cmlnaHRJdGVyKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZEZ1bmMoKmxlZnRJdGVyKTsKKyAg
ICAgICAgICAgICAgICBsZWZ0SXRlcisrOworICAgICAgICAgICAgICAgIGlmIChsZWZ0SXRlciA+
PSBsZWZ0RW5kKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kRnVuYygqcmlnaHRJdGVyKTsKKyAgICAgICAg
ICAgIHJpZ2h0SXRlcisrOworICAgICAgICAgICAgaWYgKHJpZ2h0SXRlciA+PSByaWdodEVuZCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB3aGls
ZSAobGVmdEl0ZXIgPCBsZWZ0RW5kKQorICAgICAgICBhcHBlbmRGdW5jKCpsZWZ0SXRlcisrKTsK
KyAgICB3aGlsZSAocmlnaHRJdGVyIDwgcmlnaHRFbmQpCisgICAgICAgIGFwcGVuZEZ1bmMoKnJp
Z2h0SXRlcisrKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ugc3RkCiAKICNkZWZpbmUgV1RGTW92ZSh2
YWx1ZSkgc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPih2YWx1ZSkKQEAgLTQ4OSw2
ICs1MTcsNyBAQCB1c2luZyBXVEY6OmlzQ29tcGlsYXRpb25UaHJlYWQ7CiB1c2luZyBXVEY6Omlz
UG9pbnRlckFsaWduZWQ7CiB1c2luZyBXVEY6OmlzU3RhdGVsZXNzTGFtYmRhOwogdXNpbmcgV1RG
OjppczhCeXRlQWxpZ25lZDsKK3VzaW5nIFdURjo6bWVyZ2VTb3J0ZWQ7CiB1c2luZyBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y7CiB1c2luZyBXVEY6OnNhZmVDYXN0OwogdXNpbmcgV1RGOjp0cnlC
aW5hcnlTZWFyY2g7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMjE0NDAwKQorKysgU291cmNlL1dU
Ri93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MDEsMTAgKzE1MDEsMjYgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFZhbHVlQ2hlY2s8VgogfTsKICNlbmRpZgogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlLCBjb25zdCBGdW5jJiBmdW5jPgorc2l6ZV90IHJlbW92
ZVJlcGVhdGVkRWxlbWVudHMoVmVjdG9yVHlwZSYgdmVjdG9yLCBjb25zdCBGdW5jJiBmdW5jKQor
eworICAgIGF1dG8gZW5kID0gc3RkOjp1bmlxdWUodmVjdG9yLmJlZ2luKCksIHZlY3Rvci5lbmQo
KSwgZnVuYyk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBlbmQgLSB2ZWN0b3IuYmVnaW4oKTsKKyAg
ICB2ZWN0b3IucmVzaXplKG5ld1NpemUpOworICAgIHJldHVybiBuZXdTaXplOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgorc2l6ZV90IHJlbW92ZVJlcGVhdGVkRWxlbWVudHMo
VmVjdG9yVHlwZSYgdmVjdG9yKQoreworICAgIHJlbW92ZVJlcGVhdGVkRWxlbWVudHModmVjdG9y
LCBbXSAoYXV0byYgYSwgYXV0byYgYikgeyByZXR1cm4gYSA9PSBiOyB9KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6VmVjdG9yOwogdXNpbmcgV1RGOjpVbnNhZmVWZWN0
b3JPdmVyZmxvdzsKIHVzaW5nIFdURjo6bm90Rm91bmQ7Cit1c2luZyBXVEY6OnJlbW92ZVJlcGVh
dGVkRWxlbWVudHM7CiAKICNlbmRpZiAvLyBXVEZfVmVjdG9yX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305410</attachid>
            <date>2017-03-25 19:13:32 -0700</date>
            <delta_ts>2017-03-25 19:15:40 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29210</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NDA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE3LTAzLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWlyOjpMaXZlbmVzcyBzaG91bGRuJ3QgbmVlZCBIYXNoU2V0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTAyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNvbnZlcnRzIEFpcjo6
TGl2ZW5lc3M8PiB0byBubyBsb25nZXIgdXNlIEhhc2hTZXRzIG9yIEJpdFZlY3RvcnMuIFRoaXMg
dHVybnMgb3V0IHRvIGJlCisgICAgICAgIGVhc3kgYmVjYXVzZSBpdCdzIGNoZWFwIGVub3VnaCB0
byBkbyBhIHNvcnRlZCBtZXJnZSBvZiB0aGUgdGhpbmdzIGJlaW5nIGFkZGVkIHRvIGxpdmVBdEhl
YWQgYW5kCisgICAgICAgIHRoZSB0aGluZ3MgaW4gdGhlIHByZWRlY2Vzc29ycycgbGl2ZUF0VGFp
bC4gVGhpcyB0dXJucyBvdXQgdG8gYmUgZmFzdGVyIC0gaXQncyBhIDIlIG92ZXJhbGwKKyAgICAg
ICAgY29tcGlsZSB0aW1lIHByb2dyZXNzaW9uIG9uIFdhc21CZW5jaC4KKyAgICAgICAgCisgICAg
ICAgIEFsc28gYWRkZWQgbW9yZSBwaGFzZSB0aW1pbmcgc3VwcG9ydC4gWW91IGNhbiBub3cgZ2V0
IHBoYXNlIHRpbWUgdG90YWxzLgorCisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOiBBZGQgYSBGSVhNRSB1bnJl
bGF0ZWQgdG8gdGhpcyBwYXRjaC4KKyAgICAgICAgKiBiMy9CM1RpbWluZ1Njb3BlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OlRpbWluZ1Njb3BlOjpUaW1pbmdTY29wZSk6CisgICAgICAgIChKU0M6
OkIzOjpUaW1pbmdTY29wZTo6flRpbWluZ1Njb3BlKToKKyAgICAgICAgKiBiMy9CM1RpbWluZ1Nj
b3BlLmg6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkFic3RyYWN0TGl2ZW5lc3MpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpMb2NhbENhbGM6OkxvY2FsQ2FsYyk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OnJhd0xpdmVBdEhlYWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpsaXZlQXRIZWFkKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6bGl2ZUF0VGFpbCk6CisgICAgICAg
ICogYjMvYWlyL0FpclNwbGl0Q29vbFRtcHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6c3BsaXRDb29sVG1wcyk6CisgICAgICAgICogYjMvYWlyL0FpclNwbGl0Q29vbFRtcHMu
aDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpclRtcC5oOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpUbXA6OmJhbmspOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OnRtcEluZGV4KToK
KyAgICAgICAgKiBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDoKKwogMjAx
Ny0wMy0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB3
YXNtIGJ5IHJldHVybmluZyBhZnRlciB3ZSBkbyBUTFMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OTcs
NiArMjU5Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBUaGlzIHBhdHRlcm4gaXMgc3Vw
ZXIgdXNlZnVsIG9uIGJvdGggeDg2IGFuZCBBUk02NCwgc2luY2UgdGhlIGludmVyc2lvbiBvZiB0
aGUgQ0FTIHJlc3VsdAogICAgICAgICAgICAgLy8gY2FuIGJlIGRvbmUgd2l0aCB6ZXJvIGNvc3Qg
b24geDg2IChqdXN0IGZsaXAgdGhlIHNldCBmcm9tIEUgdG8gTkUpIGFuZCBpdCdzIGEgcHJvZ3Jl
c3Npb24KICAgICAgICAgICAgIC8vIG9uIEFSTTY0IChzaW5jZSBTVFggcmV0dXJucyAwIG9uIHN1
Y2Nlc3MsIHNvIG9yZGluYXJpbHkgd2UgaGF2ZSB0byBmbGlwIGl0KS4KKyAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nIGZvciBBdG9taWNTdHJvbmdDQVMKKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4NjcKICAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMSkKICAgICAgICAgICAgICAgICAm
JiBpc0F0b21pY0NBUyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCiAgICAgICAgICAgICAg
ICAgJiYgY2FuQmVJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1RpbWluZ1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNUaW1pbmdTY29wZS5jcHAJKHJldmlzaW9uIDIxNDQwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1RpbWluZ1Njb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOSwyMyArMjksNTMgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQjNDb21t
b24uaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxv
Zy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKK25hbWVzcGFjZSB7CisKK2NsYXNzIFN0
YXRlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdGF0ZSk7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3RhdGUoKSB7IH0KKyAgICAKKyAgICBTZWNvbmRz
IGFkZFRvVG90YWwoY29uc3QgY2hhciogbmFtZSwgU2Vjb25kcyBkdXJhdGlvbikKKyAgICB7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobG9jayk7CisgICAgICAgIHJldHVybiB0b3Rh
bHMuYWRkKG5hbWUsIFNlY29uZHMoMCkpLml0ZXJhdG9yLT52YWx1ZSArPSBkdXJhdGlvbjsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIEhhc2hNYXA8Y29uc3QgY2hhciosIFNlY29uZHM+IHRv
dGFsczsKKyAgICBMb2NrIGxvY2s7Cit9OworCitTdGF0ZSYgc3RhdGUoKQoreworICAgIHN0YXRp
YyBBdG9taWM8U3RhdGUqPiBzX3N0YXRlOworICAgIHJldHVybiBlbnN1cmVQb2ludGVyKHNfc3Rh
dGUsIFtdIHsgcmV0dXJuIG5ldyBTdGF0ZSgpOyB9KTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKIFRpbWluZ1Njb3BlOjpUaW1pbmdTY29wZShjb25zdCBjaGFyKiBuYW1lKQogICAg
IDogbV9uYW1lKG5hbWUpCiB7CiAgICAgaWYgKHNob3VsZE1lYXN1cmVQaGFzZVRpbWluZygpKQot
ICAgICAgICBtX2JlZm9yZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisgICAg
ICAgIG1fYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiB9CiAKIFRpbWluZ1Njb3BlOjp+
VGltaW5nU2NvcGUoKQogewogICAgIGlmIChzaG91bGRNZWFzdXJlUGhhc2VUaW1pbmcoKSkgewot
ICAgICAgICBkb3VibGUgYWZ0ZXIgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOwot
ICAgICAgICBkYXRhTG9nKCJbQjNdICIsIG1fbmFtZSwgIiB0b29rOiAiLCBhZnRlciAtIG1fYmVm
b3JlLCAiIG1zLlxuIik7CisgICAgICAgIFNlY29uZHMgZHVyYXRpb24gPSBNb25vdG9uaWNUaW1l
Ojpub3coKSAtIG1fYmVmb3JlOworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIltCM10g
IiwgbV9uYW1lLCAiIHRvb2s6ICIsIGR1cmF0aW9uLm1pbGxpc2Vjb25kcygpLCAiIG1zICIsCisg
ICAgICAgICAgICAiKHRvdGFsOiAiLCBzdGF0ZSgpLmFkZFRvVG90YWwobV9uYW1lLCBkdXJhdGlv
bikubWlsbGlzZWNvbmRzKCksICIgbXMpLlxuIik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNUaW1pbmdTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1RpbWluZ1Njb3BlLmgJKHJldmlzaW9uIDIxNDQwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1RpbWluZ1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgPHd0Zi9Nb25vdG9u
aWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgewpAQCAtMzksNyArNDAsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgY29uc3QgY2hhciogbV9uYW1lOwotICAgIGRvdWJsZSBtX2JlZm9yZTsKKyAgICBNb25vdG9u
aWNUaW1lIG1fYmVmb3JlOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENv
bG9yaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkocmV2aXNpb24gMjE0NDA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3Jh
cGhDb2xvcmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNTcsNyArMjI1Nyw3IEBAIHByaXZh
dGU6CiAKIHZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcoQ29kZSYgY29kZSkK
IHsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgIkFpcjo6YWxsb2NhdGVSZWdpc3Rl
cnNCeUdyYXBoQ29sb3JpbmciKTsKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nIik7CiAgICAgCiAgICAgaWYgKGZhbHNlKQog
ICAgICAgICBkYXRhTG9nKCJDb2RlIGJlZm9yZSBncmFwaCBjb2xvcmluZzpcbiIsIGNvZGUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNp
b24gMjE0NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiQWlyU3RhY2tTbG90
LmgiCiAjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9JbmRleE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9JbmRleFNldC5oPgogI2luY2x1ZGUgPHd0Zi9JbmRleFNwYXJzZVNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCkBAIC00Miw3ICs0MSw2IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UKIHRlbXBsYXRlPEJhbmsgYWRhcHRl
ckJhbmssIEFyZzo6VGVtcGVyYXR1cmUgbWluaW11bVRlbXBlcmF0dXJlID0gQXJnOjpDb2xkPgog
c3RydWN0IFRtcExpdmVuZXNzQWRhcHRlciB7CiAgICAgdHlwZWRlZiBUbXAgVGhpbmc7Ci0gICAg
dHlwZWRlZiBIYXNoU2V0PHVuc2lnbmVkPiBJbmRleFNldDsKIAogICAgIFRtcExpdmVuZXNzQWRh
cHRlcihDb2RlJikgeyB9CiAKQEAgLTU5LDcgKzU3LDYgQEAgc3RydWN0IFRtcExpdmVuZXNzQWRh
cHRlciB7CiAKIHN0cnVjdCBTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXIgewogICAgIHR5cGVkZWYg
U3RhY2tTbG90KiBUaGluZzsKLSAgICB0eXBlZGVmIEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRI
YXNoPHVuc2lnbmVkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1
bnNpZ25lZD4+IEluZGV4U2V0OwogCiAgICAgU3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyKENvZGUm
IGNvZGUpCiAgICAgICAgIDogbV9jb2RlKGNvZGUpCkBAIC04MSw3ICs3OCw2IEBAIHByaXZhdGU6
CiAKIHN0cnVjdCBSZWdMaXZlbmVzc0FkYXB0ZXIgewogICAgIHR5cGVkZWYgUmVnIFRoaW5nOwot
ICAgIHR5cGVkZWYgQml0VmVjdG9yIEluZGV4U2V0OwogCiAgICAgUmVnTGl2ZW5lc3NBZGFwdGVy
KENvZGUmKSB7IH0KIApAQCAtMTAxLDYgKzk3LDcgQEAgY2xhc3MgQWJzdHJhY3RMaXZlbmVzcyA6
IHB1YmxpYyBBZGFwdGVyIAogICAgIHN0cnVjdCBXb3Jrc2V0OwogcHVibGljOgogICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcgVGhpbmc7CisgICAgdHlwZWRlZiBWZWN0b3I8dW5z
aWduZWQsIDQsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBJbmRleFZlY3RvcjsKICAgICAKICAgICBB
YnN0cmFjdExpdmVuZXNzKENvZGUmIGNvZGUpCiAgICAgICAgIDogQWRhcHRlcihjb2RlKQpAQCAt
MTEwLDIyICsxMDcsMjcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgLy8gVGhlIGxpdmVBdFRh
aWwgb2YgZWFjaCBibG9jayBhdXRvbWF0aWNhbGx5IGNvbnRhaW5zIHRoZSBMYXRlVXNlJ3Mgb2Yg
dGhlIHRlcm1pbmFsLgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewot
ICAgICAgICAgICAgdHlwZW5hbWUgQWRhcHRlcjo6SW5kZXhTZXQmIGxpdmVBdFRhaWwgPSBtX2xp
dmVBdFRhaWxbYmxvY2tdOworICAgICAgICAgICAgSW5kZXhWZWN0b3ImIGxpdmVBdFRhaWwgPSBt
X2xpdmVBdFRhaWxbYmxvY2tdOwogCiAgICAgICAgICAgICBibG9jay0+bGFzdCgpLmZvckVhY2g8
dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAogICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUg
QWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBiYW5rLCBXaWR0aCkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVVc2Uocm9sZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIEFkYXB0ZXI6OmFjY2VwdHNCYW5rKGJhbmspCiAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBBZGFwdGVyOjphY2NlcHRzUm9sZShyb2xlKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxpdmVBdFRhaWwuYWRkKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykp
OworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC5hcHBlbmQoQWRhcHRlcjo6dmFs
dWVUb0luZGV4KHRoaW5nKSk7CiAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHN0ZDo6c29ydChsaXZlQXRUYWlsLmJlZ2luKCksIGxpdmVBdFRhaWwuZW5kKCkp
OworICAgICAgICAgICAgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyhsaXZlQXRUYWlsKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIEJsb2NrcyB3aXRoIG5ldyBsaXZlIHZhbHVlcyBhdCB0YWlsLgog
ICAgICAgICBCaXRWZWN0b3IgZGlydHlCbG9ja3M7Ci0gICAgICAgIGZvciAoc2l6ZV90IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgY29kZS5zaXplKCk7ICsrYmxvY2tJbmRleCkKKyAgICAg
ICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KQog
ICAgICAgICAgICAgZGlydHlCbG9ja3Muc2V0KGJsb2NrSW5kZXgpOwotCisgICAgICAgIAorICAg
ICAgICBJbmRleFZlY3RvciBtZXJnZUJ1ZmZlcjsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgY2hh
bmdlZDsKICAgICAgICAgZG8gewogICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwpAQCAtMTUx
LDcgKzE1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dvcmtz
ZXQucmVtb3ZlKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOwogICAgICAgICAgICAgICAg
ICAgICB9KTsKIAotICAgICAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4mIGxpdmVBdEhlYWQg
PSBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIEluZGV4VmVjdG9yJiBsaXZl
QXRIZWFkID0gbV9saXZlQXRIZWFkW2Jsb2NrXTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIG9u
bHkgY2FyZSBhYm91dCBUbXBzIHRoYXQgd2VyZSBkaXNjb3ZlcmVkIGluIHRoaXMgaXRlcmF0aW9u
LiBJdCBpcyBpbXBvc3NpYmxlCiAgICAgICAgICAgICAgICAgLy8gdG8gcmVtb3ZlIGEgbGl2ZSB2
YWx1ZSBmcm9tIHRoZSBoZWFkLgpAQCAtMTcwLDE1ICsxNzIsMzIgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGxpdmVBdEhlYWQucmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWQuc2l6ZSgpICsg
bV93b3Jrc2V0LnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1
ZSA6IG1fd29ya3NldCkKICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZC51bmNoZWNrZWRB
cHBlbmQobmV3VmFsdWUpOwotCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV93
b3Jrc2V0LnNvcnQoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIEFkYXB0ZXI6OkluZGV4U2V0JiBsaXZlQXRUYWlsID0gbV9s
aXZlQXRUYWlsW3ByZWRlY2Vzc29yXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBuZXdWYWx1ZSA6IG1fd29ya3NldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxp
dmVBdFRhaWwuYWRkKG5ld1ZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghZGlydHlCbG9ja3MucXVpY2tTZXQocHJlZGVjZXNzb3ItPmluZGV4KCkpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgSW5kZXhWZWN0b3ImIGxpdmVBdFRhaWwgPSBt
X2xpdmVBdFRhaWxbcHJlZGVjZXNzb3JdOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGxpdmVBdFRhaWwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbGl2ZUF0VGFpbCA9IG1fd29ya3NldC52YWx1ZXMoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJ1ZmZlci5yZXNpemUoMCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobGl2
ZUF0VGFpbC5zaXplKCkgKyBtX3dvcmtzZXQuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gaXRlciA9IG1lcmdlRGVkdXBsaWNhdGVkU29ydGVkKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpdmVBdFRhaWwuYmVnaW4oKSwgbGl2ZUF0VGFpbC5lbmQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3dvcmtzZXQuYmVnaW4oKSwgbV93b3Jrc2V0LmVuZCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQnVmZmVyLmJlZ2luKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCdWZmZXIucmVzaXplKGl0ZXIgLSBtZXJnZUJ1ZmZl
ci5iZWdpbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1lcmdlQnVmZmVyLnNpemUoKSA9PSBsaXZlQXRUYWlsLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtZXJnZUJ1ZmZlci5zaXplKCkg
PiBsaXZlQXRUYWlsLnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWls
ID0gbWVyZ2VCdWZmZXI7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGRpcnR5QmxvY2tzLnF1aWNrU2V0KHByZWRlY2Vzc29y
LT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKQEAg
LTE5Myw3ICsyMTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8mIHdv
cmtzZXQgPSBsaXZlbmVzcy5tX3dvcmtzZXQ7CiAgICAgICAgICAgICB3b3Jrc2V0LmNsZWFyKCk7
Ci0gICAgICAgICAgICB0eXBlbmFtZSBBZGFwdGVyOjpJbmRleFNldCYgbGl2ZUF0VGFpbCA9IGxp
dmVuZXNzLm1fbGl2ZUF0VGFpbFtibG9ja107CisgICAgICAgICAgICBJbmRleFZlY3RvciYgbGl2
ZUF0VGFpbCA9IGxpdmVuZXNzLm1fbGl2ZUF0VGFpbFtibG9ja107CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4IDogbGl2ZUF0VGFpbCkKICAgICAgICAgICAgICAgICB3b3Jrc2V0LmFk
ZChpbmRleCk7CiAgICAgICAgIH0KQEAgLTMwNSw3ICszMjQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgfTsKIAotICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25l
ZD4mIHJhd0xpdmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spCisgICAgY29uc3QgSW5kZXhWZWN0
b3ImIHJhd0xpdmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICByZXR1
cm4gbV9saXZlQXRIZWFkW2Jsb2NrXTsKICAgICB9CkBAIC0zNzMsMTQgKzM5MiwxNCBAQCBwdWJs
aWM6CiAgICAgICAgIGNvbnN0IFVuZGVybHlpbmdJdGVyYWJsZSYgbV9pdGVyYWJsZTsKICAgICB9
OwogCi0gICAgSXRlcmFibGU8VmVjdG9yPHVuc2lnbmVkPj4gbGl2ZUF0SGVhZChCYXNpY0Jsb2Nr
KiBibG9jaykKKyAgICBJdGVyYWJsZTxJbmRleFZlY3Rvcj4gbGl2ZUF0SGVhZChCYXNpY0Jsb2Nr
KiBibG9jaykKICAgICB7Ci0gICAgICAgIHJldHVybiBJdGVyYWJsZTxWZWN0b3I8dW5zaWduZWQ+
PigqdGhpcywgbV9saXZlQXRIZWFkW2Jsb2NrXSk7CisgICAgICAgIHJldHVybiBJdGVyYWJsZTxJ
bmRleFZlY3Rvcj4oKnRoaXMsIG1fbGl2ZUF0SGVhZFtibG9ja10pOwogICAgIH0KIAotICAgIEl0
ZXJhYmxlPHR5cGVuYW1lIEFkYXB0ZXI6OkluZGV4U2V0PiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sq
IGJsb2NrKQorICAgIEl0ZXJhYmxlPEluZGV4VmVjdG9yPiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sq
IGJsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPHR5cGVuYW1lIEFkYXB0ZXI6
OkluZGV4U2V0PigqdGhpcywgbV9saXZlQXRUYWlsW2Jsb2NrXSk7CisgICAgICAgIHJldHVybiBJ
dGVyYWJsZTxJbmRleFZlY3Rvcj4oKnRoaXMsIG1fbGl2ZUF0VGFpbFtibG9ja10pOwogICAgIH0K
IAogICAgIEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgd29ya3NldCgpIHsg
cmV0dXJuIG1fd29ya3NldDsgfQpAQCAtMzkwLDggKzQwOSw4IEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIHN0cnVjdCBMb2NhbENhbGM6Okl0ZXJhYmxlOwogCiAgICAgSW5kZXhTcGFyc2VTZXQ8VW5z
YWZlVmVjdG9yT3ZlcmZsb3c+IG1fd29ya3NldDsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBW
ZWN0b3I8dW5zaWduZWQ+PiBtX2xpdmVBdEhlYWQ7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
dHlwZW5hbWUgQWRhcHRlcjo6SW5kZXhTZXQ+IG1fbGl2ZUF0VGFpbDsKKyAgICBJbmRleE1hcDxC
YXNpY0Jsb2NrLCBJbmRleFZlY3Rvcj4gbV9saXZlQXRIZWFkOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2ssIEluZGV4VmVjdG9yPiBtX2xpdmVBdFRhaWw7CiB9OwogCiB0ZW1wbGF0ZTxCYW5rIGJh
bmssIEFyZzo6VGVtcGVyYXR1cmUgbWluaW11bVRlbXBlcmF0dXJlID0gQXJnOjpDb2xkPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGxpdENvb2xUbXBzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwbGl0Q29vbFRtcHMu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bs
aXRDb29sVG1wcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlyU3BsaXRDb29sVG1wcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckFyZ0lubGluZXMuaCIKKyNpbmNsdWRlICJBaXJCcmVha0NyaXRpY2FsRWRn
ZXMuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0Lmgi
CisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgor
I2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTxCYW5rIGJhbms+
Cit2b2lkIHNwbGl0Q29vbFRtcHNJbXBsKENvZGUmIGNvZGUpCit7CisgICAgVG1wTGl2ZW5lc3M8
YmFuaywgQXJnOjpXYXJtPiBsaXZlbmVzcyhjb2RlKTsKKyAgICAKKyAgICBWZWN0b3I8VG1wPiBj
b29sVG1wcyhjb2RlLm51bVRtcHMoYmFuaykpOworICAgIAorICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBjb2RlKSB7CisgICAgICAgIHR5cGVuYW1lIFRtcExpdmVuZXNzPGJhbmssIEFyZzo6
V2FybT46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAg
IGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hU
bXAoCisgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsg
YXJnQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ0JhbmsgIT0gYmFu
aykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFBcmc6OmlzQ29sZFVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxDYWxjLmlzTGl2
ZSh0bXApKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb29sVG1wc1t0bXAudG1wSW5kZXgoYmFu
ayldKQorICAgICAgICAgICAgICAgICAgICAgICAgY29vbFRtcHNbdG1wLnRtcEluZGV4KGJhbmsp
XSA9IGNvZGUubmV3VG1wKGJhbmspOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEluc2VydGlvblNldD4gaW5zZXJ0
aW9uU2V0cyhjb2RlLnNpemUoKSwgY29kZSk7CisgICAgCisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgSW5zdCYg
aW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1w
KAorICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGFy
Z0JhbmssIFdpZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiYW5rICE9IGFy
Z0JhbmspCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBUbXAgY29vbFRtcCA9IGNvb2xUbXBzW3RtcC50bXBJbmRleChiYW5rKV07CisgICAgICAg
ICAgICAgICAgICAgIGlmICghY29vbFRtcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
QW55RGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZU9wY29k
ZSA9IE9vcHM7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJhbmspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bW92ZU9wY29kZSA9IE1vdmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAod2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFdp
ZHRoMzI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVPcGNvZGUgPSBNb3Zl
RmxvYXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgV2lkdGg2NDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbW92ZU9wY29kZSA9IE1vdmVEb3VibGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0IG1vdmVJbnN0KG1vdmVPcGNv
ZGUsIGluc3Qub3JpZ2luLCB0bXAsIGNvb2xUbXApOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdEluZGV4ICsgMSA9PSBibG9jay0+c2l6
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldHNbc3VjY2Vzc29yXS5pbnNlcnRJbnN0KDAsIG1vdmVJbnN0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldHNbYmxvY2tdLmluc2VydEluc3QoaW5zdEluZGV4ICsgMSwgV1RG
TW92ZShtb3ZlSW5zdCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0NvbGRVc2Uocm9sZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICB0bXAgPSBjb29sVG1wOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KQorICAgICAgICBpbnNlcnRpb25TZXRzW2Jsb2NrXS5leGVjdXRlKGJsb2NrKTsKK30KKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgc3BsaXRDb29sVG1wcyhDb2RlJiBjb2RlKQor
eworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAic3BsaXRDb29sVG1wcyIpOworICAg
IAorICAgIGJyZWFrQ3JpdGljYWxFZGdlcyhjb2RlKTsKKyAgICAKKyAgICBzcGxpdENvb2xUbXBz
SW1wbDxHUD4oY29kZSk7CisgICAgc3BsaXRDb29sVG1wc0ltcGw8RlA+KGNvZGUpOworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwbGl0Q29vbFRtcHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwbGl0Q29v
bFRtcHMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clNwbGl0Q29vbFRtcHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIEFueXRpbWUgYSBUbXAgaGFzIGEgY29sZCB1
c2UgYXQgYSBwb2ludCB3aGVyZSBpdCBpcyBkZWFkIGZvciB3YXJtIHVzZXMsIHdlIHNwbGl0IHRo
ZSBUbXAgaW50byB0d286CisvLyBvbmUgZm9yIHRoZSB3YXJtIHVzZXMgYW5kIG9uZSBmb3IgdGhl
IGNvbGQgb25lcy4KK3ZvaWQgc3BsaXRDb29sVG1wcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkocmV2aXNpb24gMjE0NDA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQmFuay5oIgog
I2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiUmVn
LmgiCkBAIC03NSw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9Ci0KKyAgICAKICAgICBib29s
IGlzR1AoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKG1fdmFsdWUp
OwpAQCAtODYsNiArODcsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAo
bV92YWx1ZSk7CiAgICAgfQogCisgICAgLy8gRm9yIG51bGwgdG1wcywgcmV0dXJucyBHUC4KKyAg
ICBCYW5rIGJhbmsoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRlAoKSA/IEZQIDog
R1A7CisgICAgfQorCiAgICAgYm9vbCBpc0dQUigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUpOwpAQCAtMTMyLDYgKzEzOSwxNCBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gZGVjb2RlRlBUbXAobV92YWx1ZSk7CiAgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIHRtcEluZGV4KEJhbmsgYmFuaykgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChiYW5rID09IEdQKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKKyAgICAgICAg
QVNTRVJUKGJhbmsgPT0gRlApOworICAgICAgICByZXR1cm4gZnBUbXBJbmRleCgpOworICAgIH0K
IAogICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVy
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMCwxMiArMTMwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgWyZdIChjb25zdCBD
aGlsZEFuZE9yaWdpbiYgYSwgY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGIpIC0+IGJvb2wgewogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYS5jaGlsZCA8IGIuY2hpbGQ7CiAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICBhdXRvIGVuZCA9IHN0ZDo6dW5pcXVlKAotICAgICAgICAgICAg
ICAgIG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKSwgbV9uZWVkZWRCYXJyaWVycy5lbmQoKSwKKyAg
ICAgICAgICAgIHJlbW92ZVJlcGVhdGVkRWxlbWVudHMoCisgICAgICAgICAgICAgICAgbV9uZWVk
ZWRCYXJyaWVycywgCiAgICAgICAgICAgICAgICAgWyZdIChjb25zdCBDaGlsZEFuZE9yaWdpbiYg
YSwgY29uc3QgQ2hpbGRBbmRPcmlnaW4mIGIpIC0+IGJvb2x7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBhLmNoaWxkID09IGIuY2hpbGQ7CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICBmb3IgKGF1dG8gaXRlciA9IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikgeworICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBtX25lZWRlZEJhcnJp
ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9uZWVkZWRCYXJyaWVycy5lbmQoKTsgKytpdGVyKSB7CiAg
ICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBpdGVyLT5jaGlsZDsKICAgICAgICAgICAgICAg
ICBDb2RlT3JpZ2luIHNlbWFudGljT3JpZ2luID0gaXRlci0+c2VtYW50aWNPcmlnaW47CiAgICAg
ICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxNy0wMy0yNSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEFpcjo6TGl2ZW5lc3Mgc2hvdWxk
bid0IG5lZWQgSGFzaFNldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDEwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAgKFdURjo6ZW5zdXJlUG9pbnRlcik6
IFRoaXMgaXMgYSB1c2VmdWwgcmVwbGFjZW1lbnQgZm9yIHN0ZDo6b25jZSwgd2hpY2ggcmVxdWly
ZXMgbGVzcyBmZW5jaW5nLgorICAgICAgICAqIHd0Zi9JbmRleFNwYXJzZVNldC5oOiBBZGQgc29t
ZSBoZWxwZXJzIGZvciBhIEhhc2hTZXQtZnJlZSBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAgICAg
KFdURjo6SW5kZXhTcGFyc2VTZXQ6OnZhbHVlcyk6CisgICAgICAgIChXVEY6OkluZGV4U3BhcnNl
U2V0PE92ZXJmbG93SGFuZGxlcj46OnNvcnQpOgorICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMu
aDoKKyAgICAgICAgKFdURjo6bWVyZ2VEZWR1cGxpY2F0ZWRTb3J0ZWQpOiBSYXBpZGx5IG1lcmdl
IHR3byBzb3J0ZWQgbGlzdHMgdGhhdCBkb24ndCBoYXZlIGR1cGxpY2F0ZXMgdG8gcHJvZHVjZSBh
IG5ldyBzb3J0ZWQgbGlzdCB0aGF0IGRvZXNuJ3QgaGF2ZSBkdXBsaWNhdGVzLgorICAgICAgICAq
IHd0Zi9WZWN0b3IuaDoKKyAgICAgICAgKFdURjo6bWluQ2FwYWNpdHk+Ojp1bmNoZWNrZWRBcHBl
bmQpOiBJbmxpbmUgdGhpcyEKKyAgICAgICAgKFdURjo6cmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyk6
IFRoaXMgaXMgYSB2ZXJzaW9uIG9mIHN0ZDo6dW5pcXVlKCkgdGhhdCB3b3JrcyBuYXR1cmFsbHkg
Zm9yIFZlY3RvcnMuCisKIDIwMTctMDMtMjQgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFdlYkFzc2VtYmx5OiBzdG9yZSBzdGF0ZSBpbiBUTFMgaW5zdGVhZCBv
ZiBvbiBWTQpJbmRleDogU291cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0F0b21pY3MuaAkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL1dURi93
dGYvQXRvbWljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTksNiArNTE5LDIzIEBAIGlubGluZSBU
KiBjb25zdW1lKFQqIHBvaW50ZXIsIERlcGVuZGVuY3kKICNlbmRpZgogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jPgorQUxXQVlTX0lOTElORSBUJiBlbnN1cmVQb2ludGVy
KEF0b21pYzxUKj4mIHBvaW50ZXIsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgZm9yICg7Oykg
eworICAgICAgICBUKiBvbGRWYWx1ZSA9IHBvaW50ZXIubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxheGVkKTsKKyAgICAgICAgaWYgKG9sZFZhbHVlKSB7CisgICAgICAgICAgICAvLyBPbiBhbGwg
c2Vuc2libGUgQ1BVcywgd2UgZ2V0IGFuIGltcGxpY2l0IGRlcGVuZGVuY3ktYmFzZWQgbG9hZC1s
b2FkIGJhcnJpZXIgd2hlbgorICAgICAgICAgICAgLy8gbG9hZGluZyB0aGlzLgorICAgICAgICAg
ICAgcmV0dXJuICpvbGRWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICBUKiBuZXdWYWx1ZSA9IGZ1
bmMoKTsKKyAgICAgICAgaWYgKHBvaW50ZXIuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwg
bmV3VmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuICpuZXdWYWx1ZTsKKyAgICAgICAgZGVsZXRl
IG5ld1ZhbHVlOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6
QXRvbWljOwpAQCAtNTI4LDYgKzU0NSw3IEBAIHVzaW5nIFdURjo6VHJhbnNhY3Rpb25BYm9ydExp
a2VsaWhvb2Q7CiB1c2luZyBXVEY6OmNvbnN1bWU7CiB1c2luZyBXVEY6OmRlcGVuZGVuY3k7CiB1
c2luZyBXVEY6OmRlcGVuZGVuY3lXaXRoOwordXNpbmcgV1RGOjplbnN1cmVQb2ludGVyOwogdXNp
bmcgV1RGOjpudWxsRGVwZW5kZW5jeTsKIAogI2VuZGlmIC8vIEF0b21pY3NfaApJbmRleDogU291
cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9JbmRleFNwYXJzZVNldC5oCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvV1RGL3d0Zi9J
bmRleFNwYXJzZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxMCBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0
ZXJhdG9yOwogICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CiAgICAgY29uc3RfaXRl
cmF0b3IgZW5kKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBzb3J0KCk7CisgICAgCisgICAgY29u
c3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQogCiBwcml2
YXRlOgogICAgIFZlY3Rvcjx1bnNpZ25lZCwgMCwgT3ZlcmZsb3dIYW5kbGVyLCAxPiBtX21hcDsK
QEAgLTEyOSw2ICsxMzMsMTIgQEAgYm9vbCBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+
OjpjbwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit2b2lkIEluZGV4
U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnNvcnQoKQoreworICAgIHN0ZDo6c29ydChtX3Zh
bHVlcy5iZWdpbigpLCBtX3ZhbHVlcy5lbmQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4KIGF1dG8gSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6YmVn
aW4oKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIHJldHVybiBtX3ZhbHVlcy5iZWdp
bigpOwpJbmRleDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDIxNDQwNCkKKysrIFNvdXJj
ZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsNiArNDA4LDQ1
IEBAIHN0cnVjdCBSZW1vdmVDVkFuZFJlZmVyZW5jZSAgewogICAgIHR5cGVkZWYgdHlwZW5hbWUg
c3RkOjpyZW1vdmVfY3Y8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlPjo6
dHlwZSB0eXBlOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlTGVmdCwgdHlw
ZW5hbWUgSXRlcmF0b3JUeXBlUmlnaHQsIHR5cGVuYW1lIEl0ZXJhdG9yVHlwZURzdD4KK0l0ZXJh
dG9yVHlwZURzdCBtZXJnZURlZHVwbGljYXRlZFNvcnRlZChJdGVyYXRvclR5cGVMZWZ0IGxlZnRC
ZWdpbiwgSXRlcmF0b3JUeXBlTGVmdCBsZWZ0RW5kLCBJdGVyYXRvclR5cGVSaWdodCByaWdodEJl
Z2luLCBJdGVyYXRvclR5cGVSaWdodCByaWdodEVuZCwgSXRlcmF0b3JUeXBlRHN0IGRzdEJlZ2lu
KQoreworICAgIEl0ZXJhdG9yVHlwZUxlZnQgbGVmdEl0ZXIgPSBsZWZ0QmVnaW47CisgICAgSXRl
cmF0b3JUeXBlUmlnaHQgcmlnaHRJdGVyID0gcmlnaHRCZWdpbjsKKyAgICBJdGVyYXRvclR5cGVE
c3QgZHN0SXRlciA9IGRzdEJlZ2luOworICAgIAorICAgIGlmIChsZWZ0SXRlciA8IGxlZnRFbmQg
JiYgcmlnaHRJdGVyIDwgcmlnaHRFbmQpIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAg
ICAgYXV0byBsZWZ0ID0gKmxlZnRJdGVyOworICAgICAgICAgICAgYXV0byByaWdodCA9ICpyaWdo
dEl0ZXI7CisgICAgICAgICAgICBpZiAobGVmdCA8IHJpZ2h0KSB7CisgICAgICAgICAgICAgICAg
KmRzdEl0ZXIrKyA9IGxlZnQ7CisgICAgICAgICAgICAgICAgbGVmdEl0ZXIrKzsKKyAgICAgICAg
ICAgICAgICBpZiAobGVmdEl0ZXIgPj0gbGVmdEVuZCkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQgPT0gcmlnaHQpIHsKKyAgICAgICAgICAg
ICAgICAqZHN0SXRlcisrID0gbGVmdDsKKyAgICAgICAgICAgICAgICBsZWZ0SXRlcisrOworICAg
ICAgICAgICAgICAgIHJpZ2h0SXRlcisrOworICAgICAgICAgICAgICAgIGlmIChsZWZ0SXRlciA+
PSBsZWZ0RW5kIHx8IHJpZ2h0SXRlciA+PSByaWdodEVuZCkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICpkc3RJdGVyKysg
PSByaWdodDsKKyAgICAgICAgICAgICAgICByaWdodEl0ZXIrKzsKKyAgICAgICAgICAgICAgICBp
ZiAocmlnaHRJdGVyID49IHJpZ2h0RW5kKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB3aGlsZSAobGVmdEl0ZXIg
PCBsZWZ0RW5kKQorICAgICAgICAqZHN0SXRlcisrID0gKmxlZnRJdGVyKys7CisgICAgd2hpbGUg
KHJpZ2h0SXRlciA8IHJpZ2h0RW5kKQorICAgICAgICAqZHN0SXRlcisrID0gKnJpZ2h0SXRlcisr
OworICAgIAorICAgIHJldHVybiBkc3RJdGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
Ly8gVGhpcyB2ZXJzaW9uIG9mIHBsYWNlbWVudCBuZXcgb21pdHMgYSAwIGNoZWNrLgpAQCAtNDg5
LDYgKzUyOCw3IEBAIHVzaW5nIFdURjo6aXNDb21waWxhdGlvblRocmVhZDsKIHVzaW5nIFdURjo6
aXNQb2ludGVyQWxpZ25lZDsKIHVzaW5nIFdURjo6aXNTdGF0ZWxlc3NMYW1iZGE7CiB1c2luZyBX
VEY6OmlzOEJ5dGVBbGlnbmVkOwordXNpbmcgV1RGOjptZXJnZURlZHVwbGljYXRlZFNvcnRlZDsK
IHVzaW5nIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjsKIHVzaW5nIFdURjo6c2FmZUNhc3Q7CiB1
c2luZyBXVEY6OnRyeUJpbmFyeVNlYXJjaDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCShyZXZpc2lvbiAyMTQ0MDQp
CisrKyBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5MCw3ICsx
MjkwLDcgQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogLy8gdmVj
dG9yJ3MgY2FwYWNpdHkgaXMgbGFyZ2UgZW5vdWdoIGZvciB0aGUgYXBwZW5kIHRvIHN1Y2NlZWQu
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+
Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwg
bWluQ2FwYWNpdHk+Ojp1bmNoZWNrZWRBcHBlbmQoVSYmIHZhbHVlKQorQUxXQVlTX0lOTElORSB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT46OnVuY2hlY2tlZEFwcGVuZChVJiYgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNpemUoKSA8IGNh
cGFjaXR5KCkpOwogCkBAIC0xNTAxLDEwICsxNTAxLDI2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBWYWx1ZUNoZWNrPFYKIH07CiAjZW5kaWYKIAordGVtcGxhdGU8dHlwZW5hbWUgVmVj
dG9yVHlwZSwgdHlwZW5hbWUgRnVuYz4KK3NpemVfdCByZW1vdmVSZXBlYXRlZEVsZW1lbnRzKFZl
Y3RvclR5cGUmIHZlY3RvciwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBhdXRvIGVuZCA9IHN0
ZDo6dW5pcXVlKHZlY3Rvci5iZWdpbigpLCB2ZWN0b3IuZW5kKCksIGZ1bmMpOworICAgIHNpemVf
dCBuZXdTaXplID0gZW5kIC0gdmVjdG9yLmJlZ2luKCk7CisgICAgdmVjdG9yLnJlc2l6ZShuZXdT
aXplKTsKKyAgICByZXR1cm4gbmV3U2l6ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9y
VHlwZT4KK3NpemVfdCByZW1vdmVSZXBlYXRlZEVsZW1lbnRzKFZlY3RvclR5cGUmIHZlY3RvcikK
K3sKKyAgICByZXR1cm4gcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyh2ZWN0b3IsIFtdIChhdXRvJiBh
LCBhdXRvJiBiKSB7IHJldHVybiBhID09IGI7IH0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAogdXNpbmcgV1RGOjpWZWN0b3I7CiB1c2luZyBXVEY6OlVuc2FmZVZlY3Rvck92ZXJmbG93Owog
dXNpbmcgV1RGOjpub3RGb3VuZDsKK3VzaW5nIFdURjo6cmVtb3ZlUmVwZWF0ZWRFbGVtZW50czsK
IAogI2VuZGlmIC8vIFdURl9WZWN0b3JfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305411</attachid>
            <date>2017-03-25 19:15:40 -0700</date>
            <delta_ts>2017-03-26 13:34:05 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>21502</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NDA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDE3LTAzLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWlyOjpMaXZlbmVzcyBzaG91bGRuJ3QgbmVlZCBIYXNoU2V0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTAyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNvbnZlcnRzIEFpcjo6
TGl2ZW5lc3M8PiB0byBubyBsb25nZXIgdXNlIEhhc2hTZXRzIG9yIEJpdFZlY3RvcnMuIFRoaXMg
dHVybnMgb3V0IHRvIGJlCisgICAgICAgIGVhc3kgYmVjYXVzZSBpdCdzIGNoZWFwIGVub3VnaCB0
byBkbyBhIHNvcnRlZCBtZXJnZSBvZiB0aGUgdGhpbmdzIGJlaW5nIGFkZGVkIHRvIGxpdmVBdEhl
YWQgYW5kCisgICAgICAgIHRoZSB0aGluZ3MgaW4gdGhlIHByZWRlY2Vzc29ycycgbGl2ZUF0VGFp
bC4gVGhpcyB0dXJucyBvdXQgdG8gYmUgZmFzdGVyIC0gaXQncyBhIDIlIG92ZXJhbGwKKyAgICAg
ICAgY29tcGlsZSB0aW1lIHByb2dyZXNzaW9uIG9uIFdhc21CZW5jaC4KKyAgICAgICAgCisgICAg
ICAgIEFsc28gYWRkZWQgbW9yZSBwaGFzZSB0aW1pbmcgc3VwcG9ydC4gWW91IGNhbiBub3cgZ2V0
IHBoYXNlIHRpbWUgdG90YWxzLgorCisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOiBBZGQgYSBGSVhNRSB1bnJl
bGF0ZWQgdG8gdGhpcyBwYXRjaC4KKyAgICAgICAgKiBiMy9CM1RpbWluZ1Njb3BlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OlRpbWluZ1Njb3BlOjpUaW1pbmdTY29wZSk6CisgICAgICAgIChKU0M6
OkIzOjpUaW1pbmdTY29wZTo6flRpbWluZ1Njb3BlKToKKyAgICAgICAgKiBiMy9CM1RpbWluZ1Nj
b3BlLmg6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkFic3RyYWN0TGl2ZW5lc3MpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpMb2NhbENhbGM6OkxvY2FsQ2FsYyk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OnJhd0xpdmVBdEhlYWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpsaXZlQXRIZWFkKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6bGl2ZUF0VGFpbCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcC5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmJhbmspOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OnRtcEluZGV4KToKKyAgICAgICAgKiBkZmcvREZH
U3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDoKKwogMjAxNy0wMy0yNSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB3YXNtIGJ5IHJldHVybmluZyBh
ZnRlciB3ZSBkbyBUTFMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OTcsNiArMjU5Nyw4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAvLyBUaGlzIHBhdHRlcm4gaXMgc3VwZXIgdXNlZnVsIG9uIGJvdGgg
eDg2IGFuZCBBUk02NCwgc2luY2UgdGhlIGludmVyc2lvbiBvZiB0aGUgQ0FTIHJlc3VsdAogICAg
ICAgICAgICAgLy8gY2FuIGJlIGRvbmUgd2l0aCB6ZXJvIGNvc3Qgb24geDg2IChqdXN0IGZsaXAg
dGhlIHNldCBmcm9tIEUgdG8gTkUpIGFuZCBpdCdzIGEgcHJvZ3Jlc3Npb24KICAgICAgICAgICAg
IC8vIG9uIEFSTTY0IChzaW5jZSBTVFggcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIHNvIG9yZGluYXJp
bHkgd2UgaGF2ZSB0byBmbGlwIGl0KS4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tz
IHdyb25nIGZvciBBdG9taWNTdHJvbmdDQVMKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk4NjcKICAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgxKS0+aXNJbnQoMSkKICAgICAgICAgICAgICAgICAmJiBpc0F0b21pY0NBUyhtX3Zh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCiAgICAgICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5h
bChtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1RpbWluZ1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNUaW1pbmdTY29wZS5jcHAJKHJldmlzaW9uIDIxNDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1RpbWluZ1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwyMyArMjksNTMgQEAK
ICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQjNDb21tb24uaCIKLSNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKK25hbWVzcGFjZSB7CisKK2NsYXNzIFN0YXRlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShTdGF0ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgU3RhdGUoKSB7IH0KKyAgICAKKyAgICBTZWNvbmRzIGFkZFRvVG90YWwoY29uc3Qg
Y2hhciogbmFtZSwgU2Vjb25kcyBkdXJhdGlvbikKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobG9jayk7CisgICAgICAgIHJldHVybiB0b3RhbHMuYWRkKG5hbWUsIFNlY29u
ZHMoMCkpLml0ZXJhdG9yLT52YWx1ZSArPSBkdXJhdGlvbjsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIEhhc2hNYXA8Y29uc3QgY2hhciosIFNlY29uZHM+IHRvdGFsczsKKyAgICBMb2NrIGxv
Y2s7Cit9OworCitTdGF0ZSYgc3RhdGUoKQoreworICAgIHN0YXRpYyBBdG9taWM8U3RhdGUqPiBz
X3N0YXRlOworICAgIHJldHVybiBlbnN1cmVQb2ludGVyKHNfc3RhdGUsIFtdIHsgcmV0dXJuIG5l
dyBTdGF0ZSgpOyB9KTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIFRpbWluZ1Nj
b3BlOjpUaW1pbmdTY29wZShjb25zdCBjaGFyKiBuYW1lKQogICAgIDogbV9uYW1lKG5hbWUpCiB7
CiAgICAgaWYgKHNob3VsZE1lYXN1cmVQaGFzZVRpbWluZygpKQotICAgICAgICBtX2JlZm9yZSA9
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisgICAgICAgIG1fYmVmb3JlID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CiB9CiAKIFRpbWluZ1Njb3BlOjp+VGltaW5nU2NvcGUoKQogewog
ICAgIGlmIChzaG91bGRNZWFzdXJlUGhhc2VUaW1pbmcoKSkgewotICAgICAgICBkb3VibGUgYWZ0
ZXIgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOwotICAgICAgICBkYXRhTG9nKCJb
QjNdICIsIG1fbmFtZSwgIiB0b29rOiAiLCBhZnRlciAtIG1fYmVmb3JlLCAiIG1zLlxuIik7Cisg
ICAgICAgIFNlY29uZHMgZHVyYXRpb24gPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fYmVmb3Jl
OworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIltCM10gIiwgbV9uYW1lLCAiIHRvb2s6
ICIsIGR1cmF0aW9uLm1pbGxpc2Vjb25kcygpLCAiIG1zICIsCisgICAgICAgICAgICAiKHRvdGFs
OiAiLCBzdGF0ZSgpLmFkZFRvVG90YWwobV9uYW1lLCBkdXJhdGlvbikubWlsbGlzZWNvbmRzKCks
ICIgbXMpLlxuIik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNUaW1pbmdTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1RpbWluZ1Njb3BlLmgJKHJldmlzaW9uIDIxNDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1RpbWluZ1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYg
RU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewpA
QCAtMzksNyArNDAsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgY29uc3QgY2hhciogbV9u
YW1lOwotICAgIGRvdWJsZSBtX2JlZm9yZTsKKyAgICBNb25vdG9uaWNUaW1lIG1fYmVmb3JlOwog
fTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJz
QnlHcmFwaENvbG9yaW5nLmNwcAkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyNTcsNyArMjI1Nyw3IEBAIHByaXZhdGU6CiAKIHZvaWQgYWxsb2Nh
dGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcoQ29kZSYgY29kZSkKIHsKLSAgICBQaGFzZVNjb3Bl
IHBoYXNlU2NvcGUoY29kZSwgIkFpcjo6YWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3Jpbmci
KTsKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlUmVnaXN0ZXJzQnlH
cmFwaENvbG9yaW5nIik7CiAgICAgCiAgICAgaWYgKGZhbHNlKQogICAgICAgICBkYXRhTG9nKCJD
b2RlIGJlZm9yZSBncmFwaCBjb2xvcmluZzpcbiIsIGNvZGUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMjE0NDA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQWly
VG1wSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9JbmRleE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9J
bmRleFNldC5oPgogI2luY2x1ZGUgPHd0Zi9JbmRleFNwYXJzZVNldC5oPgogI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgogCkBAIC00Miw3ICs0MSw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UKIHRlbXBsYXRlPEJhbmsgYWRhcHRlckJhbmssIEFyZzo6VGVtcGVy
YXR1cmUgbWluaW11bVRlbXBlcmF0dXJlID0gQXJnOjpDb2xkPgogc3RydWN0IFRtcExpdmVuZXNz
QWRhcHRlciB7CiAgICAgdHlwZWRlZiBUbXAgVGhpbmc7Ci0gICAgdHlwZWRlZiBIYXNoU2V0PHVu
c2lnbmVkPiBJbmRleFNldDsKIAogICAgIFRtcExpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAK
QEAgLTU5LDcgKzU3LDYgQEAgc3RydWN0IFRtcExpdmVuZXNzQWRhcHRlciB7CiAKIHN0cnVjdCBT
dGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXIgewogICAgIHR5cGVkZWYgU3RhY2tTbG90KiBUaGluZzsK
LSAgICB0eXBlZGVmIEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFz
aCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IEluZGV4U2V0
OwogCiAgICAgU3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyKENvZGUmIGNvZGUpCiAgICAgICAgIDog
bV9jb2RlKGNvZGUpCkBAIC04MSw3ICs3OCw2IEBAIHByaXZhdGU6CiAKIHN0cnVjdCBSZWdMaXZl
bmVzc0FkYXB0ZXIgewogICAgIHR5cGVkZWYgUmVnIFRoaW5nOwotICAgIHR5cGVkZWYgQml0VmVj
dG9yIEluZGV4U2V0OwogCiAgICAgUmVnTGl2ZW5lc3NBZGFwdGVyKENvZGUmKSB7IH0KIApAQCAt
MTAxLDYgKzk3LDcgQEAgY2xhc3MgQWJzdHJhY3RMaXZlbmVzcyA6IHB1YmxpYyBBZGFwdGVyIAog
ICAgIHN0cnVjdCBXb3Jrc2V0OwogcHVibGljOgogICAgIHR5cGVkZWYgdHlwZW5hbWUgQWRhcHRl
cjo6VGhpbmcgVGhpbmc7CisgICAgdHlwZWRlZiBWZWN0b3I8dW5zaWduZWQsIDQsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiBJbmRleFZlY3RvcjsKICAgICAKICAgICBBYnN0cmFjdExpdmVuZXNzKENv
ZGUmIGNvZGUpCiAgICAgICAgIDogQWRhcHRlcihjb2RlKQpAQCAtMTEwLDIyICsxMDcsMjcgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgLy8gVGhlIGxpdmVBdFRhaWwgb2YgZWFjaCBibG9jayBh
dXRvbWF0aWNhbGx5IGNvbnRhaW5zIHRoZSBMYXRlVXNlJ3Mgb2YgdGhlIHRlcm1pbmFsLgogICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICAgICAgdHlwZW5h
bWUgQWRhcHRlcjo6SW5kZXhTZXQmIGxpdmVBdFRhaWwgPSBtX2xpdmVBdFRhaWxbYmxvY2tdOwor
ICAgICAgICAgICAgSW5kZXhWZWN0b3ImIGxpdmVBdFRhaWwgPSBtX2xpdmVBdFRhaWxbYmxvY2td
OwogCiAgICAgICAgICAgICBibG9jay0+bGFzdCgpLmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6
VGhpbmc+KAogICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRo
aW5nLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBiYW5rLCBXaWR0aCkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0xhdGVVc2Uocm9sZSkKICAgICAgICAgICAgICAgICAgICAgICAgICYm
IEFkYXB0ZXI6OmFjY2VwdHNCYW5rKGJhbmspCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBB
ZGFwdGVyOjphY2NlcHRzUm9sZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVB
dFRhaWwuYWRkKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbGl2ZUF0VGFpbC5hcHBlbmQoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7
CiAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0ZDo6c29y
dChsaXZlQXRUYWlsLmJlZ2luKCksIGxpdmVBdFRhaWwuZW5kKCkpOworICAgICAgICAgICAgcmVt
b3ZlUmVwZWF0ZWRFbGVtZW50cyhsaXZlQXRUYWlsKTsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IEJsb2NrcyB3aXRoIG5ldyBsaXZlIHZhbHVlcyBhdCB0YWlsLgogICAgICAgICBCaXRWZWN0b3Ig
ZGlydHlCbG9ja3M7Ci0gICAgICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgY29kZS5zaXplKCk7ICsrYmxvY2tJbmRleCkKKyAgICAgICAgZm9yIChzaXplX3QgYmxv
Y2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KQogICAgICAgICAgICAgZGlydHlC
bG9ja3Muc2V0KGJsb2NrSW5kZXgpOwotCisgICAgICAgIAorICAgICAgICBJbmRleFZlY3RvciBt
ZXJnZUJ1ZmZlcjsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgY2hhbmdlZDsKICAgICAgICAgZG8g
ewogICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwpAQCAtMTUxLDcgKzE1Myw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6
OnZhbHVlVG9JbmRleCh0aGluZykpOwogICAgICAgICAgICAgICAgICAgICB9KTsKIAotICAgICAg
ICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4mIGxpdmVBdEhlYWQgPSBtX2xpdmVBdEhlYWRbYmxv
Y2tdOworICAgICAgICAgICAgICAgIEluZGV4VmVjdG9yJiBsaXZlQXRIZWFkID0gbV9saXZlQXRI
ZWFkW2Jsb2NrXTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBUbXBz
IHRoYXQgd2VyZSBkaXNjb3ZlcmVkIGluIHRoaXMgaXRlcmF0aW9uLiBJdCBpcyBpbXBvc3NpYmxl
CiAgICAgICAgICAgICAgICAgLy8gdG8gcmVtb3ZlIGEgbGl2ZSB2YWx1ZSBmcm9tIHRoZSBoZWFk
LgpAQCAtMTcwLDE1ICsxNzIsMzIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGxpdmVBdEhl
YWQucmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWQuc2l6ZSgpICsgbV93b3Jrc2V0LnNpemUoKSk7
CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1ZSA6IG1fd29ya3NldCkKICAg
ICAgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZC51bmNoZWNrZWRBcHBlbmQobmV3VmFsdWUpOwot
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LnNvcnQoKTsKKyAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vz
c29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVu
YW1lIEFkYXB0ZXI6OkluZGV4U2V0JiBsaXZlQXRUYWlsID0gbV9saXZlQXRUYWlsW3ByZWRlY2Vz
c29yXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1ZSA6IG1fd29y
a3NldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVBdFRhaWwuYWRkKG5ld1Zh
bHVlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGlydHlCbG9ja3MucXVp
Y2tTZXQocHJlZGVjZXNzb3ItPmluZGV4KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgSW5kZXhWZWN0b3ImIGxpdmVBdFRhaWwgPSBtX2xpdmVBdFRhaWxbcHJlZGVj
ZXNzb3JdOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxp
dmVBdFRhaWwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0VGFpbCA9
IG1fd29ya3NldC52YWx1ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtZXJnZUJ1ZmZlci5yZXNpemUoMCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtZXJnZUJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0VGFpbC5zaXplKCkgKyBt
X3dvcmtzZXQuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IG1l
cmdlRGVkdXBsaWNhdGVkU29ydGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVB
dFRhaWwuYmVnaW4oKSwgbGl2ZUF0VGFpbC5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3dvcmtzZXQuYmVnaW4oKSwgbV93b3Jrc2V0LmVuZCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1lcmdlQnVmZmVyLmJlZ2luKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWVyZ2VCdWZmZXIucmVzaXplKGl0ZXIgLSBtZXJnZUJ1ZmZlci5iZWdpbigpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lcmdlQnVm
ZmVyLnNpemUoKSA9PSBsaXZlQXRUYWlsLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtZXJnZUJ1ZmZlci5zaXplKCkgPiBsaXZlQXRUYWlsLnNpemUo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsID0gbWVyZ2VCdWZmZXI7CiAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGRpcnR5QmxvY2tzLnF1aWNrU2V0KHByZWRlY2Vzc29yLT5pbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKQEAgLTE5Myw3ICsyMTIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8mIHdvcmtzZXQgPSBsaXZlbmVzcy5t
X3dvcmtzZXQ7CiAgICAgICAgICAgICB3b3Jrc2V0LmNsZWFyKCk7Ci0gICAgICAgICAgICB0eXBl
bmFtZSBBZGFwdGVyOjpJbmRleFNldCYgbGl2ZUF0VGFpbCA9IGxpdmVuZXNzLm1fbGl2ZUF0VGFp
bFtibG9ja107CisgICAgICAgICAgICBJbmRleFZlY3RvciYgbGl2ZUF0VGFpbCA9IGxpdmVuZXNz
Lm1fbGl2ZUF0VGFpbFtibG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDog
bGl2ZUF0VGFpbCkKICAgICAgICAgICAgICAgICB3b3Jrc2V0LmFkZChpbmRleCk7CiAgICAgICAg
IH0KQEAgLTMwNSw3ICszMjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxv
Y2s7CiAgICAgfTsKIAotICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHJhd0xpdmVBdEhlYWQo
QmFzaWNCbG9jayogYmxvY2spCisgICAgY29uc3QgSW5kZXhWZWN0b3ImIHJhd0xpdmVBdEhlYWQo
QmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICByZXR1cm4gbV9saXZlQXRIZWFkW2Js
b2NrXTsKICAgICB9CkBAIC0zNzMsMTQgKzM5MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0
IFVuZGVybHlpbmdJdGVyYWJsZSYgbV9pdGVyYWJsZTsKICAgICB9OwogCi0gICAgSXRlcmFibGU8
VmVjdG9yPHVuc2lnbmVkPj4gbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICBJdGVy
YWJsZTxJbmRleFZlY3Rvcj4gbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBJdGVyYWJsZTxWZWN0b3I8dW5zaWduZWQ+PigqdGhpcywgbV9saXZlQXRI
ZWFkW2Jsb2NrXSk7CisgICAgICAgIHJldHVybiBJdGVyYWJsZTxJbmRleFZlY3Rvcj4oKnRoaXMs
IG1fbGl2ZUF0SGVhZFtibG9ja10pOwogICAgIH0KIAotICAgIEl0ZXJhYmxlPHR5cGVuYW1lIEFk
YXB0ZXI6OkluZGV4U2V0PiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIEl0ZXJh
YmxlPEluZGV4VmVjdG9yPiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEl0ZXJhYmxlPHR5cGVuYW1lIEFkYXB0ZXI6OkluZGV4U2V0PigqdGhpcywg
bV9saXZlQXRUYWlsW2Jsb2NrXSk7CisgICAgICAgIHJldHVybiBJdGVyYWJsZTxJbmRleFZlY3Rv
cj4oKnRoaXMsIG1fbGl2ZUF0VGFpbFtibG9ja10pOwogICAgIH0KIAogICAgIEluZGV4U3BhcnNl
U2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgd29ya3NldCgpIHsgcmV0dXJuIG1fd29ya3NldDsg
fQpAQCAtMzkwLDggKzQwOSw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIHN0cnVjdCBMb2NhbENh
bGM6Okl0ZXJhYmxlOwogCiAgICAgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+
IG1fd29ya3NldDsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8dW5zaWduZWQ+PiBt
X2xpdmVBdEhlYWQ7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgdHlwZW5hbWUgQWRhcHRlcjo6
SW5kZXhTZXQ+IG1fbGl2ZUF0VGFpbDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBJbmRleFZl
Y3Rvcj4gbV9saXZlQXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEluZGV4VmVjdG9y
PiBtX2xpdmVBdFRhaWw7CiB9OwogCiB0ZW1wbGF0ZTxCYW5rIGJhbmssIEFyZzo6VGVtcGVyYXR1
cmUgbWluaW11bVRlbXBlcmF0dXJlID0gQXJnOjpDb2xkPgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNCYW5rLmgiCiAjaW5jbHVkZSAiRlBS
SW5mby5oIgogI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJSZWcuaCIKQEAgLTc1LDcg
Kzc2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KLQorICAgIAogICAgIGJvb2wgaXNHUCgpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AobV92YWx1ZSk7CkBAIC04Niw2ICs4
NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpc0VuY29kZWRGUChtX3ZhbHVlKTsKICAg
ICB9CiAKKyAgICAvLyBGb3IgbnVsbCB0bXBzLCByZXR1cm5zIEdQLgorICAgIEJhbmsgYmFuaygp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNGUCgpID8gRlAgOiBHUDsKKyAgICB9CisK
ICAgICBib29sIGlzR1BSKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBpc0VuY29kZWRH
UFIobV92YWx1ZSk7CkBAIC0xMzIsNiArMTM5LDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiBkZWNvZGVGUFRtcChtX3ZhbHVlKTsKICAgICB9CisgICAgCisgICAgdW5zaWduZWQg
dG1wSW5kZXgoQmFuayBiYW5rKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1Ap
CisgICAgICAgICAgICByZXR1cm4gZ3BUbXBJbmRleCgpOworICAgICAgICBBU1NFUlQoYmFuayA9
PSBGUCk7CisgICAgICAgIHJldHVybiBmcFRtcEluZGV4KCk7CisgICAgfQogCiAgICAgdW5zaWdu
ZWQgdG1wSW5kZXgoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAJ
KHJldmlzaW9uIDIxNDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVC
YXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDEyICsxMzAs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2lu
JiBhLCBjb25zdCBDaGlsZEFuZE9yaWdpbiYgYikgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBhLmNoaWxkIDwgYi5jaGlsZDsKICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIGF1dG8gZW5kID0gc3RkOjp1bmlxdWUoCi0gICAgICAgICAgICAgICAgbV9uZWVkZWRC
YXJyaWVycy5iZWdpbigpLCBtX25lZWRlZEJhcnJpZXJzLmVuZCgpLAorICAgICAgICAgICAgcmVt
b3ZlUmVwZWF0ZWRFbGVtZW50cygKKyAgICAgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJzLCAK
ICAgICAgICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBDaGls
ZEFuZE9yaWdpbiYgYikgLT4gYm9vbHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY2hp
bGQgPT0gYi5jaGlsZDsKICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGZvciAoYXV0
byBpdGVyID0gbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8gaXRlciA9IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKTsg
aXRlciAhPSBtX25lZWRlZEJhcnJpZXJzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IGl0ZXItPmNoaWxkOwogICAgICAgICAgICAgICAgIENvZGVPcmlnaW4g
c2VtYW50aWNPcmlnaW4gPSBpdGVyLT5zZW1hbnRpY09yaWdpbjsKICAgICAgICAgICAgICAgICAK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE3LTAzLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgQWlyOjpMaXZlbmVzcyBzaG91bGRuJ3QgbmVlZCBIYXNo
U2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcw
MTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RGOjplbnN1cmVQb2ludGVyKTogVGhpcyBpcyBhIHVz
ZWZ1bCByZXBsYWNlbWVudCBmb3Igc3RkOjpvbmNlLCB3aGljaCByZXF1aXJlcyBsZXNzIGZlbmNp
bmcuCisgICAgICAgICogd3RmL0luZGV4U3BhcnNlU2V0Lmg6IEFkZCBzb21lIGhlbHBlcnMgZm9y
IGEgSGFzaFNldC1mcmVlIGxpdmVuZXNzIGFuYWx5c2lzLgorICAgICAgICAoV1RGOjpJbmRleFNw
YXJzZVNldDo6dmFsdWVzKToKKyAgICAgICAgKFdURjo6SW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dI
YW5kbGVyPjo6c29ydCk6CisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAo
V1RGOjptZXJnZURlZHVwbGljYXRlZFNvcnRlZCk6IFJhcGlkbHkgbWVyZ2UgdHdvIHNvcnRlZCBs
aXN0cyB0aGF0IGRvbid0IGhhdmUgZHVwbGljYXRlcyB0byBwcm9kdWNlIGEgbmV3IHNvcnRlZCBs
aXN0IHRoYXQgZG9lc24ndCBoYXZlIGR1cGxpY2F0ZXMuCisgICAgICAgICogd3RmL1ZlY3Rvci5o
OgorICAgICAgICAoV1RGOjptaW5DYXBhY2l0eT46OnVuY2hlY2tlZEFwcGVuZCk6IElubGluZSB0
aGlzIQorICAgICAgICAoV1RGOjpyZW1vdmVSZXBlYXRlZEVsZW1lbnRzKTogVGhpcyBpcyBhIHZl
cnNpb24gb2Ygc3RkOjp1bmlxdWUoKSB0aGF0IHdvcmtzIG5hdHVyYWxseSBmb3IgVmVjdG9ycy4K
KwogMjAxNy0wMy0yNCAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViQXNzZW1ibHk6IHN0b3JlIHN0YXRlIGluIFRMUyBpbnN0ZWFkIG9mIG9uIFZNCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
QXRvbWljcy5oCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxOSw2ICs1MTksMjMgQEAgaW5saW5lIFQqIGNvbnN1bWUoVCog
cG9pbnRlciwgRGVwZW5kZW5jeQogI2VuZGlmCiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEZ1bmM+CitBTFdBWVNfSU5MSU5FIFQmIGVuc3VyZVBvaW50ZXIoQXRvbWljPFQqPiYg
cG9pbnRlciwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIFQq
IG9sZFZhbHVlID0gcG9pbnRlci5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAg
ICAgICBpZiAob2xkVmFsdWUpIHsKKyAgICAgICAgICAgIC8vIE9uIGFsbCBzZW5zaWJsZSBDUFVz
LCB3ZSBnZXQgYW4gaW1wbGljaXQgZGVwZW5kZW5jeS1iYXNlZCBsb2FkLWxvYWQgYmFycmllciB3
aGVuCisgICAgICAgICAgICAvLyBsb2FkaW5nIHRoaXMuCisgICAgICAgICAgICByZXR1cm4gKm9s
ZFZhbHVlOworICAgICAgICB9CisgICAgICAgIFQqIG5ld1ZhbHVlID0gZnVuYygpOworICAgICAg
ICBpZiAocG9pbnRlci5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBuZXdWYWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gKm5ld1ZhbHVlOworICAgICAgICBkZWxldGUgbmV3VmFsdWU7Cisg
ICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpBdG9taWM7CkBAIC01
MjgsNiArNTQ1LDcgQEAgdXNpbmcgV1RGOjpUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZDsKIHVz
aW5nIFdURjo6Y29uc3VtZTsKIHVzaW5nIFdURjo6ZGVwZW5kZW5jeTsKIHVzaW5nIFdURjo6ZGVw
ZW5kZW5jeVdpdGg7Cit1c2luZyBXVEY6OmVuc3VyZVBvaW50ZXI7CiB1c2luZyBXVEY6Om51bGxE
ZXBlbmRlbmN5OwogCiAjZW5kaWYgLy8gQXRvbWljc19oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9J
bmRleFNwYXJzZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNl
U2V0LmgJKHJldmlzaW9uIDIxNDQwNCkKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDEwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IHR5cGVuYW1lIFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICAg
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdDsKKyAgICAKKyAgICB2b2lkIHNvcnQoKTsKKyAgICAKKyAgICBjb25zdCBWYWx1ZUxpc3Qm
IHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAKIHByaXZhdGU6CiAgICAgVmVj
dG9yPHVuc2lnbmVkLCAwLCBPdmVyZmxvd0hhbmRsZXIsIDE+IG1fbWFwOwpAQCAtMTI5LDYgKzEz
MywxMiBAQCBib29sIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmNvCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3ZvaWQgSW5kZXhTcGFyc2VTZXQ8T3Zl
cmZsb3dIYW5kbGVyPjo6c29ydCgpCit7CisgICAgc3RkOjpzb3J0KG1fdmFsdWVzLmJlZ2luKCks
IG1fdmFsdWVzLmVuZCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
PgogYXV0byBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpiZWdpbigpIGNvbnN0IC0+
IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL1dURi93dGYvU3Rk
TGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw2ICs0MDgsNDUgQEAgc3RydWN0IFJl
bW92ZUNWQW5kUmVmZXJlbmNlICB7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9j
djx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGU+Ojp0eXBlIHR5cGU7CiB9
OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGVMZWZ0LCB0eXBlbmFtZSBJdGVyYXRv
clR5cGVSaWdodCwgdHlwZW5hbWUgSXRlcmF0b3JUeXBlRHN0PgorSXRlcmF0b3JUeXBlRHN0IG1l
cmdlRGVkdXBsaWNhdGVkU29ydGVkKEl0ZXJhdG9yVHlwZUxlZnQgbGVmdEJlZ2luLCBJdGVyYXRv
clR5cGVMZWZ0IGxlZnRFbmQsIEl0ZXJhdG9yVHlwZVJpZ2h0IHJpZ2h0QmVnaW4sIEl0ZXJhdG9y
VHlwZVJpZ2h0IHJpZ2h0RW5kLCBJdGVyYXRvclR5cGVEc3QgZHN0QmVnaW4pCit7CisgICAgSXRl
cmF0b3JUeXBlTGVmdCBsZWZ0SXRlciA9IGxlZnRCZWdpbjsKKyAgICBJdGVyYXRvclR5cGVSaWdo
dCByaWdodEl0ZXIgPSByaWdodEJlZ2luOworICAgIEl0ZXJhdG9yVHlwZURzdCBkc3RJdGVyID0g
ZHN0QmVnaW47CisgICAgCisgICAgaWYgKGxlZnRJdGVyIDwgbGVmdEVuZCAmJiByaWdodEl0ZXIg
PCByaWdodEVuZCkgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBhdXRvIGxlZnQg
PSAqbGVmdEl0ZXI7CisgICAgICAgICAgICBhdXRvIHJpZ2h0ID0gKnJpZ2h0SXRlcjsKKyAgICAg
ICAgICAgIGlmIChsZWZ0IDwgcmlnaHQpIHsKKyAgICAgICAgICAgICAgICAqZHN0SXRlcisrID0g
bGVmdDsKKyAgICAgICAgICAgICAgICBsZWZ0SXRlcisrOworICAgICAgICAgICAgICAgIGlmIChs
ZWZ0SXRlciA+PSBsZWZ0RW5kKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAobGVmdCA9PSByaWdodCkgeworICAgICAgICAgICAgICAgICpkc3RJdGVy
KysgPSBsZWZ0OworICAgICAgICAgICAgICAgIGxlZnRJdGVyKys7CisgICAgICAgICAgICAgICAg
cmlnaHRJdGVyKys7CisgICAgICAgICAgICAgICAgaWYgKGxlZnRJdGVyID49IGxlZnRFbmQgfHwg
cmlnaHRJdGVyID49IHJpZ2h0RW5kKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKmRzdEl0ZXIrKyA9IHJpZ2h0OworICAg
ICAgICAgICAgICAgIHJpZ2h0SXRlcisrOworICAgICAgICAgICAgICAgIGlmIChyaWdodEl0ZXIg
Pj0gcmlnaHRFbmQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHdoaWxlIChsZWZ0SXRlciA8IGxlZnRFbmQpCisg
ICAgICAgICpkc3RJdGVyKysgPSAqbGVmdEl0ZXIrKzsKKyAgICB3aGlsZSAocmlnaHRJdGVyIDwg
cmlnaHRFbmQpCisgICAgICAgICpkc3RJdGVyKysgPSAqcmlnaHRJdGVyKys7CisgICAgCisgICAg
cmV0dXJuIGRzdEl0ZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAvLyBUaGlzIHZlcnNp
b24gb2YgcGxhY2VtZW50IG5ldyBvbWl0cyBhIDAgY2hlY2suCkBAIC00ODksNiArNTI4LDcgQEAg
dXNpbmcgV1RGOjppc0NvbXBpbGF0aW9uVGhyZWFkOwogdXNpbmcgV1RGOjppc1BvaW50ZXJBbGln
bmVkOwogdXNpbmcgV1RGOjppc1N0YXRlbGVzc0xhbWJkYTsKIHVzaW5nIFdURjo6aXM4Qnl0ZUFs
aWduZWQ7Cit1c2luZyBXVEY6Om1lcmdlRGVkdXBsaWNhdGVkU29ydGVkOwogdXNpbmcgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mOwogdXNpbmcgV1RGOjpzYWZlQ2FzdDsKIHVzaW5nIFdURjo6dHJ5
QmluYXJ5U2VhcmNoOwpJbmRleDogU291cmNlL1dURi93dGYvVmVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDIxNDQwNCkKKysrIFNvdXJjZS9X
VEYvd3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjkwLDcgKzEyOTAsNyBAQCBib29s
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAvLyB2ZWN0b3IncyBjYXBhY2l0
eSBpcyBsYXJnZSBlbm91Z2ggZm9yIHRoZSBhcHBlbmQgdG8gc3VjY2VlZC4KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KLWlubGluZSB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46
OnVuY2hlY2tlZEFwcGVuZChVJiYgdmFsdWUpCitBTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dW5jaGVja2Vk
QXBwZW5kKFUmJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2l6ZSgpIDwgY2FwYWNpdHkoKSk7CiAK
QEAgLTE1MDEsMTAgKzE1MDEsMjYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFZhbHVl
Q2hlY2s8VgogfTsKICNlbmRpZgogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBl
bmFtZSBGdW5jPgorc2l6ZV90IHJlbW92ZVJlcGVhdGVkRWxlbWVudHMoVmVjdG9yVHlwZSYgdmVj
dG9yLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIGF1dG8gZW5kID0gc3RkOjp1bmlxdWUodmVj
dG9yLmJlZ2luKCksIHZlY3Rvci5lbmQoKSwgZnVuYyk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBl
bmQgLSB2ZWN0b3IuYmVnaW4oKTsKKyAgICB2ZWN0b3IucmVzaXplKG5ld1NpemUpOworICAgIHJl
dHVybiBuZXdTaXplOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgorc2l6ZV90
IHJlbW92ZVJlcGVhdGVkRWxlbWVudHMoVmVjdG9yVHlwZSYgdmVjdG9yKQoreworICAgIHJldHVy
biByZW1vdmVSZXBlYXRlZEVsZW1lbnRzKHZlY3RvciwgW10gKGF1dG8mIGEsIGF1dG8mIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6
OlZlY3RvcjsKIHVzaW5nIFdURjo6VW5zYWZlVmVjdG9yT3ZlcmZsb3c7CiB1c2luZyBXVEY6Om5v
dEZvdW5kOwordXNpbmcgV1RGOjpyZW1vdmVSZXBlYXRlZEVsZW1lbnRzOwogCiAjZW5kaWYgLy8g
V1RGX1ZlY3Rvcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305435</attachid>
            <date>2017-03-26 13:34:05 -0700</date>
            <delta_ts>2017-03-26 15:01:47 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22849</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NDA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDE3LTAzLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWlyOjpMaXZlbmVzcyBzaG91bGRuJ3QgbmVlZCBIYXNoU2V0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTAyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNvbnZlcnRzIEFpcjo6
TGl2ZW5lc3M8PiB0byBubyBsb25nZXIgdXNlIEhhc2hTZXRzIG9yIEJpdFZlY3RvcnMuIFRoaXMg
dHVybnMgb3V0IHRvIGJlCisgICAgICAgIGVhc3kgYmVjYXVzZSBpdCdzIGNoZWFwIGVub3VnaCB0
byBkbyBhIHNvcnRlZCBtZXJnZSBvZiB0aGUgdGhpbmdzIGJlaW5nIGFkZGVkIHRvIGxpdmVBdEhl
YWQgYW5kCisgICAgICAgIHRoZSB0aGluZ3MgaW4gdGhlIHByZWRlY2Vzc29ycycgbGl2ZUF0VGFp
bC4gVGhpcyB0dXJucyBvdXQgdG8gYmUgZmFzdGVyIC0gaXQncyBhIDIlIG92ZXJhbGwKKyAgICAg
ICAgY29tcGlsZSB0aW1lIHByb2dyZXNzaW9uIG9uIFdhc21CZW5jaC4KKyAgICAgICAgCisgICAg
ICAgIEFsc28gYWRkZWQgbW9yZSBwaGFzZSB0aW1pbmcgc3VwcG9ydC4gWW91IGNhbiBub3cgZ2V0
IHBoYXNlIHRpbWUgdG90YWxzLgorCisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOiBBZGQgYSBGSVhNRSB1bnJl
bGF0ZWQgdG8gdGhpcyBwYXRjaC4KKyAgICAgICAgKiBiMy9CM1RpbWluZ1Njb3BlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OlRpbWluZ1Njb3BlOjpUaW1pbmdTY29wZSk6CisgICAgICAgIChKU0M6
OkIzOjpUaW1pbmdTY29wZTo6flRpbWluZ1Njb3BlKToKKyAgICAgICAgKiBiMy9CM1RpbWluZ1Nj
b3BlLmg6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkFic3RyYWN0TGl2ZW5lc3MpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpMb2NhbENhbGM6OkxvY2FsQ2FsYyk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OnJhd0xpdmVBdEhlYWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpsaXZlQXRIZWFkKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6bGl2ZUF0VGFpbCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcC5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmJhbmspOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OnRtcEluZGV4KToKKyAgICAgICAgKiBkZmcvREZH
U3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDoKKwogMjAxNy0wMy0yNSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB3YXNtIGJ5IHJldHVybmluZyBh
ZnRlciB3ZSBkbyBUTFMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1h
Y3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJN
YWNyb3MuY3BwCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMiw2ICs2MTIsNyBAQCBwcml2
YXRlOgogCiBib29sIGxvd2VyTWFjcm9zKFByb2NlZHVyZSYgcHJvYykKIHsKKyAgICBQaGFzZVNj
b3BlIHBoYXNlU2NvcGUocHJvYywgIkIzOjpsb3dlck1hY3JvcyIpOwogICAgIExvd2VyTWFjcm9z
IGxvd2VyTWFjcm9zKHByb2MpOwogICAgIHJldHVybiBsb3dlck1hY3Jvcy5ydW4oKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAy
MTQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU5Nyw2ICsyNTk3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8v
IFRoaXMgcGF0dGVybiBpcyBzdXBlciB1c2VmdWwgb24gYm90aCB4ODYgYW5kIEFSTTY0LCBzaW5j
ZSB0aGUgaW52ZXJzaW9uIG9mIHRoZSBDQVMgcmVzdWx0CiAgICAgICAgICAgICAvLyBjYW4gYmUg
ZG9uZSB3aXRoIHplcm8gY29zdCBvbiB4ODYgKGp1c3QgZmxpcCB0aGUgc2V0IGZyb20gRSB0byBO
RSkgYW5kIGl0J3MgYSBwcm9ncmVzc2lvbgogICAgICAgICAgICAgLy8gb24gQVJNNjQgKHNpbmNl
IFNUWCByZXR1cm5zIDAgb24gc3VjY2Vzcywgc28gb3JkaW5hcmlseSB3ZSBoYXZlIHRvIGZsaXAg
aXQpLgorICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcgZm9yIEF0b21pY1N0
cm9uZ0NBUworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2OTg2NwogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgx
KQogICAgICAgICAgICAgICAgICYmIGlzQXRvbWljQ0FTKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNv
ZGUoKSkKICAgICAgICAgICAgICAgICAmJiBjYW5CZUludGVybmFsKG1fdmFsdWUtPmNoaWxkKDAp
KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVGltaW5nU2NvcGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1RpbWluZ1Njb3BlLmNwcAko
cmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVGltaW5nU2Nv
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDIzICsyOSw1MyBAQAogI2lmIEVOQUJMRShCM19KSVQp
CiAKICNpbmNsdWRlICJCM0NvbW1vbi5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgog
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvTG9jay5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAorbmFt
ZXNwYWNlIHsKKworY2xhc3MgU3RhdGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YXRl
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTdGF0ZSgpIHsg
fQorICAgIAorICAgIFNlY29uZHMgYWRkVG9Ub3RhbChjb25zdCBjaGFyKiBuYW1lLCBTZWNvbmRz
IGR1cmF0aW9uKQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhsb2NrKTsK
KyAgICAgICAgcmV0dXJuIHRvdGFscy5hZGQobmFtZSwgU2Vjb25kcygwKSkuaXRlcmF0b3ItPnZh
bHVlICs9IGR1cmF0aW9uOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxjb25z
dCBjaGFyKiwgU2Vjb25kcz4gdG90YWxzOworICAgIExvY2sgbG9jazsKK307CisKK1N0YXRlJiBz
dGF0ZSgpCit7CisgICAgc3RhdGljIEF0b21pYzxTdGF0ZSo+IHNfc3RhdGU7CisgICAgcmV0dXJu
IGVuc3VyZVBvaW50ZXIoc19zdGF0ZSwgW10geyByZXR1cm4gbmV3IFN0YXRlKCk7IH0pOworfQor
Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwogVGltaW5nU2NvcGU6OlRpbWluZ1Njb3BlKGNv
bnN0IGNoYXIqIG5hbWUpCiAgICAgOiBtX25hbWUobmFtZSkKIHsKICAgICBpZiAoc2hvdWxkTWVh
c3VyZVBoYXNlVGltaW5nKCkpCi0gICAgICAgIG1fYmVmb3JlID0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lTVMoKTsKKyAgICAgICAgbV9iZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsK
IH0KIAogVGltaW5nU2NvcGU6On5UaW1pbmdTY29wZSgpCiB7CiAgICAgaWYgKHNob3VsZE1lYXN1
cmVQaGFzZVRpbWluZygpKSB7Ci0gICAgICAgIGRvdWJsZSBhZnRlciA9IG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZU1TKCk7Ci0gICAgICAgIGRhdGFMb2coIltCM10gIiwgbV9uYW1lLCAiIHRv
b2s6ICIsIGFmdGVyIC0gbV9iZWZvcmUsICIgbXMuXG4iKTsKKyAgICAgICAgU2Vjb25kcyBkdXJh
dGlvbiA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9iZWZvcmU7CisgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAiW0IzXSAiLCBtX25hbWUsICIgdG9vazogIiwgZHVyYXRpb24ubWlsbGlz
ZWNvbmRzKCksICIgbXMgIiwKKyAgICAgICAgICAgICIodG90YWw6ICIsIHN0YXRlKCkuYWRkVG9U
b3RhbChtX25hbWUsIGR1cmF0aW9uKS5taWxsaXNlY29uZHMoKSwgIiBtcykuXG4iKTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1RpbWluZ1Njb3BlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVGltaW5nU2NvcGUuaAkocmV2
aXNpb24gMjE0NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVGltaW5nU2NvcGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisj
aW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0zOSw3ICs0MCw3IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICBjb25zdCBjaGFyKiBtX25hbWU7Ci0gICAgZG91YmxlIG1f
YmVmb3JlOworICAgIE1vbm90b25pY1RpbWUgbV9iZWZvcmU7CiB9OwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3Bw
CShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1
Nyw3ICsyMjU3LDcgQEAgcHJpdmF0ZToKIAogdm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZyhDb2RlJiBjb2RlKQogewotICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAi
QWlyOjphbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyIpOworICAgIFBoYXNlU2NvcGUg
cGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmciKTsKICAg
ICAKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2coIkNvZGUgYmVmb3JlIGdyYXBoIGNv
bG9yaW5nOlxuIiwgY29kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJMaXZlbmVzcy5oCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKICNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgogI2lu
Y2x1ZGUgIkFpclRtcElubGluZXMuaCIKKyNpbmNsdWRlICJCM1RpbWluZ1Njb3BlLmgiCiAjaW5j
bHVkZSA8d3RmL0luZGV4TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0luZGV4U2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL0luZGV4U3BhcnNlU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKQEAg
LTQxLDggKzQxLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQog
CiB0ZW1wbGF0ZTxCYW5rIGFkYXB0ZXJCYW5rLCBBcmc6OlRlbXBlcmF0dXJlIG1pbmltdW1UZW1w
ZXJhdHVyZSA9IEFyZzo6Q29sZD4KIHN0cnVjdCBUbXBMaXZlbmVzc0FkYXB0ZXIgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogbmFtZSA9ICJUbXBMaXZlbmVzcyI7CiAgICAgdHlw
ZWRlZiBUbXAgVGhpbmc7Ci0gICAgdHlwZWRlZiBIYXNoU2V0PHVuc2lnbmVkPiBJbmRleFNldDsK
IAogICAgIFRtcExpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAKQEAgLTU4LDggKzU4LDggQEAg
c3RydWN0IFRtcExpdmVuZXNzQWRhcHRlciB7CiB9OwogCiBzdHJ1Y3QgU3RhY2tTbG90TGl2ZW5l
c3NBZGFwdGVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIG5hbWUgPSAiU3Rh
Y2tTbG90TGl2ZW5lc3MiOwogICAgIHR5cGVkZWYgU3RhY2tTbG90KiBUaGluZzsKLSAgICB0eXBl
ZGVmIEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFzaCwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IEluZGV4U2V0OwogCiAgICAg
U3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyKENvZGUmIGNvZGUpCiAgICAgICAgIDogbV9jb2RlKGNv
ZGUpCkBAIC04MCw4ICs4MCw4IEBAIHByaXZhdGU6CiB9OwogCiBzdHJ1Y3QgUmVnTGl2ZW5lc3NB
ZGFwdGVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIG5hbWUgPSAiUmVnTGl2
ZW5lc3MiOwogICAgIHR5cGVkZWYgUmVnIFRoaW5nOwotICAgIHR5cGVkZWYgQml0VmVjdG9yIElu
ZGV4U2V0OwogCiAgICAgUmVnTGl2ZW5lc3NBZGFwdGVyKENvZGUmKSB7IH0KIApAQCAtMTAxLDYg
KzEwMSw3IEBAIGNsYXNzIEFic3RyYWN0TGl2ZW5lc3MgOiBwdWJsaWMgQWRhcHRlciAKICAgICBz
dHJ1Y3QgV29ya3NldDsKIHB1YmxpYzoKICAgICB0eXBlZGVmIHR5cGVuYW1lIEFkYXB0ZXI6OlRo
aW5nIFRoaW5nOworICAgIHR5cGVkZWYgVmVjdG9yPHVuc2lnbmVkLCA0LCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4gSW5kZXhWZWN0b3I7CiAgICAgCiAgICAgQWJzdHJhY3RMaXZlbmVzcyhDb2RlJiBj
b2RlKQogICAgICAgICA6IEFkYXB0ZXIoY29kZSkKQEAgLTEwOCwyNCArMTA5LDMxIEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2xpdmVBdEhlYWQoY29kZS5zaXplKCkpCiAgICAgICAgICwgbV9saXZl
QXRUYWlsKGNvZGUuc2l6ZSgpKQogICAgIHsKKyAgICAgICAgVGltaW5nU2NvcGUgdGltaW5nU2Nv
cGUoQWRhcHRlcjo6bmFtZSk7CisgICAgICAgIAogICAgICAgICAvLyBUaGUgbGl2ZUF0VGFpbCBv
ZiBlYWNoIGJsb2NrIGF1dG9tYXRpY2FsbHkgY29udGFpbnMgdGhlIExhdGVVc2UncyBvZiB0aGUg
dGVybWluYWwuCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAg
ICAgICAgICB0eXBlbmFtZSBBZGFwdGVyOjpJbmRleFNldCYgbGl2ZUF0VGFpbCA9IG1fbGl2ZUF0
VGFpbFtibG9ja107CisgICAgICAgICAgICBJbmRleFZlY3RvciYgbGl2ZUF0VGFpbCA9IG1fbGl2
ZUF0VGFpbFtibG9ja107CiAKICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCkuZm9yRWFjaDx0eXBl
bmFtZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFw
dGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGJhbmssIFdpZHRoKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZVVzZShyb2xlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgQWRhcHRlcjo6YWNjZXB0c0JhbmsoYmFuaykKICAgICAgICAgICAgICAg
ICAgICAgICAgICYmIEFkYXB0ZXI6OmFjY2VwdHNSb2xlKHJvbGUpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbGl2ZUF0VGFpbC5hZGQoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLmFwcGVuZChBZGFwdGVyOjp2YWx1ZVRv
SW5kZXgodGhpbmcpKTsKICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3RkOjpzb3J0KGxpdmVBdFRhaWwuYmVnaW4oKSwgbGl2ZUF0VGFpbC5lbmQoKSk7Cisg
ICAgICAgICAgICByZW1vdmVSZXBlYXRlZEVsZW1lbnRzKGxpdmVBdFRhaWwpOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gQmxvY2tzIHdpdGggbmV3IGxpdmUgdmFsdWVzIGF0IHRhaWwuCiAgICAg
ICAgIEJpdFZlY3RvciBkaXJ0eUJsb2NrczsKLSAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBjb2RlLnNpemUoKTsgKytibG9ja0luZGV4KQorICAgICAgICBm
b3IgKHNpemVfdCBibG9ja0luZGV4ID0gY29kZS5zaXplKCk7IGJsb2NrSW5kZXgtLTspCiAgICAg
ICAgICAgICBkaXJ0eUJsb2Nrcy5zZXQoYmxvY2tJbmRleCk7Ci0KKyAgICAgICAgCisgICAgICAg
IEluZGV4VmVjdG9yIG1lcmdlQnVmZmVyOworICAgICAgICAKICAgICAgICAgYm9vbCBjaGFuZ2Vk
OwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CkBAIC0xNTEsNyAr
MTU5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd29ya3NldC5y
ZW1vdmUoQWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0pOwogCi0gICAgICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiYgbGl2ZUF0SGVhZCA9IG1f
bGl2ZUF0SGVhZFtibG9ja107CisgICAgICAgICAgICAgICAgSW5kZXhWZWN0b3ImIGxpdmVBdEhl
YWQgPSBtX2xpdmVBdEhlYWRbYmxvY2tdOwogCiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBj
YXJlIGFib3V0IFRtcHMgdGhhdCB3ZXJlIGRpc2NvdmVyZWQgaW4gdGhpcyBpdGVyYXRpb24uIEl0
IGlzIGltcG9zc2libGUKICAgICAgICAgICAgICAgICAvLyB0byByZW1vdmUgYSBsaXZlIHZhbHVl
IGZyb20gdGhlIGhlYWQuCkBAIC0xNzAsMTUgKzE3OCwzMiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgbGl2ZUF0SGVhZC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0SGVhZC5zaXplKCkgKyBtX3dv
cmtzZXQuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDog
bV93b3Jrc2V0KQogICAgICAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnVuY2hlY2tlZEFwcGVu
ZChuZXdWYWx1ZSk7Ci0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3dvcmtz
ZXQuc29ydCgpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAoQmFzaWNC
bG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgQWRhcHRlcjo6SW5kZXhTZXQmIGxpdmVBdFRhaWwgPSBtX2xpdmVB
dFRhaWxbcHJlZGVjZXNzb3JdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5l
d1ZhbHVlIDogbV93b3Jrc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGl2ZUF0
VGFpbC5hZGQobmV3VmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFk
aXJ0eUJsb2Nrcy5xdWlja1NldChwcmVkZWNlc3Nvci0+aW5kZXgoKSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBJbmRleFZlY3RvciYgbGl2ZUF0VGFpbCA9IG1fbGl2
ZUF0VGFpbFtwcmVkZWNlc3Nvcl07CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAobGl2ZUF0VGFpbC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBsaXZlQXRUYWlsID0gbV93b3Jrc2V0LnZhbHVlcygpOworICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQnVmZmVyLnJlc2l6ZSgwKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQnVmZmVyLnJlc2VydmVDYXBhY2l0eShsaXZlQXRU
YWlsLnNpemUoKSArIG1fd29ya3NldC5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBpdGVyID0gbWVyZ2VEZWR1cGxpY2F0ZWRTb3J0ZWQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGl2ZUF0VGFpbC5iZWdpbigpLCBsaXZlQXRUYWlsLmVuZCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fd29ya3NldC5iZWdpbigpLCBtX3dvcmtzZXQuZW5kKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCdWZmZXIuYmVnaW4oKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtZXJnZUJ1ZmZlci5yZXNpemUoaXRlciAtIG1lcmdlQnVmZmVyLmJl
Z2luKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobWVyZ2VCdWZmZXIuc2l6ZSgpID09IGxpdmVBdFRhaWwuc2l6ZSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lcmdlQnVmZmVyLnNpemUoKSA+IGxp
dmVBdFRhaWwuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwgPSBt
ZXJnZUJ1ZmZlcjsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgZGlydHlCbG9ja3MucXVpY2tTZXQocHJlZGVjZXNzb3ItPmlu
ZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwpAQCAtMTkz
LDcgKzIxOCw3IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICAgICAgYXV0byYgd29ya3Nl
dCA9IGxpdmVuZXNzLm1fd29ya3NldDsKICAgICAgICAgICAgIHdvcmtzZXQuY2xlYXIoKTsKLSAg
ICAgICAgICAgIHR5cGVuYW1lIEFkYXB0ZXI6OkluZGV4U2V0JiBsaXZlQXRUYWlsID0gbGl2ZW5l
c3MubV9saXZlQXRUYWlsW2Jsb2NrXTsKKyAgICAgICAgICAgIEluZGV4VmVjdG9yJiBsaXZlQXRU
YWlsID0gbGl2ZW5lc3MubV9saXZlQXRUYWlsW2Jsb2NrXTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW5kZXggOiBsaXZlQXRUYWlsKQogICAgICAgICAgICAgICAgIHdvcmtzZXQuYWRkKGlu
ZGV4KTsKICAgICAgICAgfQpAQCAtMzA1LDcgKzMzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgQmFz
aWNCbG9jayogbV9ibG9jazsKICAgICB9OwogCi0gICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYg
cmF3TGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICBjb25zdCBJbmRleFZlY3RvciYg
cmF3TGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIHJldHVybiBt
X2xpdmVBdEhlYWRbYmxvY2tdOwogICAgIH0KQEAgLTM3MywxNCArMzk4LDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgY29uc3QgVW5kZXJseWluZ0l0ZXJhYmxlJiBtX2l0ZXJhYmxlOwogICAgIH07CiAK
LSAgICBJdGVyYWJsZTxWZWN0b3I8dW5zaWduZWQ+PiBsaXZlQXRIZWFkKEJhc2ljQmxvY2sqIGJs
b2NrKQorICAgIEl0ZXJhYmxlPEluZGV4VmVjdG9yPiBsaXZlQXRIZWFkKEJhc2ljQmxvY2sqIGJs
b2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPFZlY3Rvcjx1bnNpZ25lZD4+KCp0
aGlzLCBtX2xpdmVBdEhlYWRbYmxvY2tdKTsKKyAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPEluZGV4
VmVjdG9yPigqdGhpcywgbV9saXZlQXRIZWFkW2Jsb2NrXSk7CiAgICAgfQogCi0gICAgSXRlcmFi
bGU8dHlwZW5hbWUgQWRhcHRlcjo6SW5kZXhTZXQ+IGxpdmVBdFRhaWwoQmFzaWNCbG9jayogYmxv
Y2spCisgICAgSXRlcmFibGU8SW5kZXhWZWN0b3I+IGxpdmVBdFRhaWwoQmFzaWNCbG9jayogYmxv
Y2spCiAgICAgewotICAgICAgICByZXR1cm4gSXRlcmFibGU8dHlwZW5hbWUgQWRhcHRlcjo6SW5k
ZXhTZXQ+KCp0aGlzLCBtX2xpdmVBdFRhaWxbYmxvY2tdKTsKKyAgICAgICAgcmV0dXJuIEl0ZXJh
YmxlPEluZGV4VmVjdG9yPigqdGhpcywgbV9saXZlQXRUYWlsW2Jsb2NrXSk7CiAgICAgfQogCiAg
ICAgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiB3b3Jrc2V0KCkgeyByZXR1
cm4gbV93b3Jrc2V0OyB9CkBAIC0zOTAsOCArNDE1LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQg
c3RydWN0IExvY2FsQ2FsYzo6SXRlcmFibGU7CiAKICAgICBJbmRleFNwYXJzZVNldDxVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4gbV93b3Jrc2V0OwotICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFZlY3Rv
cjx1bnNpZ25lZD4+IG1fbGl2ZUF0SGVhZDsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCB0eXBl
bmFtZSBBZGFwdGVyOjpJbmRleFNldD4gbV9saXZlQXRUYWlsOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2ssIEluZGV4VmVjdG9yPiBtX2xpdmVBdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9j
aywgSW5kZXhWZWN0b3I+IG1fbGl2ZUF0VGFpbDsKIH07CiAKIHRlbXBsYXRlPEJhbmsgYmFuaywg
QXJnOjpUZW1wZXJhdHVyZSBtaW5pbXVtVGVtcGVyYXR1cmUgPSBBcmc6OkNvbGQ+CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAkocmV2
aXNpb24gMjE0NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1h
Y3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogCiB2b2lkIGxvd2VyTWFjcm9zKENvZGUmIGNvZGUp
CiB7Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJsb3dlck1hY3JvcyIpOworICAg
IFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiQWlyOjpsb3dlck1hY3JvcyIpOwogCiAgICAg
SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogY29kZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShy
ZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQog
CisjaW5jbHVkZSAiQjNCYW5rLmgiCiAjaW5jbHVkZSAiRlBSSW5mby5oIgogI2luY2x1ZGUgIkdQ
UkluZm8uaCIKICNpbmNsdWRlICJSZWcuaCIKQEAgLTc1LDcgKzc2LDcgQEAgcHVibGljOgogICAg
IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFs
dWU7IH0KLQorICAgIAogICAgIGJvb2wgaXNHUCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gaXNFbmNvZGVkR1AobV92YWx1ZSk7CkBAIC04Niw2ICs4NywxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBpc0VuY29kZWRGUChtX3ZhbHVlKTsKICAgICB9CiAKKyAgICAvLyBGb3IgbnVs
bCB0bXBzLCByZXR1cm5zIEdQLgorICAgIEJhbmsgYmFuaygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNGUCgpID8gRlAgOiBHUDsKKyAgICB9CisKICAgICBib29sIGlzR1BSKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBpc0VuY29kZWRHUFIobV92YWx1ZSk7CkBAIC0xMzIs
NiArMTM5LDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBkZWNvZGVGUFRtcCht
X3ZhbHVlKTsKICAgICB9CisgICAgCisgICAgdW5zaWduZWQgdG1wSW5kZXgoQmFuayBiYW5rKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgICAgICByZXR1cm4g
Z3BUbXBJbmRleCgpOworICAgICAgICBBU1NFUlQoYmFuayA9PSBGUCk7CisgICAgICAgIHJldHVy
biBmcFRtcEluZGV4KCk7CisgICAgfQogCiAgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAog
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1
c3RlcmluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDIxNDQwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDEyICsxMzAsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBbJl0gKGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBDaGlsZEFuZE9y
aWdpbiYgYikgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmNoaWxkIDwg
Yi5jaGlsZDsKICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGF1dG8gZW5kID0gc3Rk
Ojp1bmlxdWUoCi0gICAgICAgICAgICAgICAgbV9uZWVkZWRCYXJyaWVycy5iZWdpbigpLCBtX25l
ZWRlZEJhcnJpZXJzLmVuZCgpLAorICAgICAgICAgICAgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cygK
KyAgICAgICAgICAgICAgICBtX25lZWRlZEJhcnJpZXJzLCAKICAgICAgICAgICAgICAgICBbJl0g
KGNvbnN0IENoaWxkQW5kT3JpZ2luJiBhLCBjb25zdCBDaGlsZEFuZE9yaWdpbiYgYikgLT4gYm9v
bHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY2hpbGQgPT0gYi5jaGlsZDsKICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGZvciAoYXV0byBpdGVyID0gbV9uZWVkZWRCYXJy
aWVycy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBmb3IgKGF1
dG8gaXRlciA9IG1fbmVlZGVkQmFycmllcnMuYmVnaW4oKTsgaXRlciAhPSBtX25lZWRlZEJhcnJp
ZXJzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGl0ZXIt
PmNoaWxkOwogICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWNPcmlnaW4gPSBpdGVy
LT5zZW1hbnRpY09yaWdpbjsKICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTQ0
MDQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIx
IEBACisyMDE3LTAzLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgQWlyOjpMaXZlbmVzcyBzaG91bGRuJ3QgbmVlZCBIYXNoU2V0cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTAyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAg
ICAoV1RGOjplbnN1cmVQb2ludGVyKTogVGhpcyBpcyBhIHVzZWZ1bCByZXBsYWNlbWVudCBmb3Ig
c3RkOjpvbmNlLCB3aGljaCByZXF1aXJlcyBsZXNzIGZlbmNpbmcuCisgICAgICAgICogd3RmL0lu
ZGV4U3BhcnNlU2V0Lmg6IEFkZCBzb21lIGhlbHBlcnMgZm9yIGEgSGFzaFNldC1mcmVlIGxpdmVu
ZXNzIGFuYWx5c2lzLgorICAgICAgICAoV1RGOjpJbmRleFNwYXJzZVNldDo6dmFsdWVzKToKKyAg
ICAgICAgKFdURjo6SW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6c29ydCk6CisgICAg
ICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RGOjptZXJnZURlZHVwbGljYXRl
ZFNvcnRlZCk6IFJhcGlkbHkgbWVyZ2UgdHdvIHNvcnRlZCBsaXN0cyB0aGF0IGRvbid0IGhhdmUg
ZHVwbGljYXRlcyB0byBwcm9kdWNlIGEgbmV3IHNvcnRlZCBsaXN0IHRoYXQgZG9lc24ndCBoYXZl
IGR1cGxpY2F0ZXMuCisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RGOjptaW5D
YXBhY2l0eT46OnVuY2hlY2tlZEFwcGVuZCk6IElubGluZSB0aGlzIQorICAgICAgICAoV1RGOjpy
ZW1vdmVSZXBlYXRlZEVsZW1lbnRzKTogVGhpcyBpcyBhIHZlcnNpb24gb2Ygc3RkOjp1bmlxdWUo
KSB0aGF0IHdvcmtzIG5hdHVyYWxseSBmb3IgVmVjdG9ycy4KKwogMjAxNy0wMy0yNCAgSkYgQmFz
dGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IHN0b3Jl
IHN0YXRlIGluIFRMUyBpbnN0ZWFkIG9mIG9uIFZNCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdG9t
aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lvbiAy
MTQ0MDQpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
OSw2ICs1MTksMjMgQEAgaW5saW5lIFQqIGNvbnN1bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeQog
I2VuZGlmCiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmM+CitBTFdBWVNf
SU5MSU5FIFQmIGVuc3VyZVBvaW50ZXIoQXRvbWljPFQqPiYgcG9pbnRlciwgY29uc3QgRnVuYyYg
ZnVuYykKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIFQqIG9sZFZhbHVlID0gcG9pbnRlci5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICBpZiAob2xkVmFsdWUpIHsK
KyAgICAgICAgICAgIC8vIE9uIGFsbCBzZW5zaWJsZSBDUFVzLCB3ZSBnZXQgYW4gaW1wbGljaXQg
ZGVwZW5kZW5jeS1iYXNlZCBsb2FkLWxvYWQgYmFycmllciB3aGVuCisgICAgICAgICAgICAvLyBs
b2FkaW5nIHRoaXMuCisgICAgICAgICAgICByZXR1cm4gKm9sZFZhbHVlOworICAgICAgICB9Cisg
ICAgICAgIFQqIG5ld1ZhbHVlID0gZnVuYygpOworICAgICAgICBpZiAocG9pbnRlci5jb21wYXJl
RXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBuZXdWYWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gKm5l
d1ZhbHVlOworICAgICAgICBkZWxldGUgbmV3VmFsdWU7CisgICAgfQorfQorCiB9IC8vIG5hbWVz
cGFjZSBXVEYKIAogdXNpbmcgV1RGOjpBdG9taWM7CkBAIC01MjgsNiArNTQ1LDcgQEAgdXNpbmcg
V1RGOjpUcmFuc2FjdGlvbkFib3J0TGlrZWxpaG9vZDsKIHVzaW5nIFdURjo6Y29uc3VtZTsKIHVz
aW5nIFdURjo6ZGVwZW5kZW5jeTsKIHVzaW5nIFdURjo6ZGVwZW5kZW5jeVdpdGg7Cit1c2luZyBX
VEY6OmVuc3VyZVBvaW50ZXI7CiB1c2luZyBXVEY6Om51bGxEZXBlbmRlbmN5OwogCiAjZW5kaWYg
Ly8gQXRvbWljc19oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgJKHJldmlzaW9uIDIxNDQw
NCkKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDYgKzU4LDEwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlTGlzdDo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdDsKICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdDsKKyAgICAKKyAgICB2b2lk
IHNvcnQoKTsKKyAgICAKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzOyB9CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPHVuc2lnbmVkLCAwLCBPdmVy
Zmxvd0hhbmRsZXIsIDE+IG1fbWFwOwpAQCAtMTI5LDYgKzEzMywxMiBAQCBib29sIEluZGV4U3Bh
cnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmNvCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK3ZvaWQgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6c29ydCgp
Cit7CisgICAgc3RkOjpzb3J0KG1fdmFsdWVzLmJlZ2luKCksIG1fdmFsdWVzLmVuZCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogYXV0byBJbmRleFNwYXJzZVNl
dDxPdmVyZmxvd0hhbmRsZXI+OjpiZWdpbigpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAg
ICAgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJF
eHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2
aXNpb24gMjE0NDA0KQorKysgU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwOCw2ICs0MDgsNDUgQEAgc3RydWN0IFJlbW92ZUNWQW5kUmVmZXJlbmNlICB7
CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdjx0eXBlbmFtZSBzdGQ6OnJlbW92
ZV9yZWZlcmVuY2U8VD46OnR5cGU+Ojp0eXBlIHR5cGU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBJdGVyYXRvclR5cGVMZWZ0LCB0eXBlbmFtZSBJdGVyYXRvclR5cGVSaWdodCwgdHlwZW5hbWUg
SXRlcmF0b3JUeXBlRHN0PgorSXRlcmF0b3JUeXBlRHN0IG1lcmdlRGVkdXBsaWNhdGVkU29ydGVk
KEl0ZXJhdG9yVHlwZUxlZnQgbGVmdEJlZ2luLCBJdGVyYXRvclR5cGVMZWZ0IGxlZnRFbmQsIEl0
ZXJhdG9yVHlwZVJpZ2h0IHJpZ2h0QmVnaW4sIEl0ZXJhdG9yVHlwZVJpZ2h0IHJpZ2h0RW5kLCBJ
dGVyYXRvclR5cGVEc3QgZHN0QmVnaW4pCit7CisgICAgSXRlcmF0b3JUeXBlTGVmdCBsZWZ0SXRl
ciA9IGxlZnRCZWdpbjsKKyAgICBJdGVyYXRvclR5cGVSaWdodCByaWdodEl0ZXIgPSByaWdodEJl
Z2luOworICAgIEl0ZXJhdG9yVHlwZURzdCBkc3RJdGVyID0gZHN0QmVnaW47CisgICAgCisgICAg
aWYgKGxlZnRJdGVyIDwgbGVmdEVuZCAmJiByaWdodEl0ZXIgPCByaWdodEVuZCkgeworICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICBhdXRvIGxlZnQgPSAqbGVmdEl0ZXI7CisgICAgICAg
ICAgICBhdXRvIHJpZ2h0ID0gKnJpZ2h0SXRlcjsKKyAgICAgICAgICAgIGlmIChsZWZ0IDwgcmln
aHQpIHsKKyAgICAgICAgICAgICAgICAqZHN0SXRlcisrID0gbGVmdDsKKyAgICAgICAgICAgICAg
ICBsZWZ0SXRlcisrOworICAgICAgICAgICAgICAgIGlmIChsZWZ0SXRlciA+PSBsZWZ0RW5kKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdCA9
PSByaWdodCkgeworICAgICAgICAgICAgICAgICpkc3RJdGVyKysgPSBsZWZ0OworICAgICAgICAg
ICAgICAgIGxlZnRJdGVyKys7CisgICAgICAgICAgICAgICAgcmlnaHRJdGVyKys7CisgICAgICAg
ICAgICAgICAgaWYgKGxlZnRJdGVyID49IGxlZnRFbmQgfHwgcmlnaHRJdGVyID49IHJpZ2h0RW5k
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgKmRzdEl0ZXIrKyA9IHJpZ2h0OworICAgICAgICAgICAgICAgIHJpZ2h0SXRl
cisrOworICAgICAgICAgICAgICAgIGlmIChyaWdodEl0ZXIgPj0gcmlnaHRFbmQpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHdoaWxlIChsZWZ0SXRlciA8IGxlZnRFbmQpCisgICAgICAgICpkc3RJdGVyKysgPSAq
bGVmdEl0ZXIrKzsKKyAgICB3aGlsZSAocmlnaHRJdGVyIDwgcmlnaHRFbmQpCisgICAgICAgICpk
c3RJdGVyKysgPSAqcmlnaHRJdGVyKys7CisgICAgCisgICAgcmV0dXJuIGRzdEl0ZXI7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdURgogCiAvLyBUaGlzIHZlcnNpb24gb2YgcGxhY2VtZW50IG5ldyBv
bWl0cyBhIDAgY2hlY2suCkBAIC00ODksNiArNTI4LDcgQEAgdXNpbmcgV1RGOjppc0NvbXBpbGF0
aW9uVGhyZWFkOwogdXNpbmcgV1RGOjppc1BvaW50ZXJBbGlnbmVkOwogdXNpbmcgV1RGOjppc1N0
YXRlbGVzc0xhbWJkYTsKIHVzaW5nIFdURjo6aXM4Qnl0ZUFsaWduZWQ7Cit1c2luZyBXVEY6Om1l
cmdlRGVkdXBsaWNhdGVkU29ydGVkOwogdXNpbmcgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mOwog
dXNpbmcgV1RGOjpzYWZlQ2FzdDsKIHVzaW5nIFdURjo6dHJ5QmluYXJ5U2VhcmNoOwpJbmRleDog
U291cmNlL1dURi93dGYvVmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVmVj
dG9yLmgJKHJldmlzaW9uIDIxNDQwNCkKKysrIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjkwLDcgKzEyOTAsNyBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dICiAvLyB2ZWN0b3IncyBjYXBhY2l0eSBpcyBsYXJnZSBlbm91Z2ggZm9y
IHRoZSBhcHBlbmQgdG8gc3VjY2VlZC4KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eT4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnVuY2hlY2tlZEFwcGVuZChVJiYg
dmFsdWUpCitBTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dW5jaGVja2VkQXBwZW5kKFUmJiB2YWx1ZSkKIHsK
ICAgICBBU1NFUlQoc2l6ZSgpIDwgY2FwYWNpdHkoKSk7CiAKQEAgLTE1MDEsMTAgKzE1MDEsMjYg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFZhbHVlQ2hlY2s8VgogfTsKICNlbmRpZgog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBlbmFtZSBGdW5jPgorc2l6ZV90IHJl
bW92ZVJlcGVhdGVkRWxlbWVudHMoVmVjdG9yVHlwZSYgdmVjdG9yLCBjb25zdCBGdW5jJiBmdW5j
KQoreworICAgIGF1dG8gZW5kID0gc3RkOjp1bmlxdWUodmVjdG9yLmJlZ2luKCksIHZlY3Rvci5l
bmQoKSwgZnVuYyk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBlbmQgLSB2ZWN0b3IuYmVnaW4oKTsK
KyAgICB2ZWN0b3IucmVzaXplKG5ld1NpemUpOworICAgIHJldHVybiBuZXdTaXplOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgorc2l6ZV90IHJlbW92ZVJlcGVhdGVkRWxlbWVu
dHMoVmVjdG9yVHlwZSYgdmVjdG9yKQoreworICAgIHJldHVybiByZW1vdmVSZXBlYXRlZEVsZW1l
bnRzKHZlY3RvciwgW10gKGF1dG8mIGEsIGF1dG8mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlZlY3RvcjsKIHVzaW5nIFdURjo6
VW5zYWZlVmVjdG9yT3ZlcmZsb3c7CiB1c2luZyBXVEY6Om5vdEZvdW5kOwordXNpbmcgV1RGOjpy
ZW1vdmVSZXBlYXRlZEVsZW1lbnRzOwogCiAjZW5kaWYgLy8gV1RGX1ZlY3Rvcl9oCg==
</data>
<flag name="review"
          id="326875"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>