<?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>90982</bug_id>
          
          <creation_ts>2012-07-11 08:23:30 -0700</creation_ts>
          <short_desc>LLInt: Add op_get_by_id_proto</short_desc>
          <delta_ts>2012-07-11 12:10:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Andy Wingo">wingo</reporter>
          <assigned_to name="Andy Wingo">wingo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>666769</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-07-11 08:23:30 -0700</bug_when>
    <thetext>The patch to be attached adds support for op_get_by_it_proto to the llint.

Before, the v8 benchmark results:

Richards: 783
DeltaBlue: 713
Crypto: 1397
RayTrace: 2415
EarleyBoyer: 3344
RegExp: 389
Splay: 3936
NavierStokes: 2015
----
Score (version 7): 1449

After:

Richards: 835
DeltaBlue: 778
Crypto: 1597
RayTrace: 2516
EarleyBoyer: 3340
RegExp: 398
Splay: 4311
NavierStokes: 2019
----
Score (version 7): 1531</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666773</commentid>
    <comment_count>1</comment_count>
      <attachid>151713</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-07-11 08:31:36 -0700</bug_when>
    <thetext>Created attachment 151713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666775</commentid>
    <comment_count>2</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-07-11 08:33:55 -0700</bug_when>
    <thetext>I note that those benchmark results are --useJIT=no.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666845</commentid>
    <comment_count>3</comment_count>
      <attachid>151713</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-11 10:21:27 -0700</bug_when>
    <thetext>Comment on attachment 151713
Patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2049
&gt; +                if (!curInstruction[4].u.structure || Heap::isMarked(curInstruction[4].u.structure.get()))
&gt; +                    break;

What if the main structure is marked but the prototype structure isn&apos;t?  I guess this should be:

ASSERT(!!curInstruction[4].u.structure == !!curInstruction[5].u.structure); // The structures should either be both 0 or both non-0.
if (!curInstruction[4].u.structure)
    break;
if (Heap::isMarked(curInstruction[4].u.structure.get()) &amp;&amp; Heap::isMarked(curInstruction[5].u.structure.get()))
    break;

Though, I think it would be even better if the clearing you&apos;re doing below flipped this back to op_get_by_id - that&apos;s the style I&apos;ve been using for put_by_id.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:508
&gt; +_llint_op_get_by_id_proto:
&gt; +    traceExecution()
&gt; +    callSlowPath(_llint_slow_path_get_by_id_proto)
&gt; +    dispatch(9)

So you get a speed-up even though this isn&apos;t inline?  Nifty.  We should inline it at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666846</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-11 10:22:21 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 151713 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151713&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2049
&gt; &gt; +                if (!curInstruction[4].u.structure || Heap::isMarked(curInstruction[4].u.structure.get()))
&gt; &gt; +                    break;
&gt; 
&gt; What if the main structure is marked but the prototype structure isn&apos;t?  I guess this should be:
&gt; 
&gt; ASSERT(!!curInstruction[4].u.structure == !!curInstruction[5].u.structure); // The structures should either be both 0 or both non-0.
&gt; if (!curInstruction[4].u.structure)
&gt;     break;
&gt; if (Heap::isMarked(curInstruction[4].u.structure.get()) &amp;&amp; Heap::isMarked(curInstruction[5].u.structure.get()))
&gt;     break;

To clarify, please fix this before landing - otherwise we could get annoying GC crashies.

&gt; 
&gt; Though, I think it would be even better if the clearing you&apos;re doing below flipped this back to op_get_by_id - that&apos;s the style I&apos;ve been using for put_by_id.
&gt; 
&gt; &gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:508
&gt; &gt; +_llint_op_get_by_id_proto:
&gt; &gt; +    traceExecution()
&gt; &gt; +    callSlowPath(_llint_slow_path_get_by_id_proto)
&gt; &gt; +    dispatch(9)
&gt; 
&gt; So you get a speed-up even though this isn&apos;t inline?  Nifty.  We should inline it at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666884</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-07-11 11:06:34 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 151713 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151713&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2049
&gt; &gt; +                if (!curInstruction[4].u.structure || Heap::isMarked(curInstruction[4].u.structure.get()))
&gt; &gt; +                    break;
&gt; 
&gt; What if the main structure is marked but the prototype structure isn&apos;t?

How is that possible?  Wouldn&apos;t a marked structure imply that its prototype is marked?  Or are these dead marks and not live marks?  Apologies for the naivete here.

&gt; Though, I think it would be even better if the clearing you&apos;re doing below flipped this back to op_get_by_id - that&apos;s the style I&apos;ve been using for put_by_id.

I wonder though, is there any benefit to flipping back to get_by_id just because the op_get_by_id_proto failed?  Consider: you fail your prediction so you go through the slow_path_get_by_id.  If it&apos;s going to predict something else, it will set the opcode and structure/offset fields appropriately.  If not, the cache is not updated.

It seems that the likelihood of a future get_by_id_proto cache hit after a miss is somewhat likely.  I was thinking of just leaving the state as get_by_id_proto, given that it dispatches fairly quickly to get_by_id if things are not right.

&gt; &gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:508
&gt; &gt; +_llint_op_get_by_id_proto:
&gt; &gt; +    traceExecution()
&gt; &gt; +    callSlowPath(_llint_slow_path_get_by_id_proto)
&gt; &gt; +    dispatch(9)
&gt; 
&gt; So you get a speed-up even though this isn&apos;t inline?  Nifty.  We should inline it at some point.

I think the speedup is mostly because we cut the number of dynamic dispatches in half (~20% of the time to ~10% of the time).  I was playing around with inline vs not inline for a couple other opcodes (get_string_length and get_array_length) and didn&apos;t see much difference there.

Incidentally, op_get_by_val is unfortunate in some ways because of the pointer-chasing you have to do just to determine that it is an array (getting at the jsArrayClassInfo through the global data through the code block).  In C++ it is more direct.  Would be nice to improve that if possible.  But that&apos;s another bug I guess!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666923</commentid>
    <comment_count>6</comment_count>
      <attachid>151743</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-07-11 11:51:50 -0700</bug_when>
    <thetext>Created attachment 151743
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666925</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-11 11:52:24 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 151713 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151713&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2049
&gt; &gt; &gt; +                if (!curInstruction[4].u.structure || Heap::isMarked(curInstruction[4].u.structure.get()))
&gt; &gt; &gt; +                    break;
&gt; &gt; 
&gt; &gt; What if the main structure is marked but the prototype structure isn&apos;t?
&gt; 
&gt; How is that possible?  Wouldn&apos;t a marked structure imply that its prototype is marked?  Or are these dead marks and not live marks?  Apologies for the naivete here.

You have two structures: curInstruction[4].u.structure and curInstruction[5].u.structure.  Let&apos;s called them S and T for short.

S points to a prototype P, and that prototype P at some point in time had structure T.  But in the future it may have structure T&apos;.  That&apos;s the whole point of get_by_id_proto caching - to quickly check that P still has structure T and not some other structure T&apos;.

Hence, you&apos;re right that S marks P and P will mark whatever structure it has, but that structure may no longer be T.

So if you don&apos;t mark T yourself, you&apos;ll have a get_by_id_proto cache that is checking if P has a garbage structure.  Then you may find yourself in the following situation:

0) P points to T (starting condition)
1) P changes structure to T&apos;.  T is no longer reachable.
2) GC happens. T is freed.
3) P changed structure to T&apos;&apos;.  T&apos;&apos; is allocated in the memory formerly occupied by T.
4) get_by_id_proto succeeds even though it should have failed

In particular, T&apos;&apos; may no longer have the property that the get_by_id_proto is trying to read.  The T-&gt;T&apos; or T&apos;-&gt;T&apos;&apos; transition may have deleted the property you were trying to read.

