<?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>164306</bug_id>
          
          <creation_ts>2016-11-01 17:38:01 -0700</creation_ts>
          <short_desc>Asking for a value profile prediction should be defensive against not finding a value profile</short_desc>
          <delta_ts>2017-01-04 18:04:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>bryanv</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dieter</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1247176</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2016-11-01 17:38:01 -0700</bug_when>
    <thetext>Steps to Reproduce:

1. Load http://bokeh.pydata.org/en/dev/docs/gallery/unemployment.html
2. Move mouse over the chart.

Eventually, you&apos;ll crash:

(lldb) bt
* thread #14: tid = 0x71d1aa, 0x00007fff8b8485ac JavaScriptCore`JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit(unsigned int) + 620, name = &apos;DFG Worklist Worker Thread&apos;, stop reason = EXC_BAD_ACCESS (code=1, address=0x18)
  * frame #0: 0x00007fff8b8485ac JavaScriptCore`JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit(unsigned int) + 620
    frame #1: 0x00007fff8b83b52b JavaScriptCore`JSC::DFG::ByteCodeParser::handleCall(int, JSC::DFG::NodeType, JSC::CallMode, unsigned int, JSC::DFG::Node*, int, int, JSC::CallLinkStatus) + 379
    frame #2: 0x00007fff8b83acad JavaScriptCore`JSC::DFG::ByteCodeParser::handleCall(int, JSC::DFG::NodeType, JSC::CallMode, unsigned int, int, int, int) + 429
    frame #3: 0x00007fff8b4d0d5a JavaScriptCore`JSC::DFG::ByteCodeParser::parseBlock(unsigned int) + 6682
    frame #4: 0x00007fff8b4cf0cb JavaScriptCore`JSC::DFG::ByteCodeParser::parseCodeBlock() + 1243
    frame #5: 0x00007fff8b84ee2a JavaScriptCore`void JSC::DFG::ByteCodeParser::inlineCall&lt;JSC::DFG::ByteCodeParser::handleInlining(JSC::DFG::Node*, int, JSC::CallLinkStatus const&amp;, int, JSC::VirtualRegister, JSC::VirtualRegister, unsigned int, int, unsigned int, JSC::DFG::NodeType, JSC::InlineCallFrame::Kind, unsigned long long)::$_0&gt;(JSC::DFG::Node*, int, JSC::CallVariant, int, int, unsigned int, JSC::InlineCallFrame::Kind, JSC::DFG::ByteCodeParser::CallerLinkability, JSC::DFG::ByteCodeParser::handleInlining(JSC::DFG::Node*, int, JSC::CallLinkStatus const&amp;, int, JSC::VirtualRegister, JSC::VirtualRegister, unsigned int, int, unsigned int, JSC::DFG::NodeType, JSC::InlineCallFrame::Kind, unsigned long long)::$_0 const&amp;) + 2042
    frame #6: 0x00007fff8b83e3b9 JavaScriptCore`JSC::DFG::ByteCodeParser::handleInlining(JSC::DFG::Node*, int, JSC::CallLinkStatus const&amp;, int, JSC::VirtualRegister, JSC::VirtualRegister, unsigned int, int, unsigned int, JSC::DFG::NodeType, JSC::InlineCallFrame::Kind, unsigned long long) + 10873
    frame #7: 0x00007fff8b83b78b JavaScriptCore`JSC::DFG::ByteCodeParser::handleCall(int, JSC::DFG::NodeType, JSC::InlineCallFrame::Kind, unsigned int, JSC::DFG::Node*, int, int, JSC::CallLinkStatus, unsigned long long) + 315
    frame #8: 0x00007fff8b8458d8 JavaScriptCore`JSC::DFG::ByteCodeParser::handlePutById(JSC::DFG::Node*, unsigned int, JSC::DFG::Node*, JSC::PutByIdStatus const&amp;, bool) + 4120
    frame #9: 0x00007fff8b4d08b9 JavaScriptCore`JSC::DFG::ByteCodeParser::parseBlock(unsigned int) + 5497
    frame #10: 0x00007fff8b4cf0cb JavaScriptCore`JSC::DFG::ByteCodeParser::parseCodeBlock() + 1243
    frame #11: 0x00007fff8b4cea57 JavaScriptCore`JSC::DFG::ByteCodeParser::parse() + 263
    frame #12: 0x00007fff8b848322 JavaScriptCore`JSC::DFG::parse(JSC::DFG::Graph&amp;) + 402
    frame #13: 0x00007fff8b985300 JavaScriptCore`JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&amp;) + 272
    frame #14: 0x00007fff8b984c4b JavaScriptCore`JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&amp;, JSC::DFG::ThreadData*) + 603
    frame #15: 0x00007fff8ba2a696 JavaScriptCore`JSC::DFG::Worklist::runThread(JSC::DFG::ThreadData*) + 998
    frame #16: 0x00007fff8b434332 JavaScriptCore`WTF::threadEntryPoint(void*) + 178
    frame #17: 0x00007fff8b43425f JavaScriptCore`WTF::wtfThreadEntryPoint(void*) + 15
    frame #18: 0x00007fff9e816aab libsystem_pthread.dylib`_pthread_body + 180
    frame #19: 0x00007fff9e8169f7 libsystem_pthread.dylib`_pthread_start + 286
    frame #20: 0x00007fff9e8161fd libsystem_pthread.dylib`thread_start + 13</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247183</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-01 17:59:51 -0700</bug_when>
    <thetext>I&apos;m getting different crash traces every time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247196</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-01 19:09:33 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; I&apos;m getting different crash traces every time.

Nevermind, disabling concurrent JIT produces the same crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247197</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-01 19:09:52 -0700</bug_when>
    <thetext>Looks like it might be tail call related. It doesn&apos;t crash when disabling tail calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247341</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-02 09:16:17 -0700</bug_when>
    <thetext>I&apos;ve got a reduced repro:

```
let o = {
    set foo(x) {
        &apos;use strict&apos;;
        return bar();
    }
};

function bar() {
    return 20;
}

for (let i = 0; i &lt; 100000; i++)
    o.foo = 20;

```

The problem is we blindly assume that walking up the call chain to find the first non-inlined callee will leave us at a value producing bytecode operation. This is not true in the case of a setter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247342</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-02 09:19:06 -0700</bug_when>
    <thetext>Part of me wants to say the solution should simply be that CodeBlock::valueProfilePredictionForBytecodeOffset behaves well if it doesn&apos;t find a value profile. Right now, it assumes it finds a non-null profile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247345</commentid>
    <comment_count>6</comment_count>
      <attachid>293664</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-02 09:30:29 -0700</bug_when>
    <thetext>Created attachment 293664
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247381</commentid>
    <comment_count>7</comment_count>
      <attachid>293664</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-02 11:01:52 -0700</bug_when>
    <thetext>Comment on attachment 293664
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247382</commentid>
    <comment_count>8</comment_count>
      <attachid>293664</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-02 11:07:11 -0700</bug_when>
    <thetext>Comment on attachment 293664
patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:419
&gt; +        return SpecFullTop;

Top means that you have a value profile and this value profile saw values of every possible type.

Please use Bottom, which means that you have not seen any values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247392</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-02 11:13:14 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 293664 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293664&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.h:419
&gt; &gt; +        return SpecFullTop;
&gt; 
&gt; Top means that you have a value profile and this value profile saw values of
&gt; every possible type.
&gt; 
&gt; Please use Bottom, which means that you have not seen any values.

Interesting.  /Bottom/SpecNone/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247395</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-02 11:14:51 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Comment on attachment 293664 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=293664&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.h:419
&gt; &gt; &gt; +        return SpecFullTop;
&gt; &gt; 
&gt; &gt; Top means that you have a value profile and this value profile saw values of
&gt; &gt; every possible type.
&gt; &gt; 
&gt; &gt; Please use Bottom, which means that you have not seen any values.
&gt; 
&gt; Interesting.  /Bottom/SpecNone/

Right!

When you ask for a predicted type, you&apos;re asking what types we have seen.  So, anytime we return Top for the predicted type, that&apos;s just wrong.

Also, SpecFullTop is the wrong Top to use anyway - that includes bytecode-only types like Empty and DFG-only types like Int52.  No value profile would see that.  So, probably SpecHeapTop would be the thing that you would want if Top was right, which it isn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247402</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-02 11:23:14 -0700</bug_when>
    <thetext>I just want to make sure y&apos;all understand how important this is.  The DFG uses predicted types to bootstrap forward flow.  Top is like a deadly virus for forward flow: because flow fixpoints merge types, anything that Top flows into will also become Top.  So, even one dose of Top has a chance to infect everything with Top.

We don&apos;t usually see Top everywhere because programmers don&apos;t program that way.  Even very polymorphic variables have some bound, and that bound is almost never Top.

When a Node predicts its outcome to be Top, this means that every transitive user of that Node will have to deactivate all of their optimizations.

An inline cache, even if it knew from its own profiling that it always took a fast path, will now become pessimistic because it will think it has to handle non-cell cases.

All math will go slow.  All math will use snippets instead of fast code.

Basically all of our other optimizations will deactivate because FixupPhase will be forced to use Untyped for all transitive uses of Top.

So, our profiling code should never pretend to have seen a type if there is no evidence that it has actually seen it.  Type prediction should not be sound in the traditional way, where in cases of doubt you overestimate the set of types.  Type prediction should be sound in the *opposite* way: if in doubt it must underestimate.  It&apos;s not a proof that these are all the types you will ever see.  Quite the opposite: it&apos;s a statement about what types we have definitely seen in the past.  It&apos;s OK to say that you don&apos;t think you have seen some type, if you have doubt about whether or not you have seen it.  If you say that you have seen it, then you better be able to prove that the program really has seen that type at least once.  So, it&apos;s never correct to say that we have definitely seen Top in the past.  It&apos;s always correct to say that we have definitely seen Bottom (i.e. SpecEmpty) in the past.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247404</commentid>
    <comment_count>12</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-02 11:28:37 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I just want to make sure y&apos;all understand how important this is.  The DFG
&gt; uses predicted types to bootstrap forward flow.  Top is like a deadly virus
&gt; for forward flow: because flow fixpoints merge types, anything that Top
&gt; flows into will also become Top.  So, even one dose of Top has a chance to
&gt; infect everything with Top.
&gt; 
&gt; We don&apos;t usually see Top everywhere because programmers don&apos;t program that
&gt; way.  Even very polymorphic variables have some bound, and that bound is
&gt; almost never Top.
&gt; 
&gt; When a Node predicts its outcome to be Top, this means that every transitive
&gt; user of that Node will have to deactivate all of their optimizations.
&gt; 
&gt; An inline cache, even if it knew from its own profiling that it always took
&gt; a fast path, will now become pessimistic because it will think it has to
&gt; handle non-cell cases.
&gt; 
&gt; All math will go slow.  All math will use snippets instead of fast code.
&gt; 
&gt; Basically all of our other optimizations will deactivate because FixupPhase
&gt; will be forced to use Untyped for all transitive uses of Top.
&gt; 
&gt; So, our profiling code should never pretend to have seen a type if there is
&gt; no evidence that it has actually seen it.  Type prediction should not be
&gt; sound in the traditional way, where in cases of doubt you overestimate the
&gt; set of types.  Type prediction should be sound in the *opposite* way: if in
&gt; doubt it must underestimate.  It&apos;s not a proof that these are all the types
&gt; you will ever see.  Quite the opposite: it&apos;s a statement about what types we
&gt; have definitely seen in the past.  It&apos;s OK to say that you don&apos;t think you
&gt; have seen some type, if you have doubt about whether or not you have seen
&gt; it.  If you say that you have seen it, then you better be able to prove that
&gt; the program really has seen that type at least once.  So, it&apos;s never correct
&gt; to say that we have definitely seen Top in the past.  It&apos;s always correct to
&gt; say that we have definitely seen Bottom (i.e. SpecEmpty) in the past.

I feel like I have seen this mistake happen many times. Maybe we should add this comment (or something like it) in SpeculatedType.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247428</commentid>
    <comment_count>13</comment_count>
    <who name="">bryanv</who>
    <bug_when>2016-11-02 12:33:17 -0700</bug_when>
    <thetext>Just FYI I applied a fix to Bokeh, and will be pushing a new dev build soon. The original link in the &quot;Steps to Reproduce&quot; will be updated with a working version. It doesn&apos;t seem like you&apos;d need the original anymore since there is a minimal test case to repro in a comment, but if the original file is needed for any reason please let me know and I can provide it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247429</commentid>
    <comment_count>14</comment_count>
    <who name="">bryanv</who>
    <bug_when>2016-11-02 12:34:01 -0700</bug_when>
    <thetext>Also: INCREDIBLE THANKS for helping to sort this out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247444</commentid>
    <comment_count>15</comment_count>
      <attachid>293690</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-02 13:28:07 -0700</bug_when>
    <thetext>Created attachment 293690
patch

New patch that uses bottom both in the CodeBlock function, and inside that function&apos;s caller inside the DFG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247447</commentid>
    <comment_count>16</comment_count>
      <attachid>293690</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-02 13:33:50 -0700</bug_when>
    <thetext>Comment on attachment 293690
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247468</commentid>
    <comment_count>17</comment_count>
      <attachid>293690</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-02 14:05:55 -0700</bug_when>
    <thetext>Comment on attachment 293690
patch

Tests are breaking because of this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247536</commentid>
    <comment_count>18</comment_count>
      <attachid>293707</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-02 16:07:14 -0700</bug_when>
    <thetext>Created attachment 293707
patch

A patch that now passes JSC tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247543</commentid>
    <comment_count>19</comment_count>
      <attachid>293707</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-02 16:17:21 -0700</bug_when>
    <thetext>Comment on attachment 293707
patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:896
&gt;              prediction = profiledBlock-&gt;valueProfilePredictionForBytecodeOffset(locker, bytecodeIndex);
&gt; +            if (prediction != SpecNone)
&gt; +                return prediction;
&gt; +            return SpecFullTop;

The old code does not convert SpecNone to SpecFullTop here.  I think you can just return the prediction here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247582</commentid>
    <comment_count>20</comment_count>
      <attachid>293722</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-02 17:05:19 -0700</bug_when>
    <thetext>Created attachment 293722
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247700</commentid>
    <comment_count>21</comment_count>
      <attachid>293722</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-03 07:42:46 -0700</bug_when>
    <thetext>Comment on attachment 293722
patch for landing

Clearing flags on attachment: 293722

Committed r208326: &lt;http://trac.webkit.org/changeset/208326&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247701</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-03 07:42:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247834</commentid>
    <comment_count>23</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 13:50:58 -0700</bug_when>
    <thetext>Committed r208341: &lt;http://trac.webkit.org/changeset/208341&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247841</commentid>
    <comment_count>24</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 13:57:34 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Committed r208341: &lt;http://trac.webkit.org/changeset/208341&gt;

My bad. git rebase messed up the changelog so my landing used the wrong bug... :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248798</commentid>
    <comment_count>25</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-07 11:31:44 -0800</bug_when>
    <thetext>*** Bug 164327 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263955</commentid>
    <comment_count>26</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-01-04 18:04:57 -0800</bug_when>
    <thetext>&lt;rdar://problem/29054076&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293664</attachid>
            <date>2016-11-02 09:30:29 -0700</date>
            <delta_ts>2016-11-02 13:28:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>3560</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgyODIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE2LTExLTAyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEFza2luZyBmb3IgYSB2YWx1ZSBwcm9maWxlIHByZWRpY3Rpb24gc2hv
dWxkIGJlIGRlZmVuc2l2ZSBhZ2FpbnN0IG5vdCBmaW5kaW5nIGEgdmFsdWUgcHJvZmlsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzA2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvaW5s
aW5lZC10YWlsLWNhbGwtaW4taW5saW5lZC1zZXR0ZXItc2hvdWxkLW5vdC1jcmFzaC13aGVuLWdl
dHRpbmctdmFsdWUtcHJvZmlsZS5qczogQWRkZWQuCisgICAgICAgIChsZXQuby5zZXQgZm9vKToK
KyAgICAgICAgKGJhcik6CisKIDIwMTYtMTEtMDEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gZWxpbWluYXRlIHJlc3QgcGFy
YW1ldGVyIGFsbG9jYXRpb25zCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbmxpbmVkLXRhaWwtY2Fs
bC1pbi1pbmxpbmVkLXNldHRlci1zaG91bGQtbm90LWNyYXNoLXdoZW4tZ2V0dGluZy12YWx1ZS1w
cm9maWxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2lubGluZWQtdGFpbC1jYWxs
LWluLWlubGluZWQtc2V0dGVyLXNob3VsZC1ub3QtY3Jhc2gtd2hlbi1nZXR0aW5nLXZhbHVlLXBy
b2ZpbGUuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvaW5saW5lZC10YWlsLWNh
bGwtaW4taW5saW5lZC1zZXR0ZXItc2hvdWxkLW5vdC1jcmFzaC13aGVuLWdldHRpbmctdmFsdWUt
cHJvZmlsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACitsZXQgbyA9IHsKKyAg
ICBzZXQgZm9vKHgpIHsKKyAgICAgICAgJ3VzZSBzdHJpY3QnOworICAgICAgICByZXR1cm4gYmFy
KCk7CisgICAgfQorfTsKKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiAyMDsKK30KKwor
Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykKKyAgICBvLmZvbyA9IDIwOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDgyODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTYt
MTEtMDIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQXNraW5n
IGZvciBhIHZhbHVlIHByb2ZpbGUgcHJlZGljdGlvbiBzaG91bGQgYmUgZGVmZW5zaXZlIGFnYWlu
c3Qgbm90IGZpbmRpbmcgYSB2YWx1ZSBwcm9maWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHksIHRoZSBjb2RlIHRoYXQgY2FsbHMgQ29k
ZUJsb2NrOjp2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQKKyAgICAgICAg
aW4gdGhlIERGRyBhc3N1bWVzIGl0IHdpbGwgYWx3YXlzIGJlIGF0IGEgdmFsdWUgcHJvZHVjaW5n
IG5vZGUuIEhvd2V2ZXIsIHRoaXMgaXNuJ3QKKyAgICAgICAgdHJ1ZSBpZiB3ZSB0YWlsIGNhbGwg
ZnJvbSBhbiBpbmxpbmVkIHNldHRlci4gV2hlbiB3ZSdyZSBhdCBhIHRhaWwgY2FsbCwgd2UgdHJ5
CisgICAgICAgIHRvIGZpbmQgdGhlIGZpcnN0IGNhbGxlciB0aGF0IGlzbid0IGEgdGFpbCBjYWxs
IHRvIHNlZSB3aGF0IHZhbHVlIHRoZQorICAgICAgICB0YWlsX2NhbGwgcHJvZHVjZXMuIElmIHdl
IGlubGluZSBhIHNldHRlciwgaG93ZXZlciwgd2Ugd2lsbCBlbmQgdXAgZmluZGluZworICAgICAg
ICB0aGUgcHV0X2J5X2lkIGFzIG91ciBmaXJzdCBub24tdGFpbC1jYWxsZWQgImNhbGxlciIsIGFu
ZCB0aGF0IHdvbid0IGhhdmUgYQorICAgICAgICB2YWx1ZSBwcm9maWxlIGFzc29jaWF0ZWQgd2l0
aCBpdCBzaW5jZSBpdCdzIG5vdCBhIHZhbHVlIHByb2R1Y2luZyBub2RlLgorICAgICAgICBDb2Rl
QmxvY2s6OnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCBzaG91bGQgYmUg
ZGVmZW5zaXZlCisgICAgICAgIGFnYWluc3QgZmluZGluZyBhIG51bGwgdmFsdWUgcHJvZmlsZS4K
KworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCk6CisKIDIwMTYtMTEt
MDIgIFJvbWFpbiBCZWxsZXNzb3J0ICA8cm9tYWluLmJlbGxlc3NvcnRAY3JmLmNhbm9uLmZyPgog
CiAgICAgICAgIFtSZWFkYWJsZSBTdHJlYW1zIEFQSV0gRW5hYmxlIGNyZWF0aW9uIG9mIFJlYWRh
YmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIwODI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDE0LDcgKzQxNCw5
IEBAIHB1YmxpYzoKICAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KGludCBieXRlY29kZU9mZnNldCk7CiAgICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxl
UHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxv
Y2tlciwgaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+Y29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgIGlmIChWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSA9
IHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
OworICAgICAgICByZXR1cm4gU3BlY0Z1bGxUb3A7CiAgICAgfQogCiAgICAgdW5zaWduZWQgdG90
YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKQo=
</data>
<flag name="review"
          id="316515"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293690</attachid>
            <date>2016-11-02 13:28:07 -0700</date>
            <delta_ts>2016-11-02 16:07:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>7846</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgyODEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE2LTExLTAyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEFza2luZyBmb3IgYSB2YWx1ZSBwcm9maWxlIHByZWRpY3Rpb24gc2hv
dWxkIGJlIGRlZmVuc2l2ZSBhZ2FpbnN0IG5vdCBmaW5kaW5nIGEgdmFsdWUgcHJvZmlsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzA2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvaW5s
aW5lZC10YWlsLWNhbGwtaW4taW5saW5lZC1zZXR0ZXItc2hvdWxkLW5vdC1jcmFzaC13aGVuLWdl
dHRpbmctdmFsdWUtcHJvZmlsZS5qczogQWRkZWQuCisgICAgICAgIChsZXQuby5zZXQgZm9vKToK
KyAgICAgICAgKGJhcik6CisKIDIwMTYtMTEtMDEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gZWxpbWluYXRlIHJlc3QgcGFy
YW1ldGVyIGFsbG9jYXRpb25zCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbmxpbmVkLXRhaWwtY2Fs
bC1pbi1pbmxpbmVkLXNldHRlci1zaG91bGQtbm90LWNyYXNoLXdoZW4tZ2V0dGluZy12YWx1ZS1w
cm9maWxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2lubGluZWQtdGFpbC1jYWxs
LWluLWlubGluZWQtc2V0dGVyLXNob3VsZC1ub3QtY3Jhc2gtd2hlbi1nZXR0aW5nLXZhbHVlLXBy
b2ZpbGUuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvaW5saW5lZC10YWlsLWNh
bGwtaW4taW5saW5lZC1zZXR0ZXItc2hvdWxkLW5vdC1jcmFzaC13aGVuLWdldHRpbmctdmFsdWUt
cHJvZmlsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACitsZXQgbyA9IHsKKyAg
ICBzZXQgZm9vKHgpIHsKKyAgICAgICAgJ3VzZSBzdHJpY3QnOworICAgICAgICByZXR1cm4gYmFy
KCk7CisgICAgfQorfTsKKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiAyMDsKK30KKwor
Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykKKyAgICBvLmZvbyA9IDIwOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDgyODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTYt
MTEtMDIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQXNraW5n
IGZvciBhIHZhbHVlIHByb2ZpbGUgcHJlZGljdGlvbiBzaG91bGQgYmUgZGVmZW5zaXZlIGFnYWlu
c3Qgbm90IGZpbmRpbmcgYSB2YWx1ZSBwcm9maWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHksIHRoZSBjb2RlIHRoYXQgY2FsbHMgQ29k
ZUJsb2NrOjp2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQKKyAgICAgICAg
aW4gdGhlIERGRyBhc3N1bWVzIGl0IHdpbGwgYWx3YXlzIGJlIGF0IGEgdmFsdWUgcHJvZHVjaW5n
IG5vZGUuIEhvd2V2ZXIsIHRoaXMgaXNuJ3QKKyAgICAgICAgdHJ1ZSBpZiB3ZSB0YWlsIGNhbGwg
ZnJvbSBhbiBpbmxpbmVkIHNldHRlci4gV2hlbiB3ZSdyZSBhdCBhIHRhaWwgY2FsbCwgd2UgdHJ5
CisgICAgICAgIHRvIGZpbmQgdGhlIGZpcnN0IGNhbGxlciB0aGF0IGlzbid0IGEgdGFpbCBjYWxs
IHRvIHNlZSB3aGF0IHZhbHVlIHRoZQorICAgICAgICB0YWlsX2NhbGwgcHJvZHVjZXMuIElmIHdl
IGlubGluZSBhIHNldHRlciwgaG93ZXZlciwgd2Ugd2lsbCBlbmQgdXAgZmluZGluZworICAgICAg
ICB0aGUgcHV0X2J5X2lkIGFzIG91ciBmaXJzdCBub24tdGFpbC1jYWxsZWQgImNhbGxlciIsIGFu
ZCB0aGF0IHdvbid0IGhhdmUgYQorICAgICAgICB2YWx1ZSBwcm9maWxlIGFzc29jaWF0ZWQgd2l0
aCBpdCBzaW5jZSBpdCdzIG5vdCBhIHZhbHVlIHByb2R1Y2luZyBub2RlLgorICAgICAgICBDb2Rl
QmxvY2s6OnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCBzaG91bGQgYmUg
ZGVmZW5zaXZlCisgICAgICAgIGFnYWluc3QgZmluZGluZyBhIG51bGwgdmFsdWUgcHJvZmlsZS4K
KworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCk6CisKIDIwMTYtMTEt
MDIgIFJvbWFpbiBCZWxsZXNzb3J0ICA8cm9tYWluLmJlbGxlc3NvcnRAY3JmLmNhbm9uLmZyPgog
CiAgICAgICAgIFtSZWFkYWJsZSBTdHJlYW1zIEFQSV0gRW5hYmxlIGNyZWF0aW9uIG9mIFJlYWRh
YmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIwODI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDE0LDcgKzQxNCw5
IEBAIHB1YmxpYzoKICAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KGludCBieXRlY29kZU9mZnNldCk7CiAgICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxl
UHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxv
Y2tlciwgaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+Y29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgIGlmIChWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSA9
IHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
OworICAgICAgICByZXR1cm4gU3BlY05vbmU7CiAgICAgfQogCiAgICAgdW5zaWduZWQgdG90YWxO
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDIwODI4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NDgsNTYgKzg0OCw1MSBAQCBwcml2YXRlOgogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRp
Y3Rpb25XaXRob3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQogICAgIHsKICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbjsKLSAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrID0gbnVsbHB0cjsKLQogICAgICAgICB7CiAgICAgICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7
CiAgICAgICAgICAgICBwcmVkaWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQobG9ja2VyLCBieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBT
cGVjTm9uZSkgewotICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24g
YWJvdXQgdGhlIHZhbHVlcyB0aGlzCi0gICAgICAgICAgICAgICAgLy8gbm9kZSBnZW5lcmF0ZXMs
IHdlIGNoZWNrIGlmIGJ5IGFueSBjaGFuY2UgaXQgaXMKLSAgICAgICAgICAgICAgICAvLyBhIHRh
aWwgY2FsbCBvcGNvZGUuIEluIHRoYXQgY2FzZSwgd2Ugd2FsayB1cCB0aGUKLSAgICAgICAgICAg
ICAgICAvLyBpbmxpbmUgZnJhbWVzIHRvIGZpbmQgYSBjYWxsIGhpZ2hlciBpbiB0aGUgY2FsbAot
ICAgICAgICAgICAgICAgIC8vIGNoYWluIGFuZCB1c2UgaXRzIHByZWRpY3Rpb24uIElmIHdlIG9u
bHkgaGF2ZQotICAgICAgICAgICAgICAgIC8vIGlubGluZWQgdGFpbCBjYWxsIGZyYW1lcywgd2Ug
dXNlIFNwZWNGdWxsVG9wCi0gICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgYSBzcHVyaW91cyBP
U1IgZXhpdC4KLSAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBi
eXRlY29kZUluZGV4OwotICAgICAgICAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gbV92bS0+
aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uLT51Lm9wY29kZSk7Ci0KLSAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBvcF90
YWlsX2NhbGw6Ci0gICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKLSAg
ICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czogewotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwcmVkaWN0aW9uID0gU3BlY0Z1bGxUb3A7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBD
b2RlT3JpZ2luKiBjb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBw
aW5nVGFpbENhbGxzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IFNwZWNGdWxsVG9wOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgSW5saW5lU3RhY2tFbnRyeSogc3RhY2sgPSBtX2lubGluZVN0YWNrVG9wOwot
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RhY2stPm1faW5saW5lQ2FsbEZyYW1lICE9IGNv
ZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNr
ID0gc3RhY2stPm1fY2FsbGVyOwotICAgICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0g
Y29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRC
bG9jayA9IHN0YWNrLT5tX3Byb2ZpbGVkQmxvY2s7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHByZWRpY3Rpb24gIT0gU3BlY05vbmUp
CisgICAgICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKIAotICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9u
IGFib3V0IHRoZSB2YWx1ZXMgdGhpcworICAgICAgICAvLyBub2RlIGdlbmVyYXRlcywgd2UgY2hl
Y2sgaWYgYnkgYW55IGNoYW5jZSBpdCBpcworICAgICAgICAvLyBhIHRhaWwgY2FsbCBvcGNvZGUu
IEluIHRoYXQgY2FzZSwgd2Ugd2FsayB1cCB0aGUKKyAgICAgICAgLy8gaW5saW5lIGZyYW1lcyB0
byBmaW5kIGEgY2FsbCBoaWdoZXIgaW4gdGhlIGNhbGwKKyAgICAgICAgLy8gY2hhaW4gYW5kIHVz
ZSBpdHMgcHJlZGljdGlvbi4gSWYgd2Ugb25seSBoYXZlCisgICAgICAgIC8vIGlubGluZWQgdGFp
bCBjYWxsIGZyYW1lcywgd2UgdXNlIFNwZWNGdWxsVG9wCisgICAgICAgIC8vIHRvIGF2b2lkIGEg
c3B1cmlvdXMgT1NSIGV4aXQuCisgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAr
IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gbV92bS0+aW50ZXJw
cmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uLT51Lm9wY29kZSk7CisKKyAgICAgICAgc3dp
dGNoIChvcGNvZGVJRCkgeworICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHM6IHsKKyAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFNwZWNOb25lOwogCi0gICAgICAgIGlmIChwcm9maWxlZEJsb2Nr
KSB7CisgICAgICAgICAgICBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1l
KCktPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCk7CisgICAgICAgICAgICBpZiAoIWNvZGVP
cmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIFNwZWNOb25lOworCisgICAgICAgICAgICBJ
bmxpbmVTdGFja0VudHJ5KiBzdGFjayA9IG1faW5saW5lU3RhY2tUb3A7CisgICAgICAgICAgICB3
aGlsZSAoc3RhY2stPm1faW5saW5lQ2FsbEZyYW1lICE9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxG
cmFtZSkKKyAgICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLT5tX2NhbGxlcjsKKworICAgICAg
ICAgICAgYnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAg
ICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBzdGFjay0+bV9wcm9maWxlZEJsb2NrOwog
ICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgICAgIHByZWRpY3Rpb24gPSBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2Zp
bGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQobG9ja2VyLCBieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9y
Qnl0ZWNvZGVPZmZzZXQobG9ja2VyLCBieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogCi0gICAg
ICAgIHJldHVybiBwcmVkaWN0aW9uOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIFNwZWNOb25lOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBTcGVjTm9uZTsKICAgICB9CiAKICAgICBTcGVjdWxhdGVkVHlwZSBn
ZXRQcmVkaWN0aW9uKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCg==
</data>
<flag name="review"
          id="316537"
          type_id="1"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293707</attachid>
            <date>2016-11-02 16:07:14 -0700</date>
            <delta_ts>2016-11-02 17:05:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>8331</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgzMDkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE2LTExLTAyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEFza2luZyBmb3IgYSB2YWx1ZSBwcm9maWxlIHByZWRpY3Rpb24gc2hv
dWxkIGJlIGRlZmVuc2l2ZSBhZ2FpbnN0IG5vdCBmaW5kaW5nIGEgdmFsdWUgcHJvZmlsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzA2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvaW5s
aW5lZC10YWlsLWNhbGwtaW4taW5saW5lZC1zZXR0ZXItc2hvdWxkLW5vdC1jcmFzaC13aGVuLWdl
dHRpbmctdmFsdWUtcHJvZmlsZS5qczogQWRkZWQuCisgICAgICAgIChsZXQuby5zZXQgZm9vKToK
KyAgICAgICAgKGJhcik6CisKIDIwMTYtMTEtMDEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gZWxpbWluYXRlIHJlc3QgcGFy
YW1ldGVyIGFsbG9jYXRpb25zCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbmxpbmVkLXRhaWwtY2Fs
bC1pbi1pbmxpbmVkLXNldHRlci1zaG91bGQtbm90LWNyYXNoLXdoZW4tZ2V0dGluZy12YWx1ZS1w
cm9maWxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2lubGluZWQtdGFpbC1jYWxs
LWluLWlubGluZWQtc2V0dGVyLXNob3VsZC1ub3QtY3Jhc2gtd2hlbi1nZXR0aW5nLXZhbHVlLXBy
b2ZpbGUuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvaW5saW5lZC10YWlsLWNh
bGwtaW4taW5saW5lZC1zZXR0ZXItc2hvdWxkLW5vdC1jcmFzaC13aGVuLWdldHRpbmctdmFsdWUt
cHJvZmlsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACitsZXQgbyA9IHsKKyAg
ICBzZXQgZm9vKHgpIHsKKyAgICAgICAgJ3VzZSBzdHJpY3QnOworICAgICAgICByZXR1cm4gYmFy
KCk7CisgICAgfQorfTsKKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiAyMDsKK30KKwor
Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykKKyAgICBvLmZvbyA9IDIwOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDgzMDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTYt
MTEtMDIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQXNraW5n
IGZvciBhIHZhbHVlIHByb2ZpbGUgcHJlZGljdGlvbiBzaG91bGQgYmUgZGVmZW5zaXZlIGFnYWlu
c3Qgbm90IGZpbmRpbmcgYSB2YWx1ZSBwcm9maWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHksIHRoZSBjb2RlIHRoYXQgY2FsbHMgQ29k
ZUJsb2NrOjp2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQKKyAgICAgICAg
aW4gdGhlIERGRyBhc3N1bWVzIGl0IHdpbGwgYWx3YXlzIGJlIGF0IGEgdmFsdWUgcHJvZHVjaW5n
IG5vZGUuIEhvd2V2ZXIsIHRoaXMgaXNuJ3QKKyAgICAgICAgdHJ1ZSBpZiB3ZSB0YWlsIGNhbGwg
ZnJvbSBhbiBpbmxpbmVkIHNldHRlci4gV2hlbiB3ZSdyZSBhdCBhIHRhaWwgY2FsbCwgd2UgdHJ5
CisgICAgICAgIHRvIGZpbmQgdGhlIGZpcnN0IGNhbGxlciB0aGF0IGlzbid0IGEgdGFpbCBjYWxs
IHRvIHNlZSB3aGF0IHZhbHVlIHRoZQorICAgICAgICB0YWlsX2NhbGwgcHJvZHVjZXMuIElmIHdl
IGlubGluZSBhIHNldHRlciwgaG93ZXZlciwgd2Ugd2lsbCBlbmQgdXAgZmluZGluZworICAgICAg
ICB0aGUgcHV0X2J5X2lkIGFzIG91ciBmaXJzdCBub24tdGFpbC1jYWxsZWQgImNhbGxlciIsIGFu
ZCB0aGF0IHdvbid0IGhhdmUgYQorICAgICAgICB2YWx1ZSBwcm9maWxlIGFzc29jaWF0ZWQgd2l0
aCBpdCBzaW5jZSBpdCdzIG5vdCBhIHZhbHVlIHByb2R1Y2luZyBub2RlLgorICAgICAgICBDb2Rl
QmxvY2s6OnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCBzaG91bGQgYmUg
ZGVmZW5zaXZlCisgICAgICAgIGFnYWluc3QgZmluZGluZyBhIG51bGwgdmFsdWUgcHJvZmlsZS4K
KworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KToKKwogMjAxNi0xMS0wMiAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIE9uZSBmaWxlIHBlciBjbGFz
cyBmb3IgQ29kZUJsb2NrLmgvLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjA4MzA5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNyArNDE0LDkg
QEAgcHVibGljOgogICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQ
cmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9j
a2VyLCBpbnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24obG9ja2VyKTsKKyAgICAgICAgaWYgKFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlID0g
dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKQorICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlUHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7
CisgICAgICAgIHJldHVybiBTcGVjTm9uZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCB0b3RhbE51
bWJlck9mVmFsdWVQcm9maWxlcygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA4MzA5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg0OSw1NiArODQ5LDU5IEBAIHByaXZhdGU6CiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGlj
dGlvbldpdGhvdXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uOwotICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2sgPSBudWxscHRyOwotCiAgICAgICAgIHsKICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
ICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChsb2NrZXIsIGJ5dGVj
b2RlSW5kZXgpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNw
ZWNOb25lKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBpbmZvcm1hdGlvbiBh
Ym91dCB0aGUgdmFsdWVzIHRoaXMKLSAgICAgICAgICAgICAgICAvLyBub2RlIGdlbmVyYXRlcywg
d2UgY2hlY2sgaWYgYnkgYW55IGNoYW5jZSBpdCBpcwotICAgICAgICAgICAgICAgIC8vIGEgdGFp
bCBjYWxsIG9wY29kZS4gSW4gdGhhdCBjYXNlLCB3ZSB3YWxrIHVwIHRoZQotICAgICAgICAgICAg
ICAgIC8vIGlubGluZSBmcmFtZXMgdG8gZmluZCBhIGNhbGwgaGlnaGVyIGluIHRoZSBjYWxsCi0g
ICAgICAgICAgICAgICAgLy8gY2hhaW4gYW5kIHVzZSBpdHMgcHJlZGljdGlvbi4gSWYgd2Ugb25s
eSBoYXZlCi0gICAgICAgICAgICAgICAgLy8gaW5saW5lZCB0YWlsIGNhbGwgZnJhbWVzLCB3ZSB1
c2UgU3BlY0Z1bGxUb3AKLSAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBhIHNwdXJpb3VzIE9T
UiBleGl0LgotICAgICAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5
dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX3ZtLT5p
bnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKLQotICAgICAg
ICAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIG9wX3Rh
aWxfY2FsbDoKLSAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgotICAg
ICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOiB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHByZWRpY3Rpb24gPSBTcGVjRnVsbFRvcDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIENv
ZGVPcmlnaW4qIGNvZGVPcmlnaW4gPSBpbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBp
bmdUYWlsQ2FsbHMoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gU3BlY0Z1bGxUb3A7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBJbmxpbmVTdGFja0VudHJ5KiBzdGFjayA9IG1faW5saW5lU3RhY2tUb3A7Ci0g
ICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay0+bV9pbmxpbmVDYWxsRnJhbWUgIT0gY29k
ZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sg
PSBzdGFjay0+bV9jYWxsZXI7Ci0gICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4OwotICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJs
b2NrID0gc3RhY2stPm1fcHJvZmlsZWRCbG9jazsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBpZiAocHJlZGljdGlvbiAhPSBTcGVjTm9uZSkK
KyAgICAgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwogCi0gICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24g
YWJvdXQgdGhlIHZhbHVlcyB0aGlzCisgICAgICAgIC8vIG5vZGUgZ2VuZXJhdGVzLCB3ZSBjaGVj
ayBpZiBieSBhbnkgY2hhbmNlIGl0IGlzCisgICAgICAgIC8vIGEgdGFpbCBjYWxsIG9wY29kZS4g
SW4gdGhhdCBjYXNlLCB3ZSB3YWxrIHVwIHRoZQorICAgICAgICAvLyBpbmxpbmUgZnJhbWVzIHRv
IGZpbmQgYSBjYWxsIGhpZ2hlciBpbiB0aGUgY2FsbAorICAgICAgICAvLyBjaGFpbiBhbmQgdXNl
IGl0cyBwcmVkaWN0aW9uLiBJZiB3ZSBvbmx5IGhhdmUKKyAgICAgICAgLy8gaW5saW5lZCB0YWls
IGNhbGwgZnJhbWVzLCB3ZSB1c2UgU3BlY0Z1bGxUb3AKKyAgICAgICAgLy8gdG8gYXZvaWQgYSBz
cHVyaW91cyBPU1IgZXhpdC4KKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gbV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsg
Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX3ZtLT5pbnRlcnBy
ZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKKworICAgICAgICBzd2l0
Y2ggKG9wY29kZUlEKSB7CisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBjYXNl
IG9wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50czogeworICAgICAgICAgICAgLy8gVGhpbmdzIHNob3VsZCBiZSBtb3JlIHBlcm1p
c3NpdmUgdG8gdXMgcmV0dXJuaW5nIEJPVFRPTSBpbnN0ZWFkIG9mIFRPUCBoZXJlLgorICAgICAg
ICAgICAgLy8gQ3VycmVudGx5LCB0aGlzIHdpbGwgY2F1c2UgdXMgdG8gRm9yY2UgT1NSIGV4aXQu
IFRoaXMgaXMgYmFkIGJlY2F1c2UgcmV0dXJuaW5nCisgICAgICAgICAgICAvLyBUT1Agd2lsbCBj
YXVzZSBhbnl0aGluZyB0aGF0IHRyYW5zaXRpdmVseSB0b3VjaGVzIHRoaXMgc3BlY3VsYXRlZCB0
eXBlIHRvCisgICAgICAgICAgICAvLyBhbHNvIGJlY29tZSBUT1AgZHVyaW5nIHByZWRpY3Rpb24g
cHJvcGFnYXRpb24uCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0MzM3CisgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBTcGVjRnVsbFRvcDsKKworICAgICAgICAgICAgQ29kZU9y
aWdpbiogY29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1Rh
aWxDYWxscygpOworICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luKQorICAgICAgICAgICAgICAg
IHJldHVybiBTcGVjRnVsbFRvcDsKKworICAgICAgICAgICAgSW5saW5lU3RhY2tFbnRyeSogc3Rh
Y2sgPSBtX2lubGluZVN0YWNrVG9wOworICAgICAgICAgICAgd2hpbGUgKHN0YWNrLT5tX2lubGlu
ZUNhbGxGcmFtZSAhPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAg
ICAgc3RhY2sgPSBzdGFjay0+bV9jYWxsZXI7CiAKLSAgICAgICAgaWYgKHByb2ZpbGVkQmxvY2sp
IHsKKyAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4
OworICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gc3RhY2stPm1fcHJvZmls
ZWRCbG9jazsKICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHByb2ZpbGVk
QmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICBwcmVkaWN0aW9uID0gcHJvZmlsZWRCbG9jay0+
dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgICAgICBpZiAocHJlZGljdGlvbiAhPSBTcGVjTm9uZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKKyAgICAgICAgICAgIHJldHVybiBTcGVjRnVsbFRv
cDsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBwcmVkaWN0aW9uOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIFNwZWNOb25lOworICAgICAgICB9CisKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNwZWNOb25lOwog
ICAgIH0KIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb24odW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkK
</data>
<flag name="review"
          id="316554"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293722</attachid>
            <date>2016-11-02 17:05:19 -0700</date>
            <delta_ts>2016-11-03 07:42:46 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>8308</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgzMDkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE2LTExLTAyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEFza2luZyBmb3IgYSB2YWx1ZSBwcm9maWxlIHByZWRpY3Rpb24gc2hv
dWxkIGJlIGRlZmVuc2l2ZSBhZ2FpbnN0IG5vdCBmaW5kaW5nIGEgdmFsdWUgcHJvZmlsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzA2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisKKyAgICAgICAgKiBzdHJlc3MvaW5saW5lZC10
YWlsLWNhbGwtaW4taW5saW5lZC1zZXR0ZXItc2hvdWxkLW5vdC1jcmFzaC13aGVuLWdldHRpbmct
dmFsdWUtcHJvZmlsZS5qczogQWRkZWQuCisgICAgICAgIChsZXQuby5zZXQgZm9vKToKKyAgICAg
ICAgKGJhcik6CisKIDIwMTYtMTEtMDEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+
CiAKICAgICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gZWxpbWluYXRlIHJlc3QgcGFyYW1ldGVy
IGFsbG9jYXRpb25zCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9pbmxpbmVkLXRhaWwtY2FsbC1pbi1p
bmxpbmVkLXNldHRlci1zaG91bGQtbm90LWNyYXNoLXdoZW4tZ2V0dGluZy12YWx1ZS1wcm9maWxl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2lubGluZWQtdGFpbC1jYWxsLWluLWlu
bGluZWQtc2V0dGVyLXNob3VsZC1ub3QtY3Jhc2gtd2hlbi1nZXR0aW5nLXZhbHVlLXByb2ZpbGUu
anMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvaW5saW5lZC10YWlsLWNhbGwtaW4t
aW5saW5lZC1zZXR0ZXItc2hvdWxkLW5vdC1jcmFzaC13aGVuLWdldHRpbmctdmFsdWUtcHJvZmls
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACitsZXQgbyA9IHsKKyAgICBzZXQg
Zm9vKHgpIHsKKyAgICAgICAgJ3VzZSBzdHJpY3QnOworICAgICAgICByZXR1cm4gYmFyKCk7Cisg
ICAgfQorfTsKKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiAyMDsKK30KKworZm9yIChs
ZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykKKyAgICBvLmZvbyA9IDIwOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDgzMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTYtMTEtMDIg
IFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQXNraW5nIGZvciBh
IHZhbHVlIHByb2ZpbGUgcHJlZGljdGlvbiBzaG91bGQgYmUgZGVmZW5zaXZlIGFnYWluc3Qgbm90
IGZpbmRpbmcgYSB2YWx1ZSBwcm9maWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjQzMDYKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4K
KworICAgICAgICBDdXJyZW50bHksIHRoZSBjb2RlIHRoYXQgY2FsbHMgQ29kZUJsb2NrOjp2YWx1
ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQKKyAgICAgICAgaW4gdGhlIERGRyBh
c3N1bWVzIGl0IHdpbGwgYWx3YXlzIGJlIGF0IGEgdmFsdWUgcHJvZHVjaW5nIG5vZGUuIEhvd2V2
ZXIsIHRoaXMgaXNuJ3QKKyAgICAgICAgdHJ1ZSBpZiB3ZSB0YWlsIGNhbGwgZnJvbSBhbiBpbmxp
bmVkIHNldHRlci4gV2hlbiB3ZSdyZSBhdCBhIHRhaWwgY2FsbCwgd2UgdHJ5CisgICAgICAgIHRv
IGZpbmQgdGhlIGZpcnN0IGNhbGxlciB0aGF0IGlzbid0IGEgdGFpbCBjYWxsIHRvIHNlZSB3aGF0
IHZhbHVlIHRoZQorICAgICAgICB0YWlsX2NhbGwgcHJvZHVjZXMuIElmIHdlIGlubGluZSBhIHNl
dHRlciwgaG93ZXZlciwgd2Ugd2lsbCBlbmQgdXAgZmluZGluZworICAgICAgICB0aGUgcHV0X2J5
X2lkIGFzIG91ciBmaXJzdCBub24tdGFpbC1jYWxsZWQgImNhbGxlciIsIGFuZCB0aGF0IHdvbid0
IGhhdmUgYQorICAgICAgICB2YWx1ZSBwcm9maWxlIGFzc29jaWF0ZWQgd2l0aCBpdCBzaW5jZSBp
dCdzIG5vdCBhIHZhbHVlIHByb2R1Y2luZyBub2RlLgorICAgICAgICBDb2RlQmxvY2s6OnZhbHVl
UHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCBzaG91bGQgYmUgZGVmZW5zaXZlCisg
ICAgICAgIGFnYWluc3QgZmluZGluZyBhIG51bGwgdmFsdWUgcHJvZmlsZS4KKworICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJl
ZGljdGlvbldpdGhvdXRPU1JFeGl0KToKKwogMjAxNi0xMS0wMiAgR2VvZmZyZXkgR2FyZW4gIDxn
Z2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIE9uZSBmaWxlIHBlciBjbGFzcyBmb3IgQ29kZUJs
b2NrLmgvLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMjA4MzA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNyArNDE0LDkgQEAgcHVibGljOgog
ICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVj
b2RlT2Zmc2V0KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9y
Qnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBpbnQgYnl0
ZWNvZGVPZmZzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2Vy
KTsKKyAgICAgICAgaWYgKFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlID0gdmFsdWVQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHZh
bHVlUHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgIHJl
dHVybiBTcGVjTm9uZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mVmFsdWVQ
cm9maWxlcygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA4MzA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0OSw1NiArODQ5
LDU2IEBAIHByaXZhdGU6CiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRP
U1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uOwotICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBudWxs
cHRyOwotCiAgICAgICAgIHsKICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAg
IHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChsb2NrZXIsIGJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFs
dWVzIHRoaXMKLSAgICAgICAgICAgICAgICAvLyBub2RlIGdlbmVyYXRlcywgd2UgY2hlY2sgaWYg
YnkgYW55IGNoYW5jZSBpdCBpcwotICAgICAgICAgICAgICAgIC8vIGEgdGFpbCBjYWxsIG9wY29k
ZS4gSW4gdGhhdCBjYXNlLCB3ZSB3YWxrIHVwIHRoZQotICAgICAgICAgICAgICAgIC8vIGlubGlu
ZSBmcmFtZXMgdG8gZmluZCBhIGNhbGwgaGlnaGVyIGluIHRoZSBjYWxsCi0gICAgICAgICAgICAg
ICAgLy8gY2hhaW4gYW5kIHVzZSBpdHMgcHJlZGljdGlvbi4gSWYgd2Ugb25seSBoYXZlCi0gICAg
ICAgICAgICAgICAgLy8gaW5saW5lZCB0YWlsIGNhbGwgZnJhbWVzLCB3ZSB1c2UgU3BlY0Z1bGxU
b3AKLSAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBhIHNwdXJpb3VzIE9TUiBleGl0LgotICAg
ICAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXg7
Ci0gICAgICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX3ZtLT5pbnRlcnByZXRlci0+
Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKLQotICAgICAgICAgICAgICAgIHN3
aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKLSAg
ICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgotICAgICAgICAgICAgICAg
IGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZWRpY3Rpb24gPSBTcGVjRnVsbFRvcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4qIGNv
ZGVPcmlnaW4gPSBpbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwcmVkaWN0aW9uID0gU3BlY0Z1bGxUb3A7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBJ
bmxpbmVTdGFja0VudHJ5KiBzdGFjayA9IG1faW5saW5lU3RhY2tUb3A7Ci0gICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChzdGFjay0+bV9pbmxpbmVDYWxsRnJhbWUgIT0gY29kZU9yaWdpbi0+aW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay0+bV9j
YWxsZXI7Ci0gICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4OwotICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrID0gc3RhY2st
Pm1fcHJvZmlsZWRCbG9jazsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICBpZiAocHJlZGljdGlvbiAhPSBTcGVjTm9uZSkKKyAgICAgICAgICAg
IHJldHVybiBwcmVkaWN0aW9uOwogCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9CisgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZh
bHVlcyB0aGlzCisgICAgICAgIC8vIG5vZGUgZ2VuZXJhdGVzLCB3ZSBjaGVjayBpZiBieSBhbnkg
Y2hhbmNlIGl0IGlzCisgICAgICAgIC8vIGEgdGFpbCBjYWxsIG9wY29kZS4gSW4gdGhhdCBjYXNl
LCB3ZSB3YWxrIHVwIHRoZQorICAgICAgICAvLyBpbmxpbmUgZnJhbWVzIHRvIGZpbmQgYSBjYWxs
IGhpZ2hlciBpbiB0aGUgY2FsbAorICAgICAgICAvLyBjaGFpbiBhbmQgdXNlIGl0cyBwcmVkaWN0
aW9uLiBJZiB3ZSBvbmx5IGhhdmUKKyAgICAgICAgLy8gaW5saW5lZCB0YWlsIGNhbGwgZnJhbWVz
LCB3ZSB1c2UgU3BlY0Z1bGxUb3AKKyAgICAgICAgLy8gdG8gYXZvaWQgYSBzcHVyaW91cyBPU1Ig
ZXhpdC4KKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bj
b2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKKworICAgICAgICBzd2l0Y2ggKG9wY29kZUlE
KSB7CisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICBjYXNlIG9wX3RhaWxfY2Fs
bF92YXJhcmdzOgorICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czog
eworICAgICAgICAgICAgLy8gVGhpbmdzIHNob3VsZCBiZSBtb3JlIHBlcm1pc3NpdmUgdG8gdXMg
cmV0dXJuaW5nIEJPVFRPTSBpbnN0ZWFkIG9mIFRPUCBoZXJlLgorICAgICAgICAgICAgLy8gQ3Vy
cmVudGx5LCB0aGlzIHdpbGwgY2F1c2UgdXMgdG8gRm9yY2UgT1NSIGV4aXQuIFRoaXMgaXMgYmFk
IGJlY2F1c2UgcmV0dXJuaW5nCisgICAgICAgICAgICAvLyBUT1Agd2lsbCBjYXVzZSBhbnl0aGlu
ZyB0aGF0IHRyYW5zaXRpdmVseSB0b3VjaGVzIHRoaXMgc3BlY3VsYXRlZCB0eXBlIHRvCisgICAg
ICAgICAgICAvLyBhbHNvIGJlY29tZSBUT1AgZHVyaW5nIHByZWRpY3Rpb24gcHJvcGFnYXRpb24u
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY0MzM3CisgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBTcGVjRnVsbFRvcDsKKworICAgICAgICAgICAgQ29kZU9yaWdpbiogY29kZU9y
aWdpbiA9IGlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpOwor
ICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luKQorICAgICAgICAgICAgICAgIHJldHVybiBTcGVj
RnVsbFRvcDsKKworICAgICAgICAgICAgSW5saW5lU3RhY2tFbnRyeSogc3RhY2sgPSBtX2lubGlu
ZVN0YWNrVG9wOworICAgICAgICAgICAgd2hpbGUgKHN0YWNrLT5tX2lubGluZUNhbGxGcmFtZSAh
PSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgc3RhY2sgPSBz
dGFjay0+bV9jYWxsZXI7CiAKLSAgICAgICAgaWYgKHByb2ZpbGVkQmxvY2spIHsKKyAgICAgICAg
ICAgIGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4OworICAgICAgICAg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gc3RhY2stPm1fcHJvZmlsZWRCbG9jazsKICAg
ICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9j
ayk7Ci0gICAgICAgICAgICBwcmVkaWN0aW9uID0gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxl
UHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5
dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KIAotICAgICAg
ICByZXR1cm4gcHJlZGljdGlvbjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBTcGVjTm9uZTsKKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBTcGVjTm9uZTsKICAgICB9CiAKICAgICBTcGVjdWxhdGVk
VHlwZSBnZXRQcmVkaWN0aW9uKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>