<?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>160370</bug_id>
          
          <creation_ts>2016-07-29 18:33:29 -0700</creation_ts>
          <short_desc>[JSC] Simplify the initialization of AbstractValue in the AbstractInterpreter</short_desc>
          <delta_ts>2016-08-03 01:59:21 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1215789</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-07-29 18:33:29 -0700</bug_when>
    <thetext>[JSC] Simplify the initialization of AbstractValue in the AbstractInterpreter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215793</commentid>
    <comment_count>1</comment_count>
      <attachid>284927</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-07-29 18:44:20 -0700</bug_when>
    <thetext>Created attachment 284927
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215794</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-07-29 18:45:50 -0700</bug_when>
    <thetext>This removes a lot of code from AI but it is unfortunately neutral on my machine:

                                               Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                 4.6607+-0.0570     ?      4.7053+-0.0694        ?
   3d-morph                                4.9754+-0.0189     ?      4.9997+-0.0682        ?
   3d-raytrace                             4.9289+-0.0512            4.8952+-0.0288        
   access-binary-trees                     1.9846+-0.0223            1.9577+-0.0177          might be 1.0137x faster
   access-fannkuch                         6.0715+-0.1012     ^      5.7134+-0.0343        ^ definitely 1.0627x faster
   access-nbody                            2.3853+-0.0301            2.3680+-0.0180        
   access-nsieve                           2.9449+-0.0209            2.9354+-0.0185        
   bitops-3bit-bits-in-byte                1.0668+-0.0152     ?      1.0778+-0.0155        ? might be 1.0103x slower
   bitops-bits-in-byte                     2.5943+-0.0213            2.5793+-0.0169        
   bitops-bitwise-and                      2.0036+-0.0239            2.0009+-0.0236        
   bitops-nsieve-bits                      3.0817+-0.0104     ?      3.0856+-0.0118        ?
   controlflow-recursive                   2.3074+-0.0138            2.2908+-0.0127        
   crypto-aes                              4.4115+-0.0274     ?      4.4317+-0.0225        ?
   crypto-md5                              2.6880+-0.0325            2.6736+-0.0548        
   crypto-sha1                             2.7485+-0.0254            2.7223+-0.0172        
   date-format-tofte                       6.4954+-0.0599            6.3953+-0.0442          might be 1.0157x faster
   date-format-xparb                       4.7952+-0.1289            4.7482+-0.0364        
   math-cordic                             2.7721+-0.0600            2.7366+-0.0179          might be 1.0130x faster
   math-partial-sums                       4.0024+-0.0273            3.9921+-0.0361        
   math-spectral-norm                      2.0450+-0.0270            2.0450+-0.0252        
   regexp-dna                              6.3581+-0.0782            6.3234+-0.0645        
   string-base64                           4.0282+-0.0512            3.9801+-0.0235          might be 1.0121x faster
   string-fasta                            5.4896+-0.0258     ?      5.5056+-0.0268        ?
   string-tagcloud                         8.3279+-0.0888            8.3228+-0.0722        
   string-unpack-code                     18.2259+-0.1800     ?     18.2791+-0.1459        ?
   string-validate-input                   4.0653+-0.0221     ?      4.1522+-0.1349        ? might be 1.0214x slower

   &lt;arithmetic&gt;                            4.4407+-0.0114            4.4199+-0.0119          might be 1.0047x faster

                                               Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                87.836+-0.724             87.421+-0.691         
   audio-beat-detection                    38.855+-0.089             38.788+-0.083         
   audio-dft                               97.304+-0.574      ?      98.141+-0.849         ?
   audio-fft                               30.213+-0.025      ?      30.299+-0.141         ?
   audio-oscillator                        48.174+-0.391             47.817+-0.148         
   imaging-darkroom                        61.263+-0.144      ?      61.289+-0.203         ?
   imaging-desaturate                      44.790+-0.457             44.496+-0.380         
   imaging-gaussian-blur                   63.573+-1.080      ?      64.037+-1.111         ?
   json-parse-financial                    34.275+-0.304      ?      34.292+-0.404         ?
   json-stringify-tinderbox                23.362+-0.194      !      23.862+-0.210         ! definitely 1.0214x slower
   stanford-crypto-aes                     38.457+-2.741             37.150+-0.318           might be 1.0352x faster
   stanford-crypto-ccm                     33.446+-0.730      ?      34.270+-0.420         ? might be 1.0247x slower
   stanford-crypto-pbkdf2                  93.813+-0.649             93.456+-0.527         
   stanford-crypto-sha256-iterative        30.351+-0.139      ?      30.515+-0.288         ?

   &lt;arithmetic&gt;                            51.837+-0.228      ?      51.845+-0.129         ? might be 1.0002x slower

                                               Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                         4.7977+-0.0111            4.7869+-0.0106          might be 1.0022x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215797</commentid>
    <comment_count>3</comment_count>
      <attachid>284928</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-07-29 19:00:59 -0700</bug_when>
    <thetext>Created attachment 284928
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216731</commentid>
    <comment_count>4</comment_count>
      <attachid>284928</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-02 18:26:55 -0700</bug_when>
    <thetext>Comment on attachment 284928
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216773</commentid>
    <comment_count>5</comment_count>
      <attachid>284928</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-02 20:46:27 -0700</bug_when>
    <thetext>Comment on attachment 284928
Patch

Clearing flags on attachment: 284928

Committed r204065: &lt;http://trac.webkit.org/changeset/204065&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216774</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-02 20:46:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216809</commentid>
    <comment_count>7</comment_count>
      <attachid>284928</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-08-02 23:04:38 -0700</bug_when>
    <thetext>Comment on attachment 284928
Patch

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

The build is broken due to this assert on Apple Windows and Arm Linux bots, see build.webkit.org.

&gt; Source/JavaScriptCore/dfg/DFGAbstractValue.cpp:37
&gt; +static_assert(sizeof(AbstractValue) == (sizeof(void*) + sizeof(unsigned) * 2 + sizeof(JSValue)), &quot;AbstractValue should be as small as possible.&quot;);

.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216831</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-08-03 00:40:39 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 284928 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=284928&amp;action=review
&gt; 
&gt; The build is broken due to this assert on Apple Windows and Arm Linux bots,
&gt; see build.webkit.org.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractValue.cpp:37
&gt; &gt; +static_assert(sizeof(AbstractValue) == (sizeof(void*) + sizeof(unsigned) * 2 + sizeof(JSValue)), &quot;AbstractValue should be as small as possible.&quot;);
&gt; 
&gt; .

http://trac.webkit.org/changeset/204077

Any idea why the assertion does not hold?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216844</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-03 01:24:45 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Comment on attachment 284928 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=284928&amp;action=review
&gt; &gt; 
&gt; &gt; The build is broken due to this assert on Apple Windows and Arm Linux bots,
&gt; &gt; see build.webkit.org.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractValue.cpp:37
&gt; &gt; &gt; +static_assert(sizeof(AbstractValue) == (sizeof(void*) + sizeof(unsigned) * 2 + sizeof(JSValue)), &quot;AbstractValue should be as small as possible.&quot;);
&gt; &gt; 
&gt; &gt; .
&gt; 
&gt; http://trac.webkit.org/changeset/204077
&gt; 
&gt; Any idea why the assertion does not hold?

This seems quite peculiar. Is the compiler adding padding for some reason somewhere?
I don&apos;t understand why it would.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216845</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-08-03 01:26:06 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Comment on attachment 284928 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=284928&amp;action=review
&gt; &gt; 
&gt; &gt; The build is broken due to this assert on Apple Windows and Arm Linux bots,
&gt; &gt; see build.webkit.org.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractValue.cpp:37
&gt; &gt; &gt; +static_assert(sizeof(AbstractValue) == (sizeof(void*) + sizeof(unsigned) * 2 + sizeof(JSValue)), &quot;AbstractValue should be as small as possible.&quot;);
&gt; &gt; 
&gt; &gt; .
&gt; 
&gt; http://trac.webkit.org/changeset/204077
&gt; 
&gt; Any idea why the assertion does not hold?

Thanks for the quick fix. I checked it on ARMv7 Linux and got the following:
- sizeof(AbstractValue) = 24
- sizeof(void*) + sizeof(unsigned) * 2 + sizeof(JSValue) = 20 (4 + 8 + 8)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216846</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-08-03 01:33:12 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; Any idea why the assertion does not hold?
&gt; 
&gt; Thanks for the quick fix. I checked it on ARMv7 Linux and got the following:
&gt; - sizeof(AbstractValue) = 24
&gt; - sizeof(void*) + sizeof(unsigned) * 2 + sizeof(JSValue) = 20 (4 + 8 + 8)

Shit, the JSValue is aligned on 8 bytes!
Thanks Ossy! I&apos;ll follow up with a separate patch to fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216847</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-03 01:33:38 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; Comment on attachment 284928 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=284928&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; The build is broken due to this assert on Apple Windows and Arm Linux bots,
&gt; &gt; &gt; see build.webkit.org.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractValue.cpp:37
&gt; &gt; &gt; &gt; +static_assert(sizeof(AbstractValue) == (sizeof(void*) + sizeof(unsigned) * 2 + sizeof(JSValue)), &quot;AbstractValue should be as small as possible.&quot;);
&gt; &gt; &gt; 
&gt; &gt; &gt; .
&gt; &gt; 
&gt; &gt; http://trac.webkit.org/changeset/204077
&gt; &gt; 
&gt; &gt; Any idea why the assertion does not hold?
&gt; 
&gt; Thanks for the quick fix. I checked it on ARMv7 Linux and got the following:
&gt; - sizeof(AbstractValue) = 24
&gt; - sizeof(void*) + sizeof(unsigned) * 2 + sizeof(JSValue) = 20 (4 + 8 + 8)

I suspect 4 bytes of padding is being added between the two unsigneds and the JSValue
to make the JSValue 8-byte aligned. It&apos;s just peculiar that the compiler would do this
on 32-bit platforms. Maybe I&apos;m missing some restriction that requires this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216848</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-03 01:33:59 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; &gt; Any idea why the assertion does not hold?
&gt; &gt; 
&gt; &gt; Thanks for the quick fix. I checked it on ARMv7 Linux and got the following:
&gt; &gt; - sizeof(AbstractValue) = 24
&gt; &gt; - sizeof(void*) + sizeof(unsigned) * 2 + sizeof(JSValue) = 20 (4 + 8 + 8)
&gt; 
&gt; Shit, the JSValue is aligned on 8 bytes!
&gt; Thanks Ossy! I&apos;ll follow up with a separate patch to fix this.

Do you know why this is needed though on 32-bit platforms?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216849</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-08-03 01:34:29 -0700</bug_when>
    <thetext>offsetof(AbstractValue, m_structure) == 0   sizeof(StructureAbstractValue) == 4
offsetof(AbstractValue, m_type) == 4        sizeof(SpeculatedType) == 4
offsetof(AbstractValue, m_arrayModes) == 8  sizeof(ArrayModes) == 4
offsetof(AbstractValue, m_value) == 16      sizeof(JSValue) == 8

sizeof(JSValue) is 8, the compiler should add 4 bytes padding before it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216851</commentid>
    <comment_count>15</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-08-03 01:40:16 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; Any idea why the assertion does not hold?
&gt; &gt; &gt; 
&gt; &gt; &gt; Thanks for the quick fix. I checked it on ARMv7 Linux and got the following:
&gt; &gt; &gt; - sizeof(AbstractValue) = 24
&gt; &gt; &gt; - sizeof(void*) + sizeof(unsigned) * 2 + sizeof(JSValue) = 20 (4 + 8 + 8)
&gt; &gt; 
&gt; &gt; Shit, the JSValue is aligned on 8 bytes!
&gt; &gt; Thanks Ossy! I&apos;ll follow up with a separate patch to fix this.
&gt; 
&gt; Do you know why this is needed though on 32-bit platforms?

AFAIK the natural alignment is mandatory everywhere.
Isn&apos;t it true on Apple platforms?

I think the easiest fix would be to put the JSValue member 
to the begginning of the struct to avoid padding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216854</commentid>
    <comment_count>16</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-03 01:45:13 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; Any idea why the assertion does not hold?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Thanks for the quick fix. I checked it on ARMv7 Linux and got the following:
&gt; &gt; &gt; &gt; - sizeof(AbstractValue) = 24
&gt; &gt; &gt; &gt; - sizeof(void*) + sizeof(unsigned) * 2 + sizeof(JSValue) = 20 (4 + 8 + 8)
&gt; &gt; &gt; 
&gt; &gt; &gt; Shit, the JSValue is aligned on 8 bytes!
&gt; &gt; &gt; Thanks Ossy! I&apos;ll follow up with a separate patch to fix this.
&gt; &gt; 
&gt; &gt; Do you know why this is needed though on 32-bit platforms?
&gt; 
&gt; AFAIK the natural alignment is mandatory everywhere.
&gt; Isn&apos;t it true on Apple platforms?
&gt; 
&gt; I think the easiest fix would be to put the JSValue member 
&gt; to the begginning of the struct to avoid padding.

So if I have a member that is 1000 bytes in size, it needs to be aligned
on a 1000 byte marker?

I guess in my brain I always thought alignment mattered up to modulo platform pointer
size. That&apos;s why I would have guessed that the JSValue could be 4-byte aligned on
32-bit platforms.

Anyways, I agree that we should move the JSValue to be the first element in the class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216855</commentid>
    <comment_count>17</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-08-03 01:48:24 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; Any idea why the assertion does not hold?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Thanks for the quick fix. I checked it on ARMv7 Linux and got the following:
&gt; &gt; &gt; &gt; - sizeof(AbstractValue) = 24
&gt; &gt; &gt; &gt; - sizeof(void*) + sizeof(unsigned) * 2 + sizeof(JSValue) = 20 (4 + 8 + 8)
&gt; &gt; &gt; 
&gt; &gt; &gt; Shit, the JSValue is aligned on 8 bytes!
&gt; &gt; &gt; Thanks Ossy! I&apos;ll follow up with a separate patch to fix this.
&gt; &gt; 
&gt; &gt; Do you know why this is needed though on 32-bit platforms?
&gt; 
&gt; AFAIK the natural alignment is mandatory everywhere.
&gt; Isn&apos;t it true on Apple platforms?

We have plenty of exceptions in our ABI.
Take https://developer.apple.com/library/prerelease/content/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv6FunctionCallingConventions.html for example.

Our stack also has weaker alignment.

&gt; I think the easiest fix would be to put the JSValue member 
&gt; to the begginning of the struct to avoid padding.

Agreed. I&apos;ll check if the order matter for perf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216856</commentid>
    <comment_count>18</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-08-03 01:52:13 -0700</bug_when>
    <thetext>(In reply to comment #15)
 
&gt; I think the easiest fix would be to put the JSValue member 
&gt; to the begginning of the struct to avoid padding.

Hmm, it didn&apos;t help. In this case the padding is added to the end, because 
in an array the first JSValue member should be aligned to 8 bytes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216858</commentid>
    <comment_count>19</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-08-03 01:59:21 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #15)
&gt;  
&gt; &gt; I think the easiest fix would be to put the JSValue member 
&gt; &gt; to the begginning of the struct to avoid padding.
&gt; 
&gt; Hmm, it didn&apos;t help. In this case the padding is added to the end, because 
&gt; in an array the first JSValue member should be aligned to 8 bytes.

Arg. Yep, that make sense :(</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284927</attachid>
            <date>2016-07-29 18:44:20 -0700</date>
            <delta_ts>2016-07-29 19:00:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160370-20160729184305.patch</filename>
            <type>text/plain</type>
            <size>13283</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzOTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
ZGRmMmExYTVlNTM2MGFiOWVhMDdiMTBkNjg1ZTA0MmYzZjE3ZWQxLi5jNmQxYmZlYzgxYmY5ODc1
M2M3MzUxZjRlN2RmOTRkNDk5MzcxOTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw1NSBAQAogMjAxNi0wNy0yOSAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtp
dC5vcmc+CiAKKyAgICAgICAgW0pTQ10gU2ltcGxpZnkgdGhlIGluaXRpYWxpemF0aW9uIG9mIEFi
c3RyYWN0VmFsdWUgaW4gdGhlIEFic3RyYWN0SW50ZXJwcmV0ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDM3MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHVzZSBhIHRvbiBvZiBBYnN0cmFjdFZh
bHVlIHRvIHJ1biB0aGUgQWJzdHJhY3QgSW50ZXJwcmV0ZXIuCisKKyAgICAgICAgV2hlbiB3ZSBz
ZXQgdXAgdGhlIGluaXRpYWwgdmFsdWVzLCB0aGUgY29tcGlsZXIgc2V0cworICAgICAgICBhIHpl
cm8gb24gYSBmaXJzdCB3b3JkLCBhIG9uZSBvbiBhIHNlY29uZCB3b3JkLCBhbmQgYSB6ZXJvCisg
ICAgICAgIGFnYWluIG9uIGEgdGhpcmQgd29yZC4KKyAgICAgICAgU2luY2Ugbm8gdmVjdG9yIG9y
IGRvdWJsZS1zdG9yZSBjYW4gZGVhbCB3aXRoIDMgd29yZHMsIHVucm9sbGluZworICAgICAgICBp
cyBkb25lIGJ5IHJlcGVhdGluZyB0aG9zZSBpbnN0cnVjdGlvbnMuCisKKyAgICAgICAgVGhlIHJl
YXNvbiBmb3IgdGhlIG9uZSB3YXMgVGlueVB0clNldC4gSXQgbmVlZGVkIGEgZmxhZyBmb3IKKyAg
ICAgICAgZW1wdHkgdmFsdWUgdG8gaWRlbnRpZnkgdGhlIHNldCBhcyB0aGluLiBJIGZsaXBwZWQg
dGhlIGZsYWcgdG8gImZhdCIKKyAgICAgICAgdG8gbWFrZSBzdXJlIFRpbnlQdHJTZXQgaXMgaW5p
dGlhbGl6ZWQgdG8gemVyby4KKworICAgICAgICBXaXRoIHRoYXQgZG9uZSwgSSBqdXN0IGhhZCB0
byBjbGVhbiBzb21lIHBsYWNlcyB0byBtYWtlCisgICAgICAgIHRoZSBpbml0aWFsaXphdGlvbiBz
aG9ydGVyLgorICAgICAgICBJdCBtYWtlcyB0aGUgYmluYXJ5IGVhc2llciB0byBmb2xsb3cgYnV0
IHRoaXMgZG9lcyBub3QgaGVscCB3aXRoCisgICAgICAgIHRoZSBiaWdnZXIgcHJvYmxlbTogdGhl
IHRpbWUgc3BlbnQgcGVyIGJsb2NrIG9uIEFic3RyYWN0IEludGVycHJldGVyLgorCisgICAgICAg
ICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgVGhlIHRyYWl0cyB3ZXJlIHVzZWxlc3Ms
IG5vIGNsaWVudCBjb2RlIGRlZmluZXMgaXQuCisKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Ok9w
ZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZUxvY2Fscyk6CisgICAgICAg
IEJlY2F1c2Ugb2YgdGhlIHNpemUgb2YgdGhlIGZ1bmN0aW9uLCBsbHZtIGlzIG5vdCBpbmxpbmlu
ZyBpdC4KKyAgICAgICAgV2Ugd2VyZSBsaXRlcmFsbHkgbG9hZGluZyAzIHJlZ2lzdGVycyBmcm9t
IG1lbW9yeSBhbmQgc3RvcmluZworICAgICAgICB0aGVtIGluIHRoZSB2ZWN0b3IuCisgICAgICAg
IE5vdyB0aGF0IEFic3RyYWN0VmFsdWUgaGFzIGEgVmVjdG9yVHJhaXRzLCB3ZSBzaG91bGQganVz
dCByZWx5CisgICAgICAgIG9uIHRoZSBtZW1zZXQgb2YgVmVjdG9yIHdoZW4gcG9zc2libGUuCisK
KyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZHM6OnNldEFyZ3VtZW50Rmlyc3RUaW1lKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldExv
Y2FsRmlyc3RUaW1lKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmNsZWFyKToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZFZhbHVlVHJhaXRzOjpkZWZhdWx0VmFsdWUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpPcGVyYW5kVmFsdWVUcmFpdHM6OmlzRW1wdHlGb3JEdW1wKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZHM8VD46OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxUPjo6ZHVtcCk6
CisgICAgICAgIChKU0M6OlRyYWl0cz46OmR1bXBJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpUcmFpdHM+OjpkdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RWYWx1ZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpBYnN0cmFjdFZhbHVlKToKKworMjAxNi0wNy0yOSAg
QmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CisKICAgICAgICAgW0pTQ10g
VXNlIHRoZSBzYW1lIGRhdGEgc3RydWN0dXJlcyBmb3IgREZHIGFuZCBBaXIgTGl2ZW5lc3MgQW5h
bHlzaXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MDM0NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCmluZGV4IDU4ZDc3ZjkwNTEzZTY3M2NlYzdiYmRlMDczM2JkMTU0NWJjNjIwY2MuLjQx
NjJmN2RiZjQ2NjA5YTVkMDMzM2Y1OThjMGZkZDZkNzNkNWQ1YmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTYtMDctMjkgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgor
CisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IHRoZSBpbml0aWFsaXphdGlvbiBvZiBBYnN0cmFjdFZh
bHVlIGluIHRoZSBBYnN0cmFjdEludGVycHJldGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAzNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9UaW55UHRyU2V0Lmg6CisgICAgICAgIChXVEY6
OlRpbnlQdHJTZXQ6OmlzVGhpbik6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OnNldCk6CisK
IDIwMTYtMDctMjkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIE1h
a2UgU3RyaW5nVmlldyBjYXBhYmxlIG9mIGJlaW5nIHBhc3NlZCBvciByZXR1cm5lZCBpbiBvbmx5
IDIgcmVnaXN0ZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaApp
bmRleCA3OGRkYWE1MjU0NDJhNTkzMjcxYTE4NDUzMDdlOTE1NzZmNjc1OGE3Li4zMmJlZGM0MGIy
ODljOThmYWFhZjA5NjA1YzEwN2I5YTI0M2FhNjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIsIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE1LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzcsMzIgKzM3LDM3IEBAIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0
IE9wZXJhbmRWYWx1ZVRyYWl0cyB7Ci0gICAgc3RhdGljIFQgZGVmYXVsdFZhbHVlKCkgeyByZXR1
cm4gVCgpOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNFbXB0eUZvckR1bXAoY29uc3QgVCYgdmFsdWUp
IHsgcmV0dXJuICF2YWx1ZTsgfQotfTsKLQogZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50T3Bl
cmFuZCwgTG9jYWxPcGVyYW5kIH07CiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNM
aWtlIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cyA9IE9wZXJhbmRW
YWx1ZVRyYWl0czxUPj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBPcGVyYW5kcyB7CiBw
dWJsaWM6CiAgICAgT3BlcmFuZHMoKSB7IH0KICAgICAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhz
aXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBjb25zdCBUJiBpbml0aWFsVmFs
dWUgPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVf
dCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMpCisgICAgeworICAgICAgICBpZiAoV1RG
OjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAgIG1f
YXJndW1lbnRzLnJlc2l6ZShudW1Bcmd1bWVudHMpOworICAgICAgICAgICAgbV9sb2NhbHMucmVz
aXplKG51bUxvY2Fscyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2FyZ3VtZW50
cy5maWxsKFQoKSwgbnVtQXJndW1lbnRzKTsKKyAgICAgICAgICAgIG1fbG9jYWxzLmZpbGwoVCgp
LCBudW1Mb2NhbHMpOworICAgICAgICB9CisgICAgfQorCisgICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2FscywgY29uc3QgVCYgaW5pdGlhbFZh
bHVlKQogICAgIHsKICAgICAgICAgbV9hcmd1bWVudHMuZmlsbChpbml0aWFsVmFsdWUsIG51bUFy
Z3VtZW50cyk7CiAgICAgICAgIG1fbG9jYWxzLmZpbGwoaW5pdGlhbFZhbHVlLCBudW1Mb2NhbHMp
OwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBPdGhlclRy
YWl0cz4KLSAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJh
bmRzPFUsIE90aGVyVHJhaXRzPiYgb3RoZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg
ICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBv
dGhlcikKICAgICB7Ci0gICAgICAgIG1fYXJndW1lbnRzLmZpbGwoVHJhaXRzOjpkZWZhdWx0VmFs
dWUoKSwgb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIG1fbG9jYWxzLmZpbGwo
VHJhaXRzOjpkZWZhdWx0VmFsdWUoKSwgb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAg
IG1fYXJndW1lbnRzLmZpbGwoVCgpLCBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAg
ICAgbV9sb2NhbHMuZmlsbChUKCksIG90aGVyLm51bWJlck9mTG9jYWxzKCkpOwogICAgIH0KICAg
ICAKICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3Vt
ZW50cy5zaXplKCk7IH0KQEAgLTk2LDcgKzEwMSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBsb2NhbChpZHgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qg
c2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSkKKyAg
ICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXpl
IDw9IG1fbG9jYWxzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzaXpl
X3Qgb2xkU2l6ZSA9IG1fbG9jYWxzLnNpemUoKTsKKyAgICAgICAgbV9sb2NhbHMucmVzaXplKHNp
emUpOworICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0
aW9uKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fbG9jYWxz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG1fbG9jYWxzW2ldID0gVCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQm
IGVuc3VyZWRWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChzaXplIDw9IG1fbG9jYWxzLnNpemUo
KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNywxOSArMTM1LDE5IEBAIHB1YmxpYzoKICAg
ICBUIGdldExvY2FsKHNpemVfdCBpZHgpCiAgICAgewogICAgICAgICBpZiAoaWR4ID49IG1fbG9j
YWxzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOwor
ICAgICAgICAgICAgcmV0dXJuIFQoKTsKICAgICAgICAgcmV0dXJuIG1fbG9jYWxzW2lkeF07CiAg
ICAgfQogICAgIAogICAgIHZvaWQgc2V0QXJndW1lbnRGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29u
c3QgVCYgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlQobV9hcmd1bWVudHNbaWR4XSA9PSBU
cmFpdHM6OmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRzW2lkeF0g
PT0gVCgpKTsKICAgICAgICAgYXJndW1lbnQoaWR4KSA9IHZhbHVlOwogICAgIH0KICAgICAKICAg
ICB2b2lkIHNldExvY2FsRmlyc3RUaW1lKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGlkeCA+PSBtX2xvY2Fscy5zaXplKCkgfHwgbV9sb2NhbHNbaWR4
XSA9PSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKGlkeCA+PSBtX2xv
Y2Fscy5zaXplKCkgfHwgbV9sb2NhbHNbaWR4XSA9PSBUKCkpOwogICAgICAgICBzZXRMb2NhbChp
ZHgsIHZhbHVlKTsKICAgICB9CiAgICAgCkBAIC0yNDUsNyArMjYzLDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAgICAgZmlsbChUcmFpdHM6OmRlZmF1bHRW
YWx1ZSgpKTsKKyAgICAgICAgZmlsbChUKCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgT3BlcmFuZHMmIG90aGVyKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCmluZGV4IGM5ZGVlODhjN2EwM2U0MDBj
NDQ3ZTQ4ZDg0MWIwYzMxNWVjZmVkZjUuLmRhNTQyZTUyNjMzMjNiNTg5NzE0MjVjMDFmYzkzMmYz
ZDBlM2JjOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVy
YW5kc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHNJbmxpbmVzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMxLDMzICszMSwzMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgotdm9pZCBPcGVyYW5kczxULCBUcmFpdHM+
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Q29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9
IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKLSAgICAgICAgaWYgKFRy
YWl0czo6aXNFbXB0eUZvckR1bXAoYXJndW1lbnQoYXJndW1lbnRJbmRleCkpKQorICAgICAgICBp
ZiAoIWFyZ3VtZW50KGFyZ3VtZW50SW5kZXgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgImFyZyIsIGFyZ3VtZW50SW5kZXgsICI6IiwgaW5Db250ZXh0
KGFyZ3VtZW50KGFyZ3VtZW50SW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQogICAgIGZvciAoc2l6
ZV90IGxvY2FsSW5kZXggPSAwOyBsb2NhbEluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKTsgKytsb2Nh
bEluZGV4KSB7Ci0gICAgICAgIGlmIChUcmFpdHM6OmlzRW1wdHlGb3JEdW1wKGxvY2FsKGxvY2Fs
SW5kZXgpKSkKKyAgICAgICAgaWYgKCFsb2NhbChsb2NhbEluZGV4KSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAiOiIs
IGluQ29udGV4dChsb2NhbChsb2NhbEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgotdm9pZCBPcGVyYW5kczxULCBUcmFp
dHM+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIENv
bW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBu
dW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7Ci0gICAgICAgIGlmIChUcmFp
dHM6OmlzRW1wdHlGb3JEdW1wKGFyZ3VtZW50KGFyZ3VtZW50SW5kZXgpKSkKKyAgICAgICAgaWYg
KCFhcmd1bWVudChhcmd1bWVudEluZGV4KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJhcmciLCBhcmd1bWVudEluZGV4LCAiOiIsIGFyZ3VtZW50KGFy
Z3VtZW50SW5kZXgpKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgbG9jYWxJbmRleCA9IDA7IGxv
Y2FsSW5kZXggPCBudW1iZXJPZkxvY2FscygpOyArK2xvY2FsSW5kZXgpIHsKLSAgICAgICAgaWYg
KFRyYWl0czo6aXNFbXB0eUZvckR1bXAobG9jYWwobG9jYWxJbmRleCkpKQorICAgICAgICBpZiAo
IWxvY2FsKGxvY2FsSW5kZXgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9jYWwobG9jYWxJbmRleCkpOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3Bw
CmluZGV4IGYxOTQ0YjQzZmM5YjgzODFmOWVhMmUwMzJkYzdmZWRhMTExODQ0YjIuLjcyYzcyNzZj
OWQ1YjdlMmE1OTgwMTMwZDBhMDE2MTkxNjk0OGZiNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcApAQCAtMzQsNiArMzQsOCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKEFic3Ry
YWN0VmFsdWUpID09IChzaXplb2Yodm9pZCopICogMiArIHNpemVvZih1bnNpZ25lZCkgKiAyKSwg
IkFic3RyYWN0VmFsdWUgc2hvdWxkIGJlIGFzIHNtYWxsIGFzIHBvc3NpYmxlLiIpOworCiB2b2lk
IEFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9ucyhjb25zdCBUcmFuc2l0aW9uVmVjdG9y
JiB2ZWN0b3IpCiB7CiAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCmluZGV4IGQ1MTQzMDAzMTlhNGIyMzE5
Y2VmODUyN2JiOTZjYzE2NjUzYmVmMTQuLjNhYjJmNWY5ODA2YTQ3OGRjZWQ1ZjRhYjY1MzhlZjA2
ZWMwZmNkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1
ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTUsNiArNTUsMTcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICA6
IG1fdHlwZShTcGVjTm9uZSkKICAgICAgICAgLCBtX2FycmF5TW9kZXMoMCkKICAgICB7CisjaWZu
ZGVmIE5ERUJVRworICAgICAgICAvLyBUaGUgV1RGIFRyYWl0cyBmb3IgQWJzdHJhY3RWYWx1ZSBh
bGxvdyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdmFsdWVzIHdpdGggYnplcm8oKS4KKyAgICAgICAg
Ly8gV2UgdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGlzIGFzc3VtcHRpb24gaGVyZS4KKyAg
ICAgICAgc3RhdGljIGJvb2wgbmVlZHNEZWZhdWx0Q29uc3RydWN0b3JDaGVjayA9IHRydWU7Cisg
ICAgICAgIGlmIChuZWVkc0RlZmF1bHRDb25zdHJ1Y3RvckNoZWNrKSB7CisgICAgICAgICAgICBu
ZWVkc0RlZmF1bHRDb25zdHJ1Y3RvckNoZWNrID0gZmFsc2U7CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YoQWJzdHJhY3RWYWx1ZSk7ICsraSkKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKVtpXSkpOworICAg
ICAgICB9CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAgdm9pZCBjbGVhcigpCkBAIC00NTYsNiAr
NDY3LDE4IEBAIHByaXZhdGU6CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAorbmFtZXNw
YWNlIFdURiB7Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IFZlY3RvclRyYWl0czxKU0M6OkRGRzo6QWJz
dHJhY3RWYWx1ZT4gOiBWZWN0b3JUcmFpdHNCYXNlPGZhbHNlLCBKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0g
dHJ1ZTsKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6QWJz
dHJhY3RWYWx1ZT4gOiBHZW5lcmljSGFzaFRyYWl0czxKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZT4g
eworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworfTsKK307
CisKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogI2VuZGlmIC8vIERGR0Fic3RyYWN0VmFs
dWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGlueVB0clNldC5oIGIvU291cmNlL1dU
Ri93dGYvVGlueVB0clNldC5oCmluZGV4IDM0YzJjOTVhZTA2OWJkMzRhYmI3YzY3NjY4Y2RmYzgy
NWVjMzVkMTMuLjMzNTAwM2MyMjk5NzRhMzkyYjRmZTJhMjlhYTJjOGJiNDU5ZGYwMTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RpbnlQdHJTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9U
aW55UHRyU2V0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzcxLDkgKzM3MSw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOwogCi0gICAgc3RhdGljIGNv
bnN0IHVpbnRwdHJfdCB0aGluRmxhZyA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBm
YXRGbGFnID0gMTsKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHJlc2VydmVkRmxhZyA9IDI7
Ci0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBmbGFncyA9IHRoaW5GbGFnIHwgcmVzZXJ2ZWRG
bGFnOworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgZmxhZ3MgPSBmYXRGbGFnIHwgcmVzZXJ2
ZWRGbGFnOwogICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcmVzZXJ2ZWRWYWx1ZSA9IDQ7CiAK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdFN0YXJ0aW5nU2l6ZSA9IDQ7CkBAIC00
NjMsNyArNDYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE91dE9mTGluZUxpc3Q6OmRlc3Ry
b3kobGlzdCgpKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1RoaW4oKSBjb25zdCB7IHJldHVy
biBtX3BvaW50ZXIgJiB0aGluRmxhZzsgfQorICAgIGJvb2wgaXNUaGluKCkgY29uc3QgeyByZXR1
cm4gIShtX3BvaW50ZXIgJiBmYXRGbGFnKTsgfQogICAgIAogICAgIHZvaWQqIHBvaW50ZXIoKSBj
b25zdAogICAgIHsKQEAgLTQ5Niw3ICs0OTYsNyBAQCBwcml2YXRlOgogICAgIH0KICAgICB2b2lk
IHNldCh1aW50cHRyX3QgcG9pbnRlciwgYm9vbCBzaW5nbGVFbnRyeSkKICAgICB7Ci0gICAgICAg
IG1fcG9pbnRlciA9IHBvaW50ZXIgfCAoc2luZ2xlRW50cnkgPyB0aGluRmxhZyA6IDApIHwgKG1f
cG9pbnRlciAmIHJlc2VydmVkRmxhZyk7CisgICAgICAgIG1fcG9pbnRlciA9IHBvaW50ZXIgfCAo
c2luZ2xlRW50cnkgPyAwIDogZmF0RmxhZykgfCAobV9wb2ludGVyICYgcmVzZXJ2ZWRGbGFnKTsK
ICAgICB9CiAgICAgYm9vbCBnZXRSZXNlcnZlZEZsYWcoKSBjb25zdCB7IHJldHVybiBtX3BvaW50
ZXIgJiByZXNlcnZlZEZsYWc7IH0KICAgICB2b2lkIHNldFJlc2VydmVkRmxhZyhib29sIHZhbHVl
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284928</attachid>
            <date>2016-07-29 19:00:59 -0700</date>
            <delta_ts>2016-08-02 20:46:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160370-20160729185944.patch</filename>
            <type>text/plain</type>
            <size>13297</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzOTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
ZGRmMmExYTVlNTM2MGFiOWVhMDdiMTBkNjg1ZTA0MmYzZjE3ZWQxLi5jNmQxYmZlYzgxYmY5ODc1
M2M3MzUxZjRlN2RmOTRkNDk5MzcxOTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw1NSBAQAogMjAxNi0wNy0yOSAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtp
dC5vcmc+CiAKKyAgICAgICAgW0pTQ10gU2ltcGxpZnkgdGhlIGluaXRpYWxpemF0aW9uIG9mIEFi
c3RyYWN0VmFsdWUgaW4gdGhlIEFic3RyYWN0SW50ZXJwcmV0ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDM3MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHVzZSBhIHRvbiBvZiBBYnN0cmFjdFZh
bHVlIHRvIHJ1biB0aGUgQWJzdHJhY3QgSW50ZXJwcmV0ZXIuCisKKyAgICAgICAgV2hlbiB3ZSBz
ZXQgdXAgdGhlIGluaXRpYWwgdmFsdWVzLCB0aGUgY29tcGlsZXIgc2V0cworICAgICAgICBhIHpl
cm8gb24gYSBmaXJzdCB3b3JkLCBhIG9uZSBvbiBhIHNlY29uZCB3b3JkLCBhbmQgYSB6ZXJvCisg
ICAgICAgIGFnYWluIG9uIGEgdGhpcmQgd29yZC4KKyAgICAgICAgU2luY2Ugbm8gdmVjdG9yIG9y
IGRvdWJsZS1zdG9yZSBjYW4gZGVhbCB3aXRoIDMgd29yZHMsIHVucm9sbGluZworICAgICAgICBp
cyBkb25lIGJ5IHJlcGVhdGluZyB0aG9zZSBpbnN0cnVjdGlvbnMuCisKKyAgICAgICAgVGhlIHJl
YXNvbiBmb3IgdGhlIG9uZSB3YXMgVGlueVB0clNldC4gSXQgbmVlZGVkIGEgZmxhZyBmb3IKKyAg
ICAgICAgZW1wdHkgdmFsdWUgdG8gaWRlbnRpZnkgdGhlIHNldCBhcyB0aGluLiBJIGZsaXBwZWQg
dGhlIGZsYWcgdG8gImZhdCIKKyAgICAgICAgdG8gbWFrZSBzdXJlIFRpbnlQdHJTZXQgaXMgaW5p
dGlhbGl6ZWQgdG8gemVyby4KKworICAgICAgICBXaXRoIHRoYXQgZG9uZSwgSSBqdXN0IGhhZCB0
byBjbGVhbiBzb21lIHBsYWNlcyB0byBtYWtlCisgICAgICAgIHRoZSBpbml0aWFsaXphdGlvbiBz
aG9ydGVyLgorICAgICAgICBJdCBtYWtlcyB0aGUgYmluYXJ5IGVhc2llciB0byBmb2xsb3cgYnV0
IHRoaXMgZG9lcyBub3QgaGVscCB3aXRoCisgICAgICAgIHRoZSBiaWdnZXIgcHJvYmxlbTogdGhl
IHRpbWUgc3BlbnQgcGVyIGJsb2NrIG9uIEFic3RyYWN0IEludGVycHJldGVyLgorCisgICAgICAg
ICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgVGhlIHRyYWl0cyB3ZXJlIHVzZWxlc3Ms
IG5vIGNsaWVudCBjb2RlIGRlZmluZXMgaXQuCisKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Ok9w
ZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmVuc3VyZUxvY2Fscyk6CisgICAgICAg
IEJlY2F1c2Ugb2YgdGhlIHNpemUgb2YgdGhlIGZ1bmN0aW9uLCBsbHZtIGlzIG5vdCBpbmxpbmlu
ZyBpdC4KKyAgICAgICAgV2Ugd2VyZSBsaXRlcmFsbHkgbG9hZGluZyAzIHJlZ2lzdGVycyBmcm9t
IG1lbW9yeSBhbmQgc3RvcmluZworICAgICAgICB0aGVtIGluIHRoZSB2ZWN0b3IuCisgICAgICAg
IE5vdyB0aGF0IEFic3RyYWN0VmFsdWUgaGFzIGEgVmVjdG9yVHJhaXRzLCB3ZSBzaG91bGQganVz
dCByZWx5CisgICAgICAgIG9uIHRoZSBtZW1zZXQgb2YgVmVjdG9yIHdoZW4gcG9zc2libGUuCisK
KyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZHM6OnNldEFyZ3VtZW50Rmlyc3RUaW1lKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNldExv
Y2FsRmlyc3RUaW1lKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmNsZWFyKToKKyAgICAgICAg
KEpTQzo6T3BlcmFuZFZhbHVlVHJhaXRzOjpkZWZhdWx0VmFsdWUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpPcGVyYW5kVmFsdWVUcmFpdHM6OmlzRW1wdHlGb3JEdW1wKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZHM8VD46OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczxUPjo6ZHVtcCk6
CisgICAgICAgIChKU0M6OlRyYWl0cz46OmR1bXBJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpUcmFpdHM+OjpkdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RWYWx1ZS5jcHA6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpBYnN0cmFjdFZhbHVlKToKKworMjAxNi0wNy0yOSAg
QmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CisKICAgICAgICAgW0pTQ10g
VXNlIHRoZSBzYW1lIGRhdGEgc3RydWN0dXJlcyBmb3IgREZHIGFuZCBBaXIgTGl2ZW5lc3MgQW5h
bHlzaXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MDM0NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCmluZGV4IDU4ZDc3ZjkwNTEzZTY3M2NlYzdiYmRlMDczM2JkMTU0NWJjNjIwY2MuLjQx
NjJmN2RiZjQ2NjA5YTVkMDMzM2Y1OThjMGZkZDZkNzNkNWQ1YmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTYtMDctMjkgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgor
CisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IHRoZSBpbml0aWFsaXphdGlvbiBvZiBBYnN0cmFjdFZh
bHVlIGluIHRoZSBBYnN0cmFjdEludGVycHJldGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAzNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9UaW55UHRyU2V0Lmg6CisgICAgICAgIChXVEY6
OlRpbnlQdHJTZXQ6OmlzVGhpbik6CisgICAgICAgIChXVEY6OlRpbnlQdHJTZXQ6OnNldCk6CisK
IDIwMTYtMDctMjkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIE1h
a2UgU3RyaW5nVmlldyBjYXBhYmxlIG9mIGJlaW5nIHBhc3NlZCBvciByZXR1cm5lZCBpbiBvbmx5
IDIgcmVnaXN0ZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaApp
bmRleCA3OGRkYWE1MjU0NDJhNTkzMjcxYTE4NDUzMDdlOTE1NzZmNjc1OGE3Li4zMmJlZGM0MGIy
ODljOThmYWFhZjA5NjA1YzEwN2I5YTI0M2FhNjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIsIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE1LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzcsMzIgKzM3LDM3IEBAIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0
IE9wZXJhbmRWYWx1ZVRyYWl0cyB7Ci0gICAgc3RhdGljIFQgZGVmYXVsdFZhbHVlKCkgeyByZXR1
cm4gVCgpOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNFbXB0eUZvckR1bXAoY29uc3QgVCYgdmFsdWUp
IHsgcmV0dXJuICF2YWx1ZTsgfQotfTsKLQogZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50T3Bl
cmFuZCwgTG9jYWxPcGVyYW5kIH07CiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNM
aWtlIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cyA9IE9wZXJhbmRW
YWx1ZVRyYWl0czxUPj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBPcGVyYW5kcyB7CiBw
dWJsaWM6CiAgICAgT3BlcmFuZHMoKSB7IH0KICAgICAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhz
aXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBjb25zdCBUJiBpbml0aWFsVmFs
dWUgPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVf
dCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMpCisgICAgeworICAgICAgICBpZiAoV1RG
OjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAgIG1f
YXJndW1lbnRzLnJlc2l6ZShudW1Bcmd1bWVudHMpOworICAgICAgICAgICAgbV9sb2NhbHMucmVz
aXplKG51bUxvY2Fscyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2FyZ3VtZW50
cy5maWxsKFQoKSwgbnVtQXJndW1lbnRzKTsKKyAgICAgICAgICAgIG1fbG9jYWxzLmZpbGwoVCgp
LCBudW1Mb2NhbHMpOworICAgICAgICB9CisgICAgfQorCisgICAgZXhwbGljaXQgT3BlcmFuZHMo
c2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2FscywgY29uc3QgVCYgaW5pdGlhbFZh
bHVlKQogICAgIHsKICAgICAgICAgbV9hcmd1bWVudHMuZmlsbChpbml0aWFsVmFsdWUsIG51bUFy
Z3VtZW50cyk7CiAgICAgICAgIG1fbG9jYWxzLmZpbGwoaW5pdGlhbFZhbHVlLCBudW1Mb2NhbHMp
OwogICAgIH0KICAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBPdGhlclRy
YWl0cz4KLSAgICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJh
bmRzPFUsIE90aGVyVHJhaXRzPiYgb3RoZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg
ICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBv
dGhlcikKICAgICB7Ci0gICAgICAgIG1fYXJndW1lbnRzLmZpbGwoVHJhaXRzOjpkZWZhdWx0VmFs
dWUoKSwgb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIG1fbG9jYWxzLmZpbGwo
VHJhaXRzOjpkZWZhdWx0VmFsdWUoKSwgb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAg
IG1fYXJndW1lbnRzLmZpbGwoVCgpLCBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAg
ICAgbV9sb2NhbHMuZmlsbChUKCksIG90aGVyLm51bWJlck9mTG9jYWxzKCkpOwogICAgIH0KICAg
ICAKICAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3Vt
ZW50cy5zaXplKCk7IH0KQEAgLTk2LDcgKzEwMSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBsb2NhbChpZHgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qg
c2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSkKKyAg
ICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXpl
IDw9IG1fbG9jYWxzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzaXpl
X3Qgb2xkU2l6ZSA9IG1fbG9jYWxzLnNpemUoKTsKKyAgICAgICAgbV9sb2NhbHMucmVzaXplKHNp
emUpOworICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0
aW9uKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fbG9jYWxz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG1fbG9jYWxzW2ldID0gVCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNvbnN0IFQm
IGVuc3VyZWRWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChzaXplIDw9IG1fbG9jYWxzLnNpemUo
KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNywxOSArMTM1LDE5IEBAIHB1YmxpYzoKICAg
ICBUIGdldExvY2FsKHNpemVfdCBpZHgpCiAgICAgewogICAgICAgICBpZiAoaWR4ID49IG1fbG9j
YWxzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOwor
ICAgICAgICAgICAgcmV0dXJuIFQoKTsKICAgICAgICAgcmV0dXJuIG1fbG9jYWxzW2lkeF07CiAg
ICAgfQogICAgIAogICAgIHZvaWQgc2V0QXJndW1lbnRGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29u
c3QgVCYgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlQobV9hcmd1bWVudHNbaWR4XSA9PSBU
cmFpdHM6OmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRzW2lkeF0g
PT0gVCgpKTsKICAgICAgICAgYXJndW1lbnQoaWR4KSA9IHZhbHVlOwogICAgIH0KICAgICAKICAg
ICB2b2lkIHNldExvY2FsRmlyc3RUaW1lKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGlkeCA+PSBtX2xvY2Fscy5zaXplKCkgfHwgbV9sb2NhbHNbaWR4
XSA9PSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKGlkeCA+PSBtX2xv
Y2Fscy5zaXplKCkgfHwgbV9sb2NhbHNbaWR4XSA9PSBUKCkpOwogICAgICAgICBzZXRMb2NhbChp
ZHgsIHZhbHVlKTsKICAgICB9CiAgICAgCkBAIC0yNDUsNyArMjYzLDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAgICAgZmlsbChUcmFpdHM6OmRlZmF1bHRW
YWx1ZSgpKTsKKyAgICAgICAgZmlsbChUKCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgT3BlcmFuZHMmIG90aGVyKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCmluZGV4IGM5ZGVlODhjN2EwM2U0MDBj
NDQ3ZTQ4ZDg0MWIwYzMxNWVjZmVkZjUuLmRhNTQyZTUyNjMzMjNiNTg5NzE0MjVjMDFmYzkzMmYz
ZDBlM2JjOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVy
YW5kc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHNJbmxpbmVzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMxLDMzICszMSwzMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgotdm9pZCBPcGVyYW5kczxULCBUcmFpdHM+
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Q29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9
IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsKLSAgICAgICAgaWYgKFRy
YWl0czo6aXNFbXB0eUZvckR1bXAoYXJndW1lbnQoYXJndW1lbnRJbmRleCkpKQorICAgICAgICBp
ZiAoIWFyZ3VtZW50KGFyZ3VtZW50SW5kZXgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgImFyZyIsIGFyZ3VtZW50SW5kZXgsICI6IiwgaW5Db250ZXh0
KGFyZ3VtZW50KGFyZ3VtZW50SW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQogICAgIGZvciAoc2l6
ZV90IGxvY2FsSW5kZXggPSAwOyBsb2NhbEluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKTsgKytsb2Nh
bEluZGV4KSB7Ci0gICAgICAgIGlmIChUcmFpdHM6OmlzRW1wdHlGb3JEdW1wKGxvY2FsKGxvY2Fs
SW5kZXgpKSkKKyAgICAgICAgaWYgKCFsb2NhbChsb2NhbEluZGV4KSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAiOiIs
IGluQ29udGV4dChsb2NhbChsb2NhbEluZGV4KSwgY29udGV4dCkpOwogICAgIH0KIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgotdm9pZCBPcGVyYW5kczxULCBUcmFp
dHM+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dm9pZCBPcGVyYW5kczxUPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIENv
bW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBu
dW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7Ci0gICAgICAgIGlmIChUcmFp
dHM6OmlzRW1wdHlGb3JEdW1wKGFyZ3VtZW50KGFyZ3VtZW50SW5kZXgpKSkKKyAgICAgICAgaWYg
KCFhcmd1bWVudChhcmd1bWVudEluZGV4KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJhcmciLCBhcmd1bWVudEluZGV4LCAiOiIsIGFyZ3VtZW50KGFy
Z3VtZW50SW5kZXgpKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgbG9jYWxJbmRleCA9IDA7IGxv
Y2FsSW5kZXggPCBudW1iZXJPZkxvY2FscygpOyArK2xvY2FsSW5kZXgpIHsKLSAgICAgICAgaWYg
KFRyYWl0czo6aXNFbXB0eUZvckR1bXAobG9jYWwobG9jYWxJbmRleCkpKQorICAgICAgICBpZiAo
IWxvY2FsKGxvY2FsSW5kZXgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9jYWwobG9jYWxJbmRleCkpOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3Bw
CmluZGV4IGYxOTQ0YjQzZmM5YjgzODFmOWVhMmUwMzJkYzdmZWRhMTExODQ0YjIuLjJkYmE5ZmVm
NGIwMDY3YTViZjEwODVkZTUzMTBkYmQwMjZkM2JkOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcApAQCAtMzQsNiArMzQsOCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKEFic3Ry
YWN0VmFsdWUpID09IChzaXplb2Yodm9pZCopICsgc2l6ZW9mKHVuc2lnbmVkKSAqIDIgKyBzaXpl
b2YoSlNWYWx1ZSkpLCAiQWJzdHJhY3RWYWx1ZSBzaG91bGQgYmUgYXMgc21hbGwgYXMgcG9zc2li
bGUuIik7CisKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb25zKGNvbnN0IFRy
YW5zaXRpb25WZWN0b3ImIHZlY3RvcikKIHsKICAgICBpZiAobV90eXBlICYgU3BlY0NlbGwpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKaW5kZXggZDUx
NDMwMDMxOWE0YjIzMTljZWY4NTI3YmI5NmNjMTY2NTNiZWYxNC4uM2FiMmY1Zjk4MDZhNDc4ZGNl
ZDVmNGFiNjUzOGVmMDZlYzBmY2RiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw2ICs1NSwxNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1
ZSB7CiAgICAgICAgIDogbV90eXBlKFNwZWNOb25lKQogICAgICAgICAsIG1fYXJyYXlNb2Rlcygw
KQogICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIC8vIFRoZSBXVEYgVHJhaXRzIGZvciBB
YnN0cmFjdFZhbHVlIGFsbG93IHRoZSBpbml0aWFsaXphdGlvbiBvZiB2YWx1ZXMgd2l0aCBiemVy
bygpLgorICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgYXNzdW1w
dGlvbiBoZXJlLgorICAgICAgICBzdGF0aWMgYm9vbCBuZWVkc0RlZmF1bHRDb25zdHJ1Y3RvckNo
ZWNrID0gdHJ1ZTsKKyAgICAgICAgaWYgKG5lZWRzRGVmYXVsdENvbnN0cnVjdG9yQ2hlY2spIHsK
KyAgICAgICAgICAgIG5lZWRzRGVmYXVsdENvbnN0cnVjdG9yQ2hlY2sgPSBmYWxzZTsKKworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihBYnN0cmFjdFZhbHVlKTsg
KytpKQorICAgICAgICAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRo
aXMpW2ldKSk7CisgICAgICAgIH0KKyNlbmRpZgogICAgIH0KICAgICAKICAgICB2b2lkIGNsZWFy
KCkKQEAgLTQ1Niw2ICs0NjcsMTggQEAgcHJpdmF0ZToKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCituYW1lc3BhY2UgV1RGIHsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgVmVjdG9yVHJhaXRz
PEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlPiA6IFZlY3RvclRyYWl0c0Jhc2U8ZmFsc2UsIEpTQzo6
REZHOjpBYnN0cmFjdFZhbHVlPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuSW5pdGlhbGl6
ZVdpdGhNZW1zZXQgPSB0cnVlOworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBIYXNoVHJhaXRz
PEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlPiA6IEdlbmVyaWNIYXNoVHJhaXRzPEpTQzo6REZHOjpB
YnN0cmFjdFZhbHVlPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9
IHRydWU7Cit9OworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAjZW5kaWYgLy8g
REZHQWJzdHJhY3RWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaW55UHRyU2V0
LmggYi9Tb3VyY2UvV1RGL3d0Zi9UaW55UHRyU2V0LmgKaW5kZXggMzRjMmM5NWFlMDY5YmQzNGFi
YjdjNjc2NjhjZGZjODI1ZWMzNWQxMy4uMzM1MDAzYzIyOTk3NGEzOTJiNGZlMmEyOWFhMmM4YmI0
NTlkZjAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGlueVB0clNldC5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1RpbnlQdHJTZXQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNzEsOSArMzcxLDkgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU7CiAK
LSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHRoaW5GbGFnID0gMTsKKyAgICBzdGF0aWMgY29u
c3QgdWludHB0cl90IGZhdEZsYWcgPSAxOwogICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcmVz
ZXJ2ZWRGbGFnID0gMjsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGZsYWdzID0gdGhpbkZs
YWcgfCByZXNlcnZlZEZsYWc7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBmbGFncyA9IGZh
dEZsYWcgfCByZXNlcnZlZEZsYWc7CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZl
ZFZhbHVlID0gNDsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRpbmdT
aXplID0gNDsKQEAgLTQ2Myw3ICs0NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3V0T2ZM
aW5lTGlzdDo6ZGVzdHJveShsaXN0KCkpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzVGhpbigp
IGNvbnN0IHsgcmV0dXJuIG1fcG9pbnRlciAmIHRoaW5GbGFnOyB9CisgICAgYm9vbCBpc1RoaW4o
KSBjb25zdCB7IHJldHVybiAhKG1fcG9pbnRlciAmIGZhdEZsYWcpOyB9CiAgICAgCiAgICAgdm9p
ZCogcG9pbnRlcigpIGNvbnN0CiAgICAgewpAQCAtNDk2LDcgKzQ5Niw3IEBAIHByaXZhdGU6CiAg
ICAgfQogICAgIHZvaWQgc2V0KHVpbnRwdHJfdCBwb2ludGVyLCBib29sIHNpbmdsZUVudHJ5KQog
ICAgIHsKLSAgICAgICAgbV9wb2ludGVyID0gcG9pbnRlciB8IChzaW5nbGVFbnRyeSA/IHRoaW5G
bGFnIDogMCkgfCAobV9wb2ludGVyICYgcmVzZXJ2ZWRGbGFnKTsKKyAgICAgICAgbV9wb2ludGVy
ID0gcG9pbnRlciB8IChzaW5nbGVFbnRyeSA/IDAgOiBmYXRGbGFnKSB8IChtX3BvaW50ZXIgJiBy
ZXNlcnZlZEZsYWcpOwogICAgIH0KICAgICBib29sIGdldFJlc2VydmVkRmxhZygpIGNvbnN0IHsg
cmV0dXJuIG1fcG9pbnRlciAmIHJlc2VydmVkRmxhZzsgfQogICAgIHZvaWQgc2V0UmVzZXJ2ZWRG
bGFnKGJvb2wgdmFsdWUpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>