&gt; 
&gt; &gt; Though, I think it would be even better if the clearing you&apos;re doing below flipped this back to op_get_by_id - that&apos;s the style I&apos;ve been using for put_by_id.
&gt; 
&gt; I wonder though, is there any benefit to flipping back to get_by_id just because the op_get_by_id_proto failed?  Consider: you fail your prediction so you go through the slow_path_get_by_id.  If it&apos;s going to predict something else, it will set the opcode and structure/offset fields appropriately.  If not, the cache is not updated.

There is no performance benefit.  There&apos;s also no disadvantage, either.  This is a once-per GC event.  It happens rarely.

&gt; 
&gt; It seems that the likelihood of a future get_by_id_proto cache hit after a miss is somewhat likely.  I was thinking of just leaving the state as get_by_id_proto, given that it dispatches fairly quickly to get_by_id if things are not right.

This is a matter of style.  I&apos;m asking you to stick to the style we have (cleared caches reverting to the bare form of the instruction) rather than introducing a new style.

&gt; 
&gt; &gt; &gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:508
&gt; &gt; &gt; +_llint_op_get_by_id_proto:
&gt; &gt; &gt; +    traceExecution()
&gt; &gt; &gt; +    callSlowPath(_llint_slow_path_get_by_id_proto)
&gt; &gt; &gt; +    dispatch(9)
&gt; &gt; 
&gt; &gt; So you get a speed-up even though this isn&apos;t inline?  Nifty.  We should inline it at some point.
&gt; 
&gt; I think the speedup is mostly because we cut the number of dynamic dispatches in half (~20% of the time to ~10% of the time).  I was playing around with inline vs not inline for a couple other opcodes (get_string_length and get_array_length) and didn&apos;t see much difference there.
&gt; 
&gt; Incidentally, op_get_by_val is unfortunate in some ways because of the pointer-chasing you have to do just to determine that it is an array (getting at the jsArrayClassInfo through the global data through the code block).  In C++ it is more direct.  Would be nice to improve that if possible.  But that&apos;s another bug I guess!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666926</commentid>
    <comment_count>8</comment_count>
      <attachid>151743</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-11 11:53:25 -0700</bug_when>
    <thetext>Comment on attachment 151743
Patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2050
&gt; +                ASSERT(Heap::isMarked(curInstruction[5].u.structure.get()));

I believe this assertion is wrong.  See my previous comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666927</commentid>
    <comment_count>9</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-07-11 11:56:15 -0700</bug_when>
    <thetext>
(In reply to comment #8)
&gt; (From update of attachment 151743 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151743&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2050
&gt; &gt; +                ASSERT(Heap::isMarked(curInstruction[5].u.structure.get()));
&gt; 
&gt; I believe this assertion is wrong.  See my previous comment.

Indeed, thanks for the review.  Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666932</commentid>
    <comment_count>10</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-07-11 12:01:35 -0700</bug_when>
    <thetext>One more comment while I bake the patch:

(In reply to comment #7)
&gt; &gt; I wonder though, is there any benefit to flipping back to get_by_id just because the op_get_by_id_proto failed?  Consider: you fail your prediction so you go through the slow_path_get_by_id.  If it&apos;s going to predict something else, it will set the opcode and structure/offset fields appropriately.  If not, the cache is not updated.
&gt; 
&gt; There is no performance benefit.  There&apos;s also no disadvantage, either.  This is a once-per GC event.  It happens rarely.

There are other reasons to miss the inline cache, for example passing in an object with a different prototype.  If property access on that object won&apos;t be cached for whatever reason, there is no need to clear the get_by_id_proto cache.  But I won&apos;t insist on this point, it is a rare thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666937</commentid>
    <comment_count>11</comment_count>
      <attachid>151747</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-07-11 12:07:05 -0700</bug_when>
    <thetext>Created attachment 151747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666940</commentid>
    <comment_count>12</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-07-11 12:10:30 -0700</bug_when>
    <thetext>I need to head out, but I&apos;m getting a couple fast/js failures with this patch:

Regressions: Unexpected text diff mismatch : (2)
  fast/js/dictionary-no-cache.html = TEXT
  fast/js/dictionary-prototype-caching.html = TEXT

Clearing r? so it doesn&apos;t go through accidentally.  Thanks for the review though!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151713</attachid>
            <date>2012-07-11 08:31:36 -0700</date>
            <delta_ts>2012-07-11 11:51:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90982-20120711173135.patch</filename>
            <type>text/plain</type>
            <size>11383</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
YjRlZmU2ZjE0ZmY2Y2E4NjM5Y2MzZjIxNmU1M2EzYzM1NWY1YzA0Li5jZWMwMzU2ZjQ5ODJiNWNl
MjFhNmNkNzAyYjA2ZTQyNDcxNzNiNzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwzNiBAQAogMjAxMi0wNy0xMSAgQW5keSBXaW5nbyAgPHdpbmdvQGlnYWxpYS5jb20+CiAK
KyAgICAgICAgTExJbnQ6IEFkZCBvcF9nZXRfYnlfaWRfcHJvdG8KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTgyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWR1Y2VzIHRoZSBmdWxs
IGdldF9ieV9pZCBmcm9tIGhhcHBlbmluZyAyMCUgb2YgdGhlCisgICAgICAgIHRpbWUgdG8gaGFw
cGVuaW5nIDEwJSBvZiB0aGUgdGltZSwgYW5kIHNwZWVkcyB1cCB0aGUgdjggYmVuY2htYXJrcwor
ICAgICAgICBieSBhYm91dCA1IG9yIDYgcGVyY2VudC4KKworICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOiBBZGQgb3BfZ2V0X2J5X2lkX3Byb3RvLCB3aGljaAorICAgICAg
ICBzaW1wbHkgZGlzcGF0Y2hlcyB0byBhIHNsb3cgcGF0aC4KKworICAgICAgICAqIGxsaW50L0xM
SW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKGxsaW50X3Nsb3dfcGF0aF9nZXRfYnlfaWRfcHJv
dG8pOiBOZXcgc2xvdyBwYXRoIGZvciBsb29rdXAgb24gYQorICAgICAgICBwcm90b3R5cGUuCisg
ICAgICAgICh1bmNhY2hlR2V0QnlJRCk6IE5ldyBoZWxwZXIuCisgICAgICAgIChsbGludF9zbG93
X3BhdGhfZ2V0X2J5X2lkKTogQWRkIG9wX2dldF9ieV9pZF9wcm90byBzdXBwb3J0LgorICAgICAg
ICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmg6IERlY2xhcmUgdGhlIG5ldyBzbG93IHBhdGguCisK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Y2FuQ29tcGlsZU9wY29kZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6IEFkZCBvcF9nZXRfYnlfaWRfcHJvdG8KKyAg
ICAgICAgc3VwcG9ydC4KKworMjAxMi0wNy0xMSAgQW5keSBXaW5nbyAgPHdpbmdvQGlnYWxpYS5j
b20+CisKICAgICAgICAganNjOiBQYXJzZSBvcHRpb25zIGJlZm9yZSBjcmVhdGluZyBnbG9iYWwg
ZGF0YQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5
NzUKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRl
eCA0OGQwZmU3Mjg3OTUzZDEyMGQxNDc4MTAxYTdhMzg4YWUzYWQ3MmUxLi5mZjY1NzUzM2Y2MDU5
ZjVmMjViYjk2YmZkNTRhOWJjN2ViMDY0NzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMjA0NCw2ICsyMDQ0LDE2IEBAIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCiAgICAgICAgIGZvciAoc2l6ZV90IHNpemUg
PSBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKICAgICAgICAgICAgIEluc3RydWN0aW9uKiBjdXJJbnN0cnVjdGlvbiA9ICZpbnN0cnVj
dGlvbnMoKVttX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsKICAgICAgICAgICAgIHN3
aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1ckluc3RydWN0aW9uWzBdLnUub3Bjb2Rl
KSkgeworICAgICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CisgICAgICAgICAgICAg
ICAgaWYgKCFjdXJJbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZSB8fCBIZWFwOjppc01hcmtlZChj
dXJJbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VVbmxpbmtpbmcpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkNsZWFyaW5nIExMSW50IHByb3RvdHlwZSBwcm9wZXJ0eSBh
Y2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBjdXJJbnN0cnVjdGlvbls0XS51LnN0cnVjdHVy
ZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUu
Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5j
bGVhcigpOworICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzZdLnUub3BlcmFuZCA9IDA7
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoK
ICAgICAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgogICAgICAgICAgICAg
Y2FzZSBvcF9wdXRfYnlfaWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDkxYjg4MjM5OTYyZTBlOTNjYWIyMzY4YWJmYzg2MTUyMTgy
N2E4MGYuLjEyN2ZkY2MwNDM3MTM0ZTg4MThlMGQ2OGRiMGY1N2IzZDM2ZGYyZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0yMjE4
LDcgKzIyMTgsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxp
bWl0KQogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X3Njb3BlZF92YXIpOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9p
ZF9vdXRfb2ZfbGluZTogeworICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToK
KyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86IHsKICAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmls
aXRpZXMuaAppbmRleCAyYmM5YjI5NjVmNjkzNDE1NzRmNjVmZTFhODMyOGQzNzkxNGYxMjI1Li45
MmJkMTFhMWQ3NWNkOWU0OTM4M2M0ZWExY2I1NjYzZTgwNGI4NjJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKQEAgLTEyMCw2ICsxMjAsNyBAQCBpbmxp
bmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQsIENv
ZGVCbG9jayosIEluc3RydWN0aQogICAgIGNhc2Ugb3BfcHV0X3Njb3BlZF92YXI6CiAgICAgY2Fz
ZSBvcF9nZXRfYnlfaWQ6CiAgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CiAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CiAgICAgY2Fz
ZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6CiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNp
dGlvbl9kaXJlY3Q6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggMjg1MzU1ZjFiZWQ2
YjJjMjAyYjk0NDQyMjVlZjE4ZWEyNzY0NjFkYS4uMWRkY2ExMjE1MWU3Njk1M2E4YTQxOTUyZjk3
NmJkMWFjYzZmN2E4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMjU2LDYgKzI1
Niw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5F
X09QKG9wX2VxKQogICAgICAgICBERUZJTkVfT1Aob3BfZXFfbnVsbCkKICAgICAgICAgY2FzZSBv
cF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3Rv
OgogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X2lkKQogICAgICAgICBERUZJTkVfT1Aob3Bf
Z2V0X2FyZ3VtZW50c19sZW5ndGgpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfYnlfdmFsKQpA
QCAtMzYxLDcgKzM2Miw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgICAgICBjYXNlIG9wX2dldF9ieV9p
ZF9jaGFpbjoKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKLSAgICAgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfcHJvdG86CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6CiAg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFpbjoKICAgICAgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAKaW5kZXggZmJjMDE0NmI4MDg4MjA5NzcwNTEwMjQ3MzU1YzBhNmFh
MzlkNDZiOC4uYjJkMGRiNjdkZDEwMjE0NmRmZjU4YjljY2RjMTEwNjdjZWI1ZjIwZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC04ODUs
MjMgKzg4NSwzOSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkKQog
CiAgICAgaWYgKGJhc2VWYWx1ZS5pc0NlbGwoKQogICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxl
KCkKLSAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZQogICAgICAgICAmJiBz
bG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09IFByb3BlcnR5U2xvdDo6VmFsdWUpIHsKICAgICAg
ICAgCiAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CiAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkKLSAg
ICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNo
aW5nKCkpIHsKLSAgICAgICAgICAgIHBjWzRdLnUuc3RydWN0dXJlLnNldCgKLSAgICAgICAgICAg
ICAgICBnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUp
OwotICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7
Ci0gICAgICAgICAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZs
bGludF9vcF9nZXRfYnlfaWQpOwotICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9m
ZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSArIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KCZsbGludF9vcF9nZXRfYnlfaWRfb3V0X29mX2xpbmUpOwotICAgICAgICAgICAgICAgIHBjWzVd
LnUub3BlcmFuZCA9IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNl
VmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmcoKSkgeworICAgICAgICAgICAgICAgIHBjWzRdLnUuc3RydWN0dXJl
LnNldCgKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGNbMF0udS5v
cGNvZGUgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZsbGludF9vcF9nZXRfYnlfaWQpOworICAgICAg
ICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgcGNbMF0udS5vcGNvZGUgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZsbGludF9vcF9nZXRf
YnlfaWRfb3V0X29mX2xpbmUpOworICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQg
PSBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2Yo
SlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChl
eGVjKSkgeworICAgICAgICAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09iamVjdCgpKTsK
KyAgICAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3Qoc2xvdC5zbG90QmFz
ZSgpKTsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zm
c2V0KCk7CisgICAgICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhY2Nlc3NpbmcgYSBwcm90b3R5cGUg
aW4gYSBsb29wLCBpdCdzIGEgZ29vZCBiZXQgdGhhdCBpdAorICAgICAgICAgICAgLy8gc2hvdWxk
IG5vdCBiZSB0cmVhdGVkIGFzIGEgZGljdGlvbmFyeS4KKyAgICAgICAgICAgIGlmIChiYXNlT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgICAgICBiYXNl
T2JqZWN0LT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAg
ICAgICBvZmZzZXQgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERhdGEsIGlk
ZW50KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCghYmFzZU9iamVjdC0+c3Ry
dWN0dXJlKCktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOworICAgICAgICAgICAgcGNbMF0u
dS5vcGNvZGUgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZsbGludF9vcF9nZXRfYnlfaWRfcHJvdG8p
OworICAgICAgICAgICAgcGNbNF0udS5zdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBwY1s1XS51LnN0
cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgYmFz
ZU9iamVjdC0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgcGNbNl0gPSBvZmZzZXQ7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTkxMSw2ICs5MjcsNDIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2dldF9ieV9pZCkKICAgICBMTElOVF9FTkQoKTsKIH0KIAorc3RhdGljIFNsb3dQ
YXRoUmV0dXJuVHlwZSB1bmNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9u
KiBwYykKK3sKKyAgICBwY1swXS51Lm9wY29kZSA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oJmxsaW50
X29wX2dldF9ieV9pZCk7CisgICAgcGNbNF0gPSAwOworICAgIHJldHVybiBsbGludF9zbG93X3Bh
dGhfZ2V0X2J5X2lkKGV4ZWMsIHBjKTsKK30KKworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2dldF9ieV9pZF9wcm90bykKK3sKKyAgICBMTElOVF9CRUdJTigpOworICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gTExJTlRfT1BfQygyKS5qc1ZhbHVlKCk7CisKKyAgICBpZiAoVU5MSUtFTFko
IWJhc2VWYWx1ZS5pc0NlbGwoKSkpCisgICAgICAgIHJldHVybiB1bmNhY2hlR2V0QnlJRChleGVj
LCBwYyk7CisKKyAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gcGNbNF0udS5zdHJ1Y3R1cmUuZ2V0KCk7CisKKyAgICBp
ZiAoVU5MSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVyZSgpICE9IHN0cnVjdHVyZSkpCisgICAgICAg
IHJldHVybiB1bmNhY2hlR2V0QnlJRChleGVjLCBwYyk7CisKKyAgICBBU1NFUlQoc3RydWN0dXJl
LT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIHBy
b3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykp
OworICAgIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlID0gcGNbNV0udS5zdHJ1Y3R1cmUu
Z2V0KCk7CisKKyAgICBpZiAoVU5MSUtFTFkocHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpICE9IHBy
b3RvdHlwZVN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiB1bmNhY2hlR2V0QnlJRChleGVjLCBw
Yyk7CisKKyAgICBpbnQgb2Zmc2V0ID0gcGNbNl0udS5vcGVyYW5kOworCisgICAgQVNTRVJUKHBy
b3RvT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbM10u
dS5vcGVyYW5kKSkgPT0gcHJvdG9PYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKKyAg
ICBBU1NFUlQoYmFzZVZhbHVlLmdldChleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmll
cihwY1szXS51Lm9wZXJhbmQpKSA9PSBwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNl
dCkpOworCisgICAgTExJTlRfUkVUVVJOX1BST0ZJTEVEKG9wX2dldF9ieV9pZF9wcm90bywgSlNW
YWx1ZShwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpKTsKK30KKwogTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9hcmd1bWVudHNfbGVuZ3RoKQogewogICAgIExM
SU5UX0JFR0lOKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5oCmluZGV4IDJlMDY5ZDA3MzVkZDk3MWM0NDVhOGMwZTA0MzA1YWMwZTFhODVkMTQuLjFiZGNh
MDc5ZGQ3ZGE4MGMyZGE0MzE4MGQ4YzZiOGE0NTRiMmEwMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCkBAIC0xNDksNiArMTQ5LDcgQEAgTExJTlRf
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3dpdGhfYmFzZSk7CiBMTElO
VF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfd2l0aF90aGlzKTsKIExM
SU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHV0X2dsb2JhbF92YXJfY2hlY2sp
OwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQpOworTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWRfcHJvdG8pOwogTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYXJndW1lbnRzX2xlbmd0aCk7
CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZCk7CiBMTElO
VF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2RlbF9ieV9pZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXgg
NDkyNTM1YmIyOGJlYTViZGUxYTVjNGU4YjQ0NWY5NTVhMzZjZWEzMy4uZWVjNTFjOTM5MjkyZjJk
YzhjNzhkOWIwZmM5YmFmYmFlMzBlMzNjZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtNTAyLDYgKzUwMiwxMiBAQCBt
YWNybyB3aXRoT3V0T2ZMaW5lU3RvcmFnZShvYmplY3QsIHByb3BlcnR5U3RvcmFnZSwgY29udGlu
dWF0aW9uKQogZW5kCiAKIAorX2xsaW50X29wX2dldF9ieV9pZF9wcm90bzoKKyAgICB0cmFjZUV4
ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0X2J5X2lkX3By
b3RvKQorICAgIGRpc3BhdGNoKDkpCisKKwogX2xsaW50X29wX2RlbF9ieV9pZDoKICAgICB0cmFj
ZUV4ZWN1dGlvbigpCiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZGVsX2J5X2lk
KQpAQCAtODE3LDkgKzgyMyw2IEBAIF9sbGludF9vcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgog
X2xsaW50X29wX2dldF9ieV9pZF9nZXR0ZXJfc2VsZjoKICAgICBub3RTdXBwb3J0ZWQoKQogCi1f
bGxpbnRfb3BfZ2V0X2J5X2lkX3Byb3RvOgotICAgIG5vdFN1cHBvcnRlZCgpCi0KIF9sbGludF9v
cF9nZXRfYnlfaWRfc2VsZjoKICAgICBub3RTdXBwb3J0ZWQoKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151743</attachid>
            <date>2012-07-11 11:51:50 -0700</date>
            <delta_ts>2012-07-11 12:06:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90982-20120711205148.patch</filename>
            <type>text/plain</type>
            <size>13592</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
YjRlZmU2ZjE0ZmY2Y2E4NjM5Y2MzZjIxNmU1M2EzYzM1NWY1YzA0Li41ZWM0ODg5NjdlNjNjYjc3
NTA0ODEyYjAwYWUwYWUxMTRhZWE4NTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw0MCBAQAogMjAxMi0wNy0xMSAgQW5keSBXaW5nbyAgPHdpbmdvQGlnYWxpYS5jb20+CiAK
KyAgICAgICAgTExJbnQ6IEFkZCBvcF9nZXRfYnlfaWRfcHJvdG8KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTgyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWR1Y2VzIHRoZSBmdWxs
IGdldF9ieV9pZCBmcm9tIGhhcHBlbmluZyAyMCUgb2YgdGhlCisgICAgICAgIHRpbWUgdG8gaGFw
cGVuaW5nIDEwJSBvZiB0aGUgdGltZSwgYW5kIHNwZWVkcyB1cCB0aGUgdjggYmVuY2htYXJrcwor
ICAgICAgICBieSBhYm91dCA1IG9yIDYgcGVyY2VudC4KKworICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOiBBZGQgb3BfZ2V0X2J5X2lkX3Byb3RvLCB3aGljaAorICAgICAg
ICBzaW1wbHkgZGlzcGF0Y2hlcyB0byBhIHNsb3cgcGF0aC4KKworICAgICAgICAqIGxsaW50L0xM
SW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKGxsaW50X3Nsb3dfcGF0aF9nZXRfYnlfaWRfcHJv
dG8pOiBOZXcgc2xvdyBwYXRoIGZvciBsb29rdXAgb24gYQorICAgICAgICBwcm90b3R5cGUuCisg
ICAgICAgIChsbGludF9zbG93X3BhdGhfZ2V0X2J5X2lkKTogQWRkIG9wX2dldF9ieV9pZF9wcm90
byBzdXBwb3J0LgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmg6IERlY2xhcmUgdGhl
IG5ldyBzbG93IHBhdGguCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZU9wY29kZSk6CisgICAgICAgICogaml0L0pJVC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tZXRob2RfY2hl
Y2spOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MpOiBBZGQgb3BfZ2V0X2J5X2lkX3Byb3RvCisgICAgICAgIHN1cHBvcnQu
CisKKzIwMTItMDctMTEgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgorCiAgICAgICAg
IGpzYzogUGFyc2Ugb3B0aW9ucyBiZWZvcmUgY3JlYXRpbmcgZ2xvYmFsIGRhdGEKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTc1CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggNDhkMGZlNzI4Nzk1
M2QxMjBkMTQ3ODEwMWE3YTM4OGFlM2FkNzJlMS4uZTliYjdjNDk1NGIxNThhZjBmNTgwYTU0MmU3
MTQ0NWUxZmNjYmU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKQEAgLTIwNDQsNiArMjA0NCwxNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoKQogICAgICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAg
ICAgICBJbnN0cnVjdGlvbiogY3VySW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClbbV9wcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXV07CiAgICAgICAgICAgICBzd2l0Y2ggKGludGVycHJl
dGVyLT5nZXRPcGNvZGVJRChjdXJJbnN0cnVjdGlvblswXS51Lm9wY29kZSkpIHsKKyAgICAgICAg
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgorICAgICAgICAgICAgICAgIGlmICghY3VySW5z
dHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUgfHwgSGVhcDo6aXNNYXJrZWQoY3VySW5zdHJ1Y3Rpb25b
NF0udS5zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY3VySW5zdHJ1Y3Rpb25bNV0udS5zdHJ1
Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgTExJbnQgcHJvdG90eXBlIHByb3Bl
cnR5IGFjY2VzcyB3aXRoIHN0cnVjdHVyZSAlcC5cbiIsIGN1ckluc3RydWN0aW9uWzRdLnUuc3Ry
dWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls0XS51LnN0cnVj
dHVyZS5jbGVhcigpOworICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzVdLnUuc3RydWN0
dXJlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5k
ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkOgogICAgICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CiAgICAgICAg
ICAgICBjYXNlIG9wX3B1dF9ieV9pZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggOTFiODgyMzk5NjJlMGU5M2NhYjIzNjhhYmZjODYx
NTIxODI3YTgwZi4uNDFmNTk4MzI5NjYxZjViMjNjOWU0MDMyOGU3N2IwMDFjYzFjYmY4NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAg
LTIxNjQsNyArMjE2NCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQgbGltaXQpCiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJl
ZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQoaW50ZXJwcmV0ZXIt
PmdldE9wY29kZUlEKGdldEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfZ2V0X2J5X2lkCi0g
ICAgICAgICAgICAgICAgICAgfHwgaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGdldEluc3RydWN0
aW9uLT51Lm9wY29kZSkgPT0gb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lKTsKKyAgICAgICAgICAg
ICAgICAgICB8fCBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoZ2V0SW5zdHJ1Y3Rpb24tPnUub3Bj
b2RlKSA9PSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmUKKyAgICAgICAgICAgICAgICAgICB8fCBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoZ2V0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9n
ZXRfYnlfaWRfcHJvdG8pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlSW5kZXggYmFz
ZSA9IGdldChnZXRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2dldElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZF07CkBAIC0yMjE4LDcgKzIyMTksOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcHV0X3Njb3BlZF92YXIpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZTogeworICAgICAg
ICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlf
aWRfcHJvdG86IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQ
cmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9k
ZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAppbmRleCAyYmM5YjI5NjVm
NjkzNDE1NzRmNjVmZTFhODMyOGQzNzkxNGYxMjI1Li45MmJkMTFhMWQ3NWNkOWU0OTM4M2M0ZWEx
Y2I1NjYzZTgwNGI4NjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmgKQEAgLTEyMCw2ICsxMjAsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNv
bXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayosIEluc3RydWN0aQogICAg
IGNhc2Ugb3BfcHV0X3Njb3BlZF92YXI6CiAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CiAgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86
CiAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xp
bmU6CiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKaW5kZXggMjg1MzU1ZjFiZWQ2YjJjMjAyYjk0NDQyMjVlZjE4ZWEyNzY0
NjFkYS4uODE5MTVhNGQ1ODIzYTg5ODRmNDQyODc3OTExM2Y2MTIzZWI4Yzk3MiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcApAQCAtMjU2LDYgKzI1Niw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2VxKQogICAgICAgICBERUZJ
TkVfT1Aob3BfZXFfbnVsbCkKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6
CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgogICAgICAgICBERUZJTkVfT1Aob3Bf
Z2V0X2J5X2lkKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgpCiAg
ICAgICAgIERFRklORV9PUChvcF9nZXRfYnlfdmFsKQpAQCAtMzYxLDcgKzM2Miw2IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlf
bGVuZ3RoOgogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9jaGFpbjoKICAgICAgICAgY2FzZSBv
cF9nZXRfYnlfaWRfZ2VuZXJpYzoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CiAg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X2dldHRlcl9jaGFpbjoKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgpA
QCAtNDQ2LDYgKzQ0Niw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kaXYpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9lcSkKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAg
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfZ2V0X2J5X2lkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2FyZ3VtZW50
c19sZW5ndGgpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfdmFsKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCA0
NjZjZmY3ZGJmZjhmMjM3MDJmMTEzZGEzZmQ5YmJmMTk5NzY0MWFjLi5jMjUzMjIxNzgzYWI3ZDgx
YzA3ZjUzYTk1MWM0MThhY2NiNzlmNWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtMzAyLDcgKzMwMiw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX21ldGhvZF9jaGVjayhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIC8vIEFzc2VydCB0aGF0IHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gaXMgYSBnZXRfYnlf
aWQuCiAgICAgQVNTRVJUKG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKChjdXJyZW50SW5zdHJ1
Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX21ldGhvZF9jaGVjaykpLT51Lm9wY29kZSkgPT0gb3Bf
Z2V0X2J5X2lkCi0gICAgICAgIHx8IG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKChjdXJyZW50
SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX21ldGhvZF9jaGVjaykpLT51Lm9wY29kZSkg
PT0gb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lKTsKKyAgICAgICAgICAgfHwgbV9pbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQoKGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfbWV0
aG9kX2NoZWNrKSktPnUub3Bjb2RlKSA9PSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmUKKyAgICAg
ICAgICAgfHwgbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoKGN1cnJlbnRJbnN0cnVjdGlvbiAr
IE9QQ09ERV9MRU5HVEgob3BfbWV0aG9kX2NoZWNrKSktPnUub3Bjb2RlKSA9PSBvcF9nZXRfYnlf
aWRfcHJvdG8pOwogCiAgICAgY3VycmVudEluc3RydWN0aW9uICs9IE9QQ09ERV9MRU5HVEgob3Bf
bWV0aG9kX2NoZWNrKTsKICAgICB1bnNpZ25lZCByZXN1bHRWUmVnID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCmluZGV4IGZiYzAxNDZiODA4ODIwOTc3MDUxMDI0NzM1NWMwYTZhYTM5ZDQ2
YjguLjJmYWQ1YThiZGNkNGRhMGI3ZWE4M2Q2M2ZlZDM2NjhlM2IxYTJlNDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtODg1LDIzICs4
ODUsMzkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZCkKIAogICAg
IGlmIChiYXNlVmFsdWUuaXNDZWxsKCkKICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZSgpCi0g
ICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKICAgICAgICAgJiYgc2xvdC5j
YWNoZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKSB7CiAgICAgICAgIAog
ICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgCi0g
ICAgICAgIGlmICghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpCi0gICAgICAg
ICAgICAmJiAhc3RydWN0dXJlLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygp
KSB7Ci0gICAgICAgICAgICBwY1s0XS51LnN0cnVjdHVyZS5zZXQoCi0gICAgICAgICAgICAgICAg
Z2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKLSAg
ICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewotICAg
ICAgICAgICAgICAgIHBjWzBdLnUub3Bjb2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRf
b3BfZ2V0X2J5X2lkKTsKLSAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJ
bklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHBjWzBdLnUub3Bjb2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPigmbGxp
bnRfb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lKTsKLSAgICAgICAgICAgICAgICBwY1s1XS51Lm9w
ZXJhbmQgPSBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSk7CisgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVl
KSB7CisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnko
KQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBwY1s0XS51LnN0cnVjdHVyZS5zZXQo
CisgICAgICAgICAgICAgICAgICAgIGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHBjWzBdLnUub3Bjb2Rl
ID0gYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRfb3BfZ2V0X2J5X2lkKTsKKyAgICAgICAgICAg
ICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHBjWzBdLnUub3Bjb2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRfb3BfZ2V0X2J5X2lk
X291dF9vZl9saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zm
c2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChzbG90LnNsb3RCYXNlKCkgPT0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhlYykp
IHsKKyAgICAgICAgICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCkuaXNPYmplY3QoKSk7CisgICAg
ICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSk7
CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgp
OworICAgICAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEg
bG9vcCwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQKKyAgICAgICAgICAgIC8vIHNob3VsZCBub3Qg
YmUgdHJlYXRlZCBhcyBhIGRpY3Rpb25hcnkuCisgICAgICAgICAgICBpZiAoYmFzZU9iamVjdC0+
c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgICAgICAgICAgYmFzZU9iamVj
dC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICAgICAg
b2Zmc2V0ID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmdldChnbG9iYWxEYXRhLCBpZGVudCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIWJhc2VPYmplY3QtPnN0cnVjdHVy
ZSgpLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICAgICAgICAgIHBjWzBdLnUub3Bj
b2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRfb3BfZ2V0X2J5X2lkX3Byb3RvKTsKKyAg
ICAgICAgICAgIHBjWzRdLnUuc3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1
cmUuc2V0KGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGJhc2VPYmpl
Y3QtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHBjWzZdID0gb2Zmc2V0OwogICAgICAgICB9
CiAgICAgfQogCkBAIC05MTEsNiArOTI3LDM1IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9nZXRfYnlfaWQpCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKK0xMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9nZXRfYnlfaWRfcHJvdG8pCit7CisgICAgTExJTlRfQkVHSU4oKTsKKyAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoMikuanNWYWx1ZSgpOworCisgICAgaWYg
KFVOTElLRUxZKCFiYXNlVmFsdWUuaXNDZWxsKCkpKQorICAgICAgICByZXR1cm4gbGxpbnRfc2xv
d19wYXRoX2dldF9ieV9pZChleGVjLCBwYyk7CisKKyAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFz
ZVZhbHVlLmFzQ2VsbCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gcGNbNF0udS5zdHJ1
Y3R1cmUuZ2V0KCk7CisKKyAgICBpZiAoVU5MSUtFTFkoYmFzZUNlbGwtPnN0cnVjdHVyZSgpICE9
IHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBsbGludF9zbG93X3BhdGhfZ2V0X2J5X2lkKGV4
ZWMsIHBjKTsKKworICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVj
KS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1
Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7CisgICAgU3RydWN0dXJlKiBwcm90b3R5
cGVTdHJ1Y3R1cmUgPSBwY1s1XS51LnN0cnVjdHVyZS5nZXQoKTsKKworICAgIGlmIChVTkxJS0VM
WShwcm90b09iamVjdC0+c3RydWN0dXJlKCkgIT0gcHJvdG90eXBlU3RydWN0dXJlKSkKKyAgICAg
ICAgcmV0dXJuIGxsaW50X3Nsb3dfcGF0aF9nZXRfYnlfaWQoZXhlYywgcGMpOworCisgICAgaW50
IG9mZnNldCA9IHBjWzZdLnUub3BlcmFuZDsKKworICAgIEFTU0VSVChwcm90b09iamVjdC0+Z2V0
KGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCkpID09
IHByb3RvT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSk7CisgICAgQVNTRVJUKGJhc2VW
YWx1ZS5nZXQoZXhlYywgZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbM10udS5vcGVy
YW5kKSkgPT0gcHJvdG9PYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKTsKKworICAgIExM
SU5UX1JFVFVSTl9QUk9GSUxFRChvcF9nZXRfYnlfaWRfcHJvdG8sIEpTVmFsdWUocHJvdG9PYmpl
Y3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpKSk7Cit9CisKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9nZXRfYXJndW1lbnRzX2xlbmd0aCkKIHsKICAgICBMTElOVF9CRUdJTigpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRleCAyZTA2
OWQwNzM1ZGQ5NzFjNDQ1YThjMGUwNDMwNWFjMGUxYTg1ZDE0Li4xYmRjYTA3OWRkN2RhODBjMmRh
NDMxODBkOGM2YjhhNDU0YjJhMDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuaApAQCAtMTQ5LDYgKzE0OSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfcmVzb2x2ZV93aXRoX2Jhc2UpOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3dpdGhfdGhpcyk7CiBMTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF9nbG9iYWxfdmFyX2NoZWNrKTsKIExMSU5UX1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkKTsKK0xMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkX3Byb3RvKTsKIExMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfZ2V0X2FyZ3VtZW50c19sZW5ndGgpOwogTExJTlRfU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQpOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9kZWxfYnlfaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IDQ5MjUzNWJiMjhiZWE1
YmRlMWE1YzRlOGI0NDVmOTU1YTM2Y2VhMzMuLmVlYzUxYzkzOTI5MmYyZGM4Yzc4ZDliMGZjOWJh
ZmJhZTMwZTMzY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTUwMiw2ICs1MDIsMTIgQEAgbWFjcm8gd2l0aE91dE9m
TGluZVN0b3JhZ2Uob2JqZWN0LCBwcm9wZXJ0eVN0b3JhZ2UsIGNvbnRpbnVhdGlvbikKIGVuZAog
CiAKK19sbGludF9vcF9nZXRfYnlfaWRfcHJvdG86CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAg
IGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2dldF9ieV9pZF9wcm90bykKKyAgICBkaXNw
YXRjaCg5KQorCisKIF9sbGludF9vcF9kZWxfYnlfaWQ6CiAgICAgdHJhY2VFeGVjdXRpb24oKQog
ICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2RlbF9ieV9pZCkKQEAgLTgxNyw5ICs4
MjMsNiBAQCBfbGxpbnRfb3BfZ2V0X2J5X2lkX2dldHRlcl9wcm90bzoKIF9sbGludF9vcF9nZXRf
YnlfaWRfZ2V0dGVyX3NlbGY6CiAgICAgbm90U3VwcG9ydGVkKCkKIAotX2xsaW50X29wX2dldF9i
eV9pZF9wcm90bzoKLSAgICBub3RTdXBwb3J0ZWQoKQotCiBfbGxpbnRfb3BfZ2V0X2J5X2lkX3Nl
bGY6CiAgICAgbm90U3VwcG9ydGVkKCkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151747</attachid>
            <date>2012-07-11 12:07:05 -0700</date>
            <delta_ts>2012-07-11 12:10:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90982-20120711210703.patch</filename>
            <type>text/plain</type>
            <size>14014</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
YjRlZmU2ZjE0ZmY2Y2E4NjM5Y2MzZjIxNmU1M2EzYzM1NWY1YzA0Li41ZWM0ODg5NjdlNjNjYjc3
NTA0ODEyYjAwYWUwYWUxMTRhZWE4NTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw0MCBAQAogMjAxMi0wNy0xMSAgQW5keSBXaW5nbyAgPHdpbmdvQGlnYWxpYS5jb20+CiAK
KyAgICAgICAgTExJbnQ6IEFkZCBvcF9nZXRfYnlfaWRfcHJvdG8KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTgyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWR1Y2VzIHRoZSBmdWxs
IGdldF9ieV9pZCBmcm9tIGhhcHBlbmluZyAyMCUgb2YgdGhlCisgICAgICAgIHRpbWUgdG8gaGFw
cGVuaW5nIDEwJSBvZiB0aGUgdGltZSwgYW5kIHNwZWVkcyB1cCB0aGUgdjggYmVuY2htYXJrcwor
ICAgICAgICBieSBhYm91dCA1IG9yIDYgcGVyY2VudC4KKworICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOiBBZGQgb3BfZ2V0X2J5X2lkX3Byb3RvLCB3aGljaAorICAgICAg
ICBzaW1wbHkgZGlzcGF0Y2hlcyB0byBhIHNsb3cgcGF0aC4KKworICAgICAgICAqIGxsaW50L0xM
SW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKGxsaW50X3Nsb3dfcGF0aF9nZXRfYnlfaWRfcHJv
dG8pOiBOZXcgc2xvdyBwYXRoIGZvciBsb29rdXAgb24gYQorICAgICAgICBwcm90b3R5cGUuCisg
ICAgICAgIChsbGludF9zbG93X3BhdGhfZ2V0X2J5X2lkKTogQWRkIG9wX2dldF9ieV9pZF9wcm90
byBzdXBwb3J0LgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmg6IERlY2xhcmUgdGhl
IG5ldyBzbG93IHBhdGguCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZU9wY29kZSk6CisgICAgICAgICogaml0L0pJVC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tZXRob2RfY2hl
Y2spOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MpOiBBZGQgb3BfZ2V0X2J5X2lkX3Byb3RvCisgICAgICAgIHN1cHBvcnQu
CisKKzIwMTItMDctMTEgIEFuZHkgV2luZ28gIDx3aW5nb0BpZ2FsaWEuY29tPgorCiAgICAgICAg
IGpzYzogUGFyc2Ugb3B0aW9ucyBiZWZvcmUgY3JlYXRpbmcgZ2xvYmFsIGRhdGEKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTc1CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggNDhkMGZlNzI4Nzk1
M2QxMjBkMTQ3ODEwMWE3YTM4OGFlM2FkNzJlMS4uYjc1MDExZTJlMDBlYWZkNDVlMjZhZDM3OTIz
MmUwNzRhNzAwODI2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKQEAgLTIwNDQsNiArMjA0NCwxOCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoKQogICAgICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9ucy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAg
ICAgICBJbnN0cnVjdGlvbiogY3VySW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zKClbbV9wcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tpXV07CiAgICAgICAgICAgICBzd2l0Y2ggKGludGVycHJl
dGVyLT5nZXRPcGNvZGVJRChjdXJJbnN0cnVjdGlvblswXS51Lm9wY29kZSkpIHsKKyAgICAgICAg
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgorICAgICAgICAgICAgICAgIEFTU0VSVCghIWN1
ckluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlID09ICEhY3VySW5zdHJ1Y3Rpb25bNV0udS5zdHJ1
Y3R1cmUpOyAvLyBUaGUgc3RydWN0dXJlcyBzaG91bGQgZWl0aGVyIGJlIGJvdGggMCBvciBib3Ro
IG5vbi0wLgorICAgICAgICAgICAgICAgIGlmICghY3VySW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1
cmUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChIZWFw
Ojppc01hcmtlZChjdXJJbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZS5nZXQoKSkgJiYgSGVhcDo6
aXNNYXJrZWQoY3VySW5zdHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZVVubGlua2luZykK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgTExJbnQgcHJvdG90eXBlIHBy
b3BlcnR5IGFjY2VzcyB3aXRoIHN0cnVjdHVyZSAlcC5cbiIsIGN1ckluc3RydWN0aW9uWzRdLnUu
c3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvbls0XS51LnN0
cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzVdLnUuc3Ry
dWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bNl0udS5vcGVy
YW5kID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkOgogICAgICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CiAgICAg
ICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggOTFiODgyMzk5NjJlMGU5M2NhYjIzNjhhYmZj
ODYxNTIxODI3YTgwZi4uNDFmNTk4MzI5NjYxZjViMjNjOWU0MDMyOGU3N2IwMDFjYzFjYmY4NCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
QEAgLTIxNjQsNyArMjE2NCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQgbGltaXQpCiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0
UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQoaW50ZXJwcmV0
ZXItPmdldE9wY29kZUlEKGdldEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfZ2V0X2J5X2lk
Ci0gICAgICAgICAgICAgICAgICAgfHwgaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGdldEluc3Ry
dWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lKTsKKyAgICAgICAg
ICAgICAgICAgICB8fCBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoZ2V0SW5zdHJ1Y3Rpb24tPnUu
b3Bjb2RlKSA9PSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmUKKyAgICAgICAgICAgICAgICAgICB8
fCBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoZ2V0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBv
cF9nZXRfYnlfaWRfcHJvdG8pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlSW5kZXgg
YmFzZSA9IGdldChnZXRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgdW5z
aWduZWQgaWRlbnRpZmllciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2dl
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZF07CkBAIC0yMjE4LDcgKzIyMTksOCBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfcHV0X3Njb3BlZF92YXIpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bf
Z2V0X2J5X2lkOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZTogeworICAg
ICAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICAgICAgY2FzZSBvcF9nZXRf
YnlfaWRfcHJvdG86IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBn
ZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Tm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAppbmRleCAyYmM5YjI5
NjVmNjkzNDE1NzRmNjVmZTFhODMyOGQzNzkxNGYxMjI1Li45MmJkMTFhMWQ3NWNkOWU0OTM4M2M0
ZWExY2I1NjYzZTgwNGI4NjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2Fw
YWJpbGl0aWVzLmgKQEAgLTEyMCw2ICsxMjAsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayosIEluc3RydWN0aQog
ICAgIGNhc2Ugb3BfcHV0X3Njb3BlZF92YXI6CiAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CiAgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJv
dG86CiAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29m
X2xpbmU6CiAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKaW5kZXggMjg1MzU1ZjFiZWQ2YjJjMjAyYjk0NDQyMjVlZjE4ZWEy
NzY0NjFkYS4uODE5MTVhNGQ1ODIzYTg5ODRmNDQyODc3OTExM2Y2MTIzZWI4Yzk3MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMjU2LDYgKzI1Niw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2VxKQogICAgICAgICBE
RUZJTkVfT1Aob3BfZXFfbnVsbCkKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xp
bmU6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgogICAgICAgICBERUZJTkVfT1Ao
b3BfZ2V0X2J5X2lkKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgp
CiAgICAgICAgIERFRklORV9PUChvcF9nZXRfYnlfdmFsKQpAQCAtMzYxLDcgKzM2Miw2IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgY2FzZSBvcF9nZXRfYXJy
YXlfbGVuZ3RoOgogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9jaGFpbjoKICAgICAgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86
CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkX2dldHRlcl9jaGFpbjoKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3Rv
OgpAQCAtNDQ2LDYgKzQ0Niw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kaXYpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9lcSkKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfZ2V0X2J5X2lkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2FyZ3Vt
ZW50c19sZW5ndGgpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfdmFsKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRl
eCA0NjZjZmY3ZGJmZjhmMjM3MDJmMTEzZGEzZmQ5YmJmMTk5NzY0MWFjLi5jMjUzMjIxNzgzYWI3
ZDgxYzA3ZjUzYTk1MWM0MThhY2NiNzlmNWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtMzAyLDcgKzMwMiw4IEBAIHZvaWQgSklU
OjplbWl0X29wX21ldGhvZF9jaGVjayhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIC8vIEFzc2VydCB0aGF0IHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gaXMgYSBnZXRf
YnlfaWQuCiAgICAgQVNTRVJUKG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKChjdXJyZW50SW5z
dHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX21ldGhvZF9jaGVjaykpLT51Lm9wY29kZSkgPT0g
b3BfZ2V0X2J5X2lkCi0gICAgICAgIHx8IG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKChjdXJy
ZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX21ldGhvZF9jaGVjaykpLT51Lm9wY29k
ZSkgPT0gb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lKTsKKyAgICAgICAgICAgfHwgbV9pbnRlcnBy
ZXRlci0+Z2V0T3Bjb2RlSUQoKGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3Bf
bWV0aG9kX2NoZWNrKSktPnUub3Bjb2RlKSA9PSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmUKKyAg
ICAgICAgICAgfHwgbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoKGN1cnJlbnRJbnN0cnVjdGlv
biArIE9QQ09ERV9MRU5HVEgob3BfbWV0aG9kX2NoZWNrKSktPnUub3Bjb2RlKSA9PSBvcF9nZXRf
YnlfaWRfcHJvdG8pOwogCiAgICAgY3VycmVudEluc3RydWN0aW9uICs9IE9QQ09ERV9MRU5HVEgo
b3BfbWV0aG9kX2NoZWNrKTsKICAgICB1bnNpZ25lZCByZXN1bHRWUmVnID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCmluZGV4IGZiYzAxNDZiODA4ODIwOTc3MDUxMDI0NzM1NWMwYTZhYTM5
ZDQ2YjguLmRlNTc0MzVjNzNlODVlNDk1YTBlZmM5YWYwODMzNjcwMzk5Y2RiM2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtODg1LDIz
ICs4ODUsMzkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZCkKIAog
ICAgIGlmIChiYXNlVmFsdWUuaXNDZWxsKCkKICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZSgp
Ci0gICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKICAgICAgICAgJiYgc2xv
dC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKSB7CiAgICAgICAg
IAogICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAg
Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpCi0gICAg
ICAgICAgICAmJiAhc3RydWN0dXJlLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZygpKSB7Ci0gICAgICAgICAgICBwY1s0XS51LnN0cnVjdHVyZS5zZXQoCi0gICAgICAgICAgICAg
ICAgZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsK
LSAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewot
ICAgICAgICAgICAgICAgIHBjWzBdLnUub3Bjb2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPigmbGxp
bnRfb3BfZ2V0X2J5X2lkKTsKLSAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZz
ZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkg
KyBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHBjWzBdLnUub3Bjb2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPigm
bGxpbnRfb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lKTsKLSAgICAgICAgICAgICAgICBwY1s1XS51
Lm9wZXJhbmQgPSBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKSB7CisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25h
cnkoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBwY1s0XS51LnN0cnVjdHVyZS5z
ZXQoCisgICAgICAgICAgICAgICAgICAgIGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHBjWzBdLnUub3Bj
b2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRfb3BfZ2V0X2J5X2lkKTsKKyAgICAgICAg
ICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHBjWzBdLnUub3Bjb2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRfb3BfZ2V0X2J5
X2lkX291dF9vZl9saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0g
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChzbG90LnNsb3RCYXNlKCkgPT0gc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoZXhl
YykpIHsKKyAgICAgICAgICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCkuaXNPYmplY3QoKSk7Cisg
ICAgICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KHNsb3Quc2xvdEJhc2Uo
KSk7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNl
dCgpOworICAgICAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIGlu
IGEgbG9vcCwgaXQncyBhIGdvb2QgYmV0IHRoYXQgaXQKKyAgICAgICAgICAgIC8vIHNob3VsZCBu
b3QgYmUgdHJlYXRlZCBhcyBhIGRpY3Rpb25hcnkuCisgICAgICAgICAgICBpZiAoYmFzZU9iamVj
dC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgICAgICAgICAgYmFzZU9i
amVjdC0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCktPmdldChnbG9iYWxEYXRhLCBpZGVu
dCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIWJhc2VPYmplY3QtPnN0cnVj
dHVyZSgpLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICAgICAgICAgIHBjWzBdLnUu
b3Bjb2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRfb3BfZ2V0X2J5X2lkX3Byb3RvKTsK
KyAgICAgICAgICAgIHBjWzRdLnUuc3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgcGNbNV0udS5zdHJ1
Y3R1cmUuc2V0KGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGJhc2VP
YmplY3QtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHBjWzZdID0gb2Zmc2V0OwogICAgICAg
ICB9CiAgICAgfQogCkBAIC05MTEsNiArOTI3LDQzIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9nZXRfYnlfaWQpCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKK3N0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgdW5jYWNoZUdldEJ5SURQcm90byhFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0
aW9uKiBwYykKK3sKKyAgICBwY1swXS51Lm9wY29kZSA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oJmxs
aW50X29wX2dldF9ieV9pZCk7CisgICAgcGNbNF0udS5zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICBw
Y1s1XS51LnN0cnVjdHVyZS5jbGVhcigpOworICAgIHJldHVybiBsbGludF9zbG93X3BhdGhfZ2V0
X2J5X2lkKGV4ZWMsIHBjKTsKK30KKworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dl
dF9ieV9pZF9wcm90bykKK3sKKyAgICBMTElOVF9CRUdJTigpOworICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gTExJTlRfT1BfQygyKS5qc1ZhbHVlKCk7CisKKyAgICBpZiAoVU5MSUtFTFkoIWJhc2VW
YWx1ZS5pc0NlbGwoKSkpCisgICAgICAgIHJldHVybiB1bmNhY2hlR2V0QnlJRFByb3RvKGV4ZWMs
IHBjKTsKKworICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBwY1s0XS51LnN0cnVjdHVyZS5nZXQoKTsKKworICAgIGlm
IChVTkxJS0VMWShiYXNlQ2VsbC0+c3RydWN0dXJlKCkgIT0gc3RydWN0dXJlKSkKKyAgICAgICAg
cmV0dXJuIHVuY2FjaGVHZXRCeUlEUHJvdG8oZXhlYywgcGMpOworCisgICAgQVNTRVJUKHN0cnVj
dHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4ZWMpLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0
KiBwcm90b09iamVjdCA9IGFzT2JqZWN0KHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGV4
ZWMpKTsKKyAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IHBjWzVdLnUuc3RydWN0
dXJlLmdldCgpOworCisgICAgaWYgKFVOTElLRUxZKHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSAh
PSBwcm90b3R5cGVTdHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4gdW5jYWNoZUdldEJ5SURQcm90
byhleGVjLCBwYyk7CisKKyAgICBpbnQgb2Zmc2V0ID0gcGNbNl0udS5vcGVyYW5kOworCisgICAg
QVNTRVJUKHByb3RvT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZp
ZXIocGNbM10udS5vcGVyYW5kKSkgPT0gcHJvdG9PYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZz
ZXQpKTsKKyAgICBBU1NFUlQoYmFzZVZhbHVlLmdldChleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+
aWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpKSA9PSBwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zm
c2V0KG9mZnNldCkpOworCisgICAgTExJTlRfUkVUVVJOX1BST0ZJTEVEKG9wX2dldF9ieV9pZF9w
cm90bywgSlNWYWx1ZShwcm90b09iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpKTsKK30K
KwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9hcmd1bWVudHNfbGVuZ3RoKQog
ewogICAgIExMSU5UX0JFR0lOKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5oCmluZGV4IDJlMDY5ZDA3MzVkZDk3MWM0NDVhOGMwZTA0MzA1YWMwZTFhODVk
MTQuLjFiZGNhMDc5ZGQ3ZGE4MGMyZGE0MzE4MGQ4YzZiOGE0NTRiMmEwMTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCkBAIC0xNDksNiArMTQ5LDcg
QEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3dpdGhfYmFz
ZSk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfd2l0aF90
aGlzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHV0X2dsb2JhbF92
YXJfY2hlY2spOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYnlf
aWQpOworTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWRfcHJv
dG8pOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYXJndW1lbnRz
X2xlbmd0aCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9p
ZCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2RlbF9ieV9pZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KaW5kZXggNDkyNTM1YmIyOGJlYTViZGUxYTVjNGU4YjQ0NWY5NTVhMzZjZWEzMy4uZWVjNTFj
OTM5MjkyZjJkYzhjNzhkOWIwZmM5YmFmYmFlMzBlMzNjZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtNTAyLDYgKzUw
MiwxMiBAQCBtYWNybyB3aXRoT3V0T2ZMaW5lU3RvcmFnZShvYmplY3QsIHByb3BlcnR5U3RvcmFn
ZSwgY29udGludWF0aW9uKQogZW5kCiAKIAorX2xsaW50X29wX2dldF9ieV9pZF9wcm90bzoKKyAg
ICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0
X2J5X2lkX3Byb3RvKQorICAgIGRpc3BhdGNoKDkpCisKKwogX2xsaW50X29wX2RlbF9ieV9pZDoK
ICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhf
ZGVsX2J5X2lkKQpAQCAtODE3LDkgKzgyMyw2IEBAIF9sbGludF9vcF9nZXRfYnlfaWRfZ2V0dGVy
X3Byb3RvOgogX2xsaW50X29wX2dldF9ieV9pZF9nZXR0ZXJfc2VsZjoKICAgICBub3RTdXBwb3J0
ZWQoKQogCi1fbGxpbnRfb3BfZ2V0X2J5X2lkX3Byb3RvOgotICAgIG5vdFN1cHBvcnRlZCgpCi0K
IF9sbGludF9vcF9nZXRfYnlfaWRfc2VsZjoKICAgICBub3RTdXBwb3J0ZWQoKQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>