<?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>97352</bug_id>
          
          <creation_ts>2012-09-21 11:48:19 -0700</creation_ts>
          <short_desc>Simplify and optimize ChildListMutationScope</short_desc>
          <delta_ts>2012-09-21 17:30:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>97372</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Adam Klein">adamk</assigned_to>
          <cc>esprehn</cc>
    
    <cc>ojan</cc>
    
    <cc>rafaelw</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>725671</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 11:48:19 -0700</bug_when>
    <thetext>Simplify and optimize ChildListMutationScope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725683</commentid>
    <comment_count>1</comment_count>
      <attachid>165167</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 12:02:45 -0700</bug_when>
    <thetext>Created attachment 165167
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725688</commentid>
    <comment_count>2</comment_count>
      <attachid>165169</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 12:06:26 -0700</bug_when>
    <thetext>Created attachment 165169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725712</commentid>
    <comment_count>3</comment_count>
      <attachid>165169</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-09-21 12:39:19 -0700</bug_when>
    <thetext>Comment on attachment 165169
Patch

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

This looks right.

&gt; Source/WebCore/dom/ChildListMutationScope.cpp:70
&gt; +    if (!m_observers)
&gt; +        return;

I would move this check to ChildListMutationScope so that it can be inlined into ContainerNode member functions if I were you.

&gt; Source/WebCore/dom/ChildListMutationScope.cpp:115
&gt;              m_target, StaticNodeList::adopt(m_addedNodes), StaticNodeList::adopt(m_removedNodes), m_previousSibling.release(), m_nextSibling.release()));

Nit: Wrong indentation (I know this is an existing code but...)

&gt; Source/WebCore/dom/ChildListMutationScope.cpp:149
&gt; +    delete this;

I&apos;m not a big fun of manually calling delete like this.

&gt; Source/WebCore/dom/ChildListMutationScope.h:96
&gt; +        typedef HashMap&lt;Node*, MutationAccumulator*&gt; AccumulatorMap;

Can we use HashMap&lt;Node*, OwnPtr&lt;MutationAccumulator&gt; &gt; instead so as to avoid manual new/delete?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725806</commentid>
    <comment_count>4</comment_count>
      <attachid>165169</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 14:07:10 -0700</bug_when>
    <thetext>Comment on attachment 165169
Patch

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

Note that in my next patch I&apos;ve pulled out MutationAccumulator so it&apos;s no longer an inner class. This is mostly just to make the number of colons-per-line less ridiculous in the .cpp file. I don&apos;t think there&apos;s much danger of someone trying to use this class, but I left a comment at the top saying not to anyway.

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:70
&gt;&gt; +        return;
&gt; 
&gt; I would move this check to ChildListMutationScope so that it can be inlined into ContainerNode member functions if I were you.

Yeah, I guess that could be worth it. I had it that way initially but moved it to simplify the .h file, but I guess there&apos;s not much advantage to doing it that way. Fixed (and replaced with an ASSERT).

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:115
&gt;&gt;              m_target, StaticNodeList::adopt(m_addedNodes), StaticNodeList::adopt(m_removedNodes), m_previousSibling.release(), m_nextSibling.release()));
&gt; 
&gt; Nit: Wrong indentation (I know this is an existing code but...)

Split into 4 statements for clarity.

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:149
&gt;&gt; +    delete this;
&gt; 
&gt; I&apos;m not a big fun of manually calling delete like this.

I did this so I could keep the destructor private. Otherwise I&apos;d want to comment the destructor to require that it not be called. Let me know which you prefer.

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.h:96
&gt;&gt; +        typedef HashMap&lt;Node*, MutationAccumulator*&gt; AccumulatorMap;
&gt; 
&gt; Can we use HashMap&lt;Node*, OwnPtr&lt;MutationAccumulator&gt; &gt; instead so as to avoid manual new/delete?

Was using that before, but wanted to make the destructor private. See above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725807</commentid>
    <comment_count>5</comment_count>
      <attachid>165188</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 14:09:02 -0700</bug_when>
    <thetext>Created attachment 165188
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725809</commentid>
    <comment_count>6</comment_count>
      <attachid>165189</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 14:10:10 -0700</bug_when>
    <thetext>Created attachment 165189
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725894</commentid>
    <comment_count>7</comment_count>
      <attachid>165213</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 15:40:15 -0700</bug_when>
    <thetext>Created attachment 165213
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725917</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-09-21 16:01:18 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:149
&gt; &gt;&gt; +    delete this;
&gt; &gt; 
&gt; &gt; I&apos;m not a big fun of manually calling delete like this.
&gt; 
&gt; I did this so I could keep the destructor private. Otherwise I&apos;d want to comment the destructor to require that it not be called. Let me know which you prefer.

What&apos;s the advantage of making the destructor private?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725931</commentid>
    <comment_count>9</comment_count>
      <attachid>165220</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 16:12:10 -0700</bug_when>
    <thetext>Created attachment 165220
Alternate approach: RefCount MutationAccumulator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725934</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 16:13:27 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #4)
&gt; &gt; &gt;&gt; Source/WebCore/dom/ChildListMutationScope.cpp:149
&gt; &gt; &gt;&gt; +    delete this;
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m not a big fun of manually calling delete like this.
&gt; &gt; 
&gt; &gt; I did this so I could keep the destructor private. Otherwise I&apos;d want to comment the destructor to require that it not be called. Let me know which you prefer.
&gt; 
&gt; What&apos;s the advantage of making the destructor private?

Just trying to avoid mis-use. Take a look at the latest patch, where I ditch m_scopingLevel entirely since it&apos;s effectively a refcount, and use RefPtrs in the scopes to handle all this automatically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725938</commentid>
    <comment_count>11</comment_count>
      <attachid>165213</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-09-21 16:16:21 -0700</bug_when>
    <thetext>Comment on attachment 165213
Patch

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

&gt; Source/WebCore/dom/ChildListMutationScope.h:53
&gt; +class MutationAccumulator {

I would have named this ChildListMutationAccumulator now that it&apos;s not an inner class.

&gt; Source/WebCore/dom/ChildListMutationScope.h:103
&gt; +        if (m_accumulator &amp;&amp; m_accumulator-&gt;hasObservers())

Maybe we need some clarification as to when m_accumulator-&gt;hasObservers() &amp;&amp; !m_accumulator-&gt;hasObservers() is true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725940</commentid>
    <comment_count>12</comment_count>
      <attachid>165220</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-09-21 16:17:39 -0700</bug_when>
    <thetext>Comment on attachment 165220
Alternate approach: RefCount MutationAccumulator

OMG, this code looks sooo much prettier!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725957</commentid>
    <comment_count>13</comment_count>
      <attachid>165213</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 16:31:17 -0700</bug_when>
    <thetext>Comment on attachment 165213
Patch

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

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.h:53
&gt;&gt; +class MutationAccumulator {
&gt; 
&gt; I would have named this ChildListMutationAccumulator now that it&apos;s not an inner class.

Well, half the reason I moved it out was to shorten the name, so I&apos;m not sure it&apos;s worth it. Will leave as-is until it conflicts with something else. It&apos;s still &quot;private API&quot; from the point of view of ChildListMutationScope, so it&apos;s only a worry as far as the one-definition rule goes.

&gt;&gt; Source/WebCore/dom/ChildListMutationScope.h:103
&gt;&gt; +        if (m_accumulator &amp;&amp; m_accumulator-&gt;hasObservers())
&gt; 
&gt; Maybe we need some clarification as to when m_accumulator-&gt;hasObservers() &amp;&amp; !m_accumulator-&gt;hasObservers() is true.

Not sure what you mean. Is hasObservers() not a clear enough name? Or are you wondering if there&apos;s further simplification I can do here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725958</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-09-21 16:34:24 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 165213 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165213&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/dom/ChildListMutationScope.h:53
&gt; &gt;&gt; +class MutationAccumulator {
&gt; &gt; 
&gt; &gt; I would have named this ChildListMutationAccumulator now that it&apos;s not an inner class.
&gt; 
&gt; Well, half the reason I moved it out was to shorten the name, so I&apos;m not sure it&apos;s worth it. Will leave as-is until it conflicts with something else. It&apos;s still &quot;private API&quot; from the point of view of ChildListMutationScope, so it&apos;s only a worry as far as the one-definition rule goes.

Autocompletion on IDEs will suffer... :(

&gt; &gt;&gt; Source/WebCore/dom/ChildListMutationScope.h:103
&gt; &gt;&gt; +        if (m_accumulator &amp;&amp; m_accumulator-&gt;hasObservers())
&gt; &gt; 
&gt; &gt; Maybe we need some clarification as to when m_accumulator-&gt;hasObservers() &amp;&amp; !m_accumulator-&gt;hasObservers() is true.
&gt; 
&gt; Not sure what you mean. Is hasObservers() not a clear enough name? Or are you wondering if there&apos;s further simplification I can do here?

What&apos;s not clear is why we would not have observers here given that we had already checked that we had interested observers when we created m_accumulator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725965</commentid>
    <comment_count>15</comment_count>
      <attachid>165213</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 16:39:06 -0700</bug_when>
    <thetext>Comment on attachment 165213
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/dom/ChildListMutationScope.h:53
&gt;&gt;&gt;&gt; +class MutationAccumulator {
&gt;&gt;&gt; 
&gt;&gt;&gt; I would have named this ChildListMutationAccumulator now that it&apos;s not an inner class.
&gt;&gt; 
&gt;&gt; Well, half the reason I moved it out was to shorten the name, so I&apos;m not sure it&apos;s worth it. Will leave as-is until it conflicts with something else. It&apos;s still &quot;private API&quot; from the point of view of ChildListMutationScope, so it&apos;s only a worry as far as the one-definition rule goes.
&gt; 
&gt; Autocompletion on IDEs will suffer... :(

Hmm, ok. I&apos;ll do some followups to move stuff around/rename, but I&apos;d like to be done with this patch for now before I accidentally break it.

&gt;&gt;&gt;&gt; Source/WebCore/dom/ChildListMutationScope.h:103
&gt;&gt;&gt;&gt; +        if (m_accumulator &amp;&amp; m_accumulator-&gt;hasObservers())
&gt;&gt;&gt; 
&gt;&gt;&gt; Maybe we need some clarification as to when m_accumulator-&gt;hasObservers() &amp;&amp; !m_accumulator-&gt;hasObservers() is true.
&gt;&gt; 
&gt;&gt; Not sure what you mean. Is hasObservers() not a clear enough name? Or are you wondering if there&apos;s further simplification I can do here?
&gt; 
&gt; What&apos;s not clear is why we would not have observers here given that we had already checked that we had interested observers when we created m_accumulator.

So the document-level flag only tells you if there are observers _somewhere_ in the document. hasObservers() tells you whether there are actually observers in this particular subtree. That&apos;s why we create the accumulator even if there aren&apos;t any observers in the subtree: it allows us to cache the tree-walking.  Not sure how naming would help here: the fact that hasMutationObserversOfType() is on Document, and that it isn&apos;t given a context node, should be a hint that it&apos;s not getting the complete story.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725973</commentid>
    <comment_count>16</comment_count>
      <attachid>165226</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 16:49:19 -0700</bug_when>
    <thetext>Created attachment 165226
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725975</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-09-21 16:49:43 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 165213 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165213&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/dom/ChildListMutationScope.h:53
&gt; &gt;&gt;&gt;&gt; +class MutationAccumulator {
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; I would have named this ChildListMutationAccumulator now that it&apos;s not an inner class.
&gt; &gt;&gt; 
&gt; &gt;&gt; Well, half the reason I moved it out was to shorten the name, so I&apos;m not sure it&apos;s worth it. Will leave as-is until it conflicts with something else. It&apos;s still &quot;private API&quot; from the point of view of ChildListMutationScope, so it&apos;s only a worry as far as the one-definition rule goes.
&gt; &gt; 
&gt; &gt; Autocompletion on IDEs will suffer... :(
&gt; 
&gt; Hmm, ok. I&apos;ll do some followups to move stuff around/rename, but I&apos;d like to be done with this patch for now before I accidentally break it.

Did this rename for now, since I had to fix up the ChangeLog anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725999</commentid>
    <comment_count>18</comment_count>
      <attachid>165226</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-21 17:30:27 -0700</bug_when>
    <thetext>Comment on attachment 165226
Patch for landing

Clearing flags on attachment: 165226

Committed r129280: &lt;http://trac.webkit.org/changeset/129280&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726000</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-21 17:30:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165167</attachid>
            <date>2012-09-21 12:02:45 -0700</date>
            <delta_ts>2012-09-21 12:06:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97352-20120921120209.patch</filename>
            <type>text/plain</type>
            <size>17088</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjlmYjczNTExMmRhYWUx
ZjQ0MmQ0MmMzMzllZjFkMjUwYThhNDk4ZC4uZTg1M2EzYmUwMDBlN2EzN2RkNzFmZmJjY2ZkMDYx
ZjMyOTgzYzU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTA5LTIxICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IGFuZCBvcHRp
bWl6ZSBDaGlsZExpc3RNdXRhdGlvblNjb3BlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NzM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgaXMgb25lIG9mIHRoZSBt
b3N0IGNvbXBsaWNhdGVkIGJpdHMgb2YKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlciBpbXBsZW1l
bnRhdGlvbi4gVGhpcyBwYXRjaCBhaW1zIHRvIHNpbXBsaWZ5IGl0IGZvcgorICAgICAgICBjbGFy
aXR5IGFuZCBpbXByb3ZlIGl0cyBwZXJmb3JtYW5jZSAobW9zdGx5IGJ5IGp1c3QgZG9pbmcgbGVz
cykuCisKKyAgICAgICAgVGhlIGJpZyBjaGFuZ2UgaXMgdG8gcmVtb3ZlIHRoZSBNdXRhdGlvbkFj
Y3VtdWxhdG9yUm91dGVyIGNsYXNzLAorICAgICAgICByZXBsYWNpbmcgaXQgd2l0aCBzdGF0aWMg
bGlmZXRpbWUtbWFuYWdlbWVudCBsb2dpYyBpbgorICAgICAgICBNdXRhdGlvbkFjY3VtdWxhdG9y
ICh3aG9zZSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBhcmUgbm93IGJvdGgKKyAgICAgICAg
cHJpdmF0ZSkuIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgaXMgZXhwZWN0ZWQgdG8gY2FsbCBnZXRP
ckNyZWF0ZSgpIGluCisgICAgICAgIGl0cyBjb25zdHJ1Y3RvciBhbmQgZXhpdFNjb3BlKCkgaW4g
aXRzIGRlc3RydWN0b3IsIGFuZCB0aGUKKyAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRvciBoYW5k
bGVzIHRoZSBzY29waW5nLWxldmVsIGNvdW50aW5nIGFuZCByZWNvcmQKKyAgICAgICAgZW5xdWV1
ZWluZyBpbnRlcm5hbGx5LgorCisgICAgICAgIFRoaXMgZ3JlYXRseSByZWR1Y2VzIHRoZSBudW1i
ZXIgb2YgbGluZXMgb2YgY29kZSwgYW5kIGNvbmRlbnNlcworICAgICAgICB0d28gSGFzaE1hcHMg
aW50byBvbmUuIEl0IGFsc28gcmVkdWNlcyBoYXNoIGxvb2t1cHMsIHdoaWNoIG5vdworICAgICAg
ICBvY2N1ciBvbmx5IG9uIHNjb3BlIGNyZWF0aW9uIGFuZCB3aGVuIHRoZSBzY29waW5nIGxldmVs
IGZvciBhIGdpdmVuCisgICAgICAgIGFjY3VtdWxhdG9yIHJlYWNoZXMgMCAocHJldmlvdXNseSwg
ZWFjaCBjaGlsZEFkZGVkIGFuZCB3aWxsUmVtb3ZlQ2hpbGQKKyAgICAgICAgY2FsbCBjb3VsZCBy
ZXN1bHQgaW4gdHdvIGhhc2ggbG9va3VwcyBlYWNoKS4KKworICAgICAgICBUaGVyZSBhcmUgc29t
ZSBtaW5vciBjaGFuZ2VzIGFzIHdlbGw6IHRoZSBNdXRhdGlvbkFjY3VtdWxhdG9yOjpjbGVhcigp
CisgICAgICAgIG1ldGhvZCBpcyBnb25lLCBhcyBpdCB3YXMgZG9pbmcgbW9yZSB3b3JrIHRoYW4g
bmVjZXNzYXJ5OworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMIGlzIG5vdyB1c2VkIGluc3Rl
YWQgb2YgaGFuZC1yb2xsZWQgc3RhdGljLW1hbmFnZW1lbnQKKyAgICAgICAgY29kZTsgTXV0YXRp
b25BY2N1bXVsYXRvcjo6bV9sYXN0QWRkZWQgaXMgbm8gbG9uZ2VyIGEgUmVmUHRyLCBzaW5jZSBp
dAorICAgICAgICBhbHdheXMgcG9pbnRzIGF0IGEgTm9kZSB0aGF0J3MgYWxyZWFkeSBiZWluZyBy
ZWYnZCBieSB0aGUgYWNjdW11bGF0b3IuCisgICAgICAgIEFsc28gdmFyaW91cyBtaW5vciBzeW50
YWN0aWMgY2xlYW51cHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVo
YXZpb3IuCisKKyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9y
OjpNdXRhdGlvbkFjY3VtdWxhdG9yKToKKyAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGNhbGwg
dG8gY2xlYXIoKSAod2hpY2ggaXRzZWxmIGhhcyBiZWVuIHJlbW92ZWQpLgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRB
ZGRlZCk6CisgICAgICAgIENoYW5nZSBQYXNzUmVmUHRyIHRvIHJhdyBwb2ludGVyIG5vdyB0aGF0
IHdlIGJhaWwgb3V0IGlmIHRoZXJlIGFyZSBubyBvYnNlcnZlcnMuCisgICAgICAgIChXZWJDb3Jl
OjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjppc1JlbW92ZWRO
b2RlSW5PcmRlcik6CisgICAgICAgIFNpbXBsaWZ5IFJlZlB0ciBzeW50YXguCisgICAgICAgIChX
ZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjp3aWxs
UmVtb3ZlQ2hpbGQpOgorICAgICAgICBDaGFuZ2UgUGFzc1JlZlB0ciB0byByYXcgcG9pbnRlciBu
b3cgdGhhdCB3ZSBiYWlsIG91dCBpZiB0aGVyZSBhcmUgbm8gb2JzZXJ2ZXJzLgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6ZW5x
dWV1ZU11dGF0aW9uUmVjb3JkKToKKyAgICAgICAgUmVwbGFjZSBjYWxsIHRvIGNsZWFyKCkgd2l0
aCBjbGVhcmluZyBtX2xhc3RBZGRlZCwgc2luY2UgaXQncyB0aGUgb25seQorICAgICAgICBiaXQg
bm90IGNsZWFyZWQgYnkgdGhlIE11dGF0aW9uUmVjb3JkIGNyZWF0aW9uIGNhbGwuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpp
c0VtcHR5KToKKyAgICAgICAgQWRkZWQgbW9yZSBhc3NlcnRpb25zIGFib3V0IGVtcHRpbmVzcy4K
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11
bGF0b3I6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgUmVwbGFjZXMgaGFsZiBvZiBNdXRhdGlvbkFj
Y3VtdWxhdG9yUm91dGVyJ3Mgam9iLgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRp
b25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6ZXhpdFNjb3BlKToKKyAgICAgICAgUmVwbGFj
ZXMgdGhlIG90aGVyIGhhbGYgb2YgdGhlIHJvdXRlcidzIGpvYiwgYW5kIGhhbmRsZXMgdGhlIGxp
ZmV0aW1lCisgICAgICAgIG9mIE11dGF0aW9uQWNjdW11bGF0b3JzLgorICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6YWNjdW11bGF0
b3JNYXApOgorICAgICAgICBSZWR1Y2VkIHR3byBtYXBzIHRvIG9uZSwgYW5kIG1hbmFnZSBpdCBp
bnNpZGUgTXV0YXRpb25BY2N1bXVsYXRvciBpdHNlbGYuCisgICAgICAgICogZG9tL0NoaWxkTGlz
dE11dGF0aW9uU2NvcGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZSk6IFN0b3JlIG1f
YWNjdW11bGF0b3IgcmF0aGVyIHRoYW4gbV90YXJnZXQuCisgICAgICAgIChXZWJDb3JlOjpDaGls
ZExpc3RNdXRhdGlvblNjb3BlOjp+Q2hpbGRMaXN0TXV0YXRpb25TY29wZSk6IGRpdHRvCisgICAg
ICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpjaGlsZEFkZGVkKTogZGl0dG8K
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6OndpbGxSZW1vdmVDaGls
ZCk6IGRpdHRvCisgICAgICAgIChDaGlsZExpc3RNdXRhdGlvblNjb3BlKToKKyAgICAgICAgKE11
dGF0aW9uQWNjdW11bGF0b3IpOiBNb3ZlZCBjbGFzcyBkZWNsYXJhdGlvbiBpbnRvIGhlYWRlciBm
aWxlLCBzaW5jZQorICAgICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlJ3MgaW5saW5lIG1ldGhv
ZHMgbmVlZCB0byBjYWxsIHRoZXNlIG1ldGhvZHMuCisgICAgICAgICogaHRtbC9IVE1MRWxlbWVu
dC5jcHA6IFJlbW92ZSB1bnVzZWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICNpbmNsdWRlLgor
CiAyMDEyLTA5LTE5ICBSb2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNr
QmVycnldIFJlbW92ZSBjdXN0b20gcGFpbnRpbmcgY29kZSBmb3Igc2VhcmNoQ2FuY2VsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKaW5kZXggZjRhMmRh
MDRhYjYxNTgxM2Y4NjRhZTEzNTZmNGVhYTRkYjBiZmU0OS4uN2E5YjMzOWU2NzFlZDQwZjQyZjcz
ODkyMWVjN2QzNzU0MmM3ODc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxk
TGlzdE11dGF0aW9uU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RN
dXRhdGlvblNjb3BlLmNwcApAQCAtNDIsNDQgKzQyLDE2IEBACiAjaW5jbHVkZSAiU3RhdGljTm9k
ZUxpc3QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotLy8gTXV0YXRpb25BY2N1bXVsYXRvciBleHBlY3RzIHRoYXQgYWxsIHJlbW92YWxzIGZyb20g
YSBwYXJlbnQgdGFrZSBwbGFjZSBpbiBvcmRlcgotLy8gYW5kIHByZWNlZGUgYW55IGFkZGl0aW9u
cy4gSWYgdGhpcyBpcyB2aW9sYXRlZCAoaS5lLiBiZWNhdXNlIG9mIGNvZGUgY2hhbmdlcyBlbHNl
d2hlcmUKLS8vIGluIFdlYkNvcmUpIGl0IHdpbGwgbGlrZWx5IHJlc3VsdCBpbiBib3RoIChhKSBB
U1NFUlRpb25zIGZhaWxpbmcsIGFuZCAoYikgbXV0YXRpb24gcmVjb3JkcwotLy8gYmVpbmcgZW5x
dWV1ZWQgZm9yIGRlbGl2ZXJ5IGJlZm9yZSB0aGUgb3V0ZXItbW9zdCBzY29wZSBjbG9zZXMuCi1j
bGFzcyBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShNdXRhdGlvbkFjY3VtdWxhdG9yKTsKLXB1YmxpYzoKLSAgICBN
dXRhdGlvbkFjY3VtdWxhdG9yKFBhc3NSZWZQdHI8Tm9kZT4sIFBhc3NPd25QdHI8TXV0YXRpb25P
YnNlcnZlckludGVyZXN0R3JvdXA+IG9ic2VydmVycyk7Ci0gICAgfk11dGF0aW9uQWNjdW11bGF0
b3IoKTsKLQotICAgIHZvaWQgY2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+KTsKLSAgICB2b2lk
IHdpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+KTsKLSAgICB2b2lkIGVucXVldWVNdXRh
dGlvblJlY29yZCgpOwotCi1wcml2YXRlOgotICAgIHZvaWQgY2xlYXIoKTsKLSAgICBib29sIGlz
RW1wdHkoKTsKLSAgICBib29sIGlzQWRkZWROb2RlSW5PcmRlcihOb2RlKik7Ci0gICAgYm9vbCBp
c1JlbW92ZWROb2RlSW5PcmRlcihOb2RlKik7Ci0gICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0Owot
Ci0gICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG1fcmVtb3ZlZE5vZGVzOwotICAgIFZlY3RvcjxS
ZWZQdHI8Tm9kZT4gPiBtX2FkZGVkTm9kZXM7Ci0gICAgUmVmUHRyPE5vZGU+IG1fcHJldmlvdXNT
aWJsaW5nOwotICAgIFJlZlB0cjxOb2RlPiBtX25leHRTaWJsaW5nOwotICAgIFJlZlB0cjxOb2Rl
PiBtX2xhc3RBZGRlZDsKLQotICAgIE93blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91
cD4gbV9vYnNlcnZlcnM7Ci19OwotCiBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFj
Y3VtdWxhdG9yOjpNdXRhdGlvbkFjY3VtdWxhdG9yKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBQ
YXNzT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiBvYnNlcnZlcnMpCiAgICAg
OiBtX3RhcmdldCh0YXJnZXQpCisgICAgLCBtX3Njb3BpbmdMZXZlbCgxKQorICAgICwgbV9sYXN0
QWRkZWQoMCkKICAgICAsIG1fb2JzZXJ2ZXJzKG9ic2VydmVycykKIHsKLSAgICBjbGVhcigpOwog
fQogCiBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjp+TXV0YXRp
b25BY2N1bXVsYXRvcigpCkBAIC05MiwxMiArNjQsMTMgQEAgaW5saW5lIGJvb2wgQ2hpbGRMaXN0
TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6aXNBZGRlZE5vZGVJbk9yZGVyKE5v
ZGUKICAgICByZXR1cm4gaXNFbXB0eSgpIHx8IChtX2xhc3RBZGRlZCA9PSBjaGlsZC0+cHJldmlv
dXNTaWJsaW5nKCkgJiYgbV9uZXh0U2libGluZyA9PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSk7CiB9
CiAKLXZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hp
bGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxkKQordm9pZCBDaGlsZExpc3RNdXRhdGlv
blNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKE5vZGUqIGNoaWxkKQogewot
ICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9IHBycENoaWxkOworICAgIGlmICghbV9vYnNlcnZlcnMp
CisgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChpc0FkZGVkTm9kZUluT3JkZXIoY2hpbGQu
Z2V0KCkpKTsKLSAgICBpZiAoIWlzQWRkZWROb2RlSW5PcmRlcihjaGlsZC5nZXQoKSkpCisgICAg
QVNTRVJUKGlzQWRkZWROb2RlSW5PcmRlcihjaGlsZCkpOworICAgIGlmICghaXNBZGRlZE5vZGVJ
bk9yZGVyKGNoaWxkKSkKICAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CiAKICAgICBp
ZiAoaXNFbXB0eSgpKSB7CkBAIC0xMTEsMTYgKzg0LDE2IEBAIHZvaWQgQ2hpbGRMaXN0TXV0YXRp
b25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+
IHByCiAKIGlubGluZSBib29sIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11
bGF0b3I6OmlzUmVtb3ZlZE5vZGVJbk9yZGVyKE5vZGUqIGNoaWxkKQogewotICAgIHJldHVybiBp
c0VtcHR5KCkgfHwgbV9uZXh0U2libGluZy5nZXQoKSA9PSBjaGlsZDsKKyAgICByZXR1cm4gaXNF
bXB0eSgpIHx8IG1fbmV4dFNpYmxpbmcgPT0gY2hpbGQ7CiB9CiAKLXZvaWQgQ2hpbGRMaXN0TXV0
YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQ
dHI8Tm9kZT4gcHJwQ2hpbGQpCit2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9u
QWNjdW11bGF0b3I6OndpbGxSZW1vdmVDaGlsZChOb2RlKiBjaGlsZCkKIHsKLSAgICBSZWZQdHI8
Tm9kZT4gY2hpbGQgPSBwcnBDaGlsZDsKLQotICAgIEFTU0VSVChtX2FkZGVkTm9kZXMuaXNFbXB0
eSgpICYmIGlzUmVtb3ZlZE5vZGVJbk9yZGVyKGNoaWxkLmdldCgpKSk7CisgICAgaWYgKCFtX29i
c2VydmVycykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0
eSgpIHx8ICFpc1JlbW92ZWROb2RlSW5PcmRlcihjaGlsZC5nZXQoKSkpCisgICAgQVNTRVJUKG1f
YWRkZWROb2Rlcy5pc0VtcHR5KCkgJiYgaXNSZW1vdmVkTm9kZUluT3JkZXIoY2hpbGQpKTsKKyAg
ICBpZiAoIW1fYWRkZWROb2Rlcy5pc0VtcHR5KCkgfHwgIWlzUmVtb3ZlZE5vZGVJbk9yZGVyKGNo
aWxkKSkKICAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CiAKICAgICBpZiAoaXNFbXB0
eSgpKSB7CkBAIC0xMzUsMTA5ICsxMDgsNTEgQEAgdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3Bl
OjpNdXRhdGlvbkFjY3VtdWxhdG9yOjp3aWxsUmVtb3ZlQ2hpbGQoUGFzc1JlZlB0cjxOb2QKIAog
dm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjplbnF1ZXVl
TXV0YXRpb25SZWNvcmQoKQogewotICAgIGlmIChpc0VtcHR5KCkpIHsKLSAgICAgICAgY2xlYXIo
KTsKKyAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgbV9v
YnNlcnZlcnMtPmVucXVldWVNdXRhdGlvblJlY29yZChNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hp
bGRMaXN0KAogICAgICAgICAgICAgbV90YXJnZXQsIFN0YXRpY05vZGVMaXN0OjphZG9wdChtX2Fk
ZGVkTm9kZXMpLCBTdGF0aWNOb2RlTGlzdDo6YWRvcHQobV9yZW1vdmVkTm9kZXMpLCBtX3ByZXZp
b3VzU2libGluZy5yZWxlYXNlKCksIG1fbmV4dFNpYmxpbmcucmVsZWFzZSgpKSk7Ci0gICAgY2xl
YXIoKTsKLX0KLQotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxh
dG9yOjpjbGVhcigpCi17Ci0gICAgaWYgKCFtX3JlbW92ZWROb2Rlcy5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fcmVtb3ZlZE5vZGVzLmNsZWFyKCk7Ci0gICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0
eSgpKQotICAgICAgICBtX2FkZGVkTm9kZXMuY2xlYXIoKTsKLSAgICBtX3ByZXZpb3VzU2libGlu
ZyA9IDA7Ci0gICAgbV9uZXh0U2libGluZyA9IDA7CiAgICAgbV9sYXN0QWRkZWQgPSAwOworICAg
IEFTU0VSVChpc0VtcHR5KCkpOwogfQogCiBib29sIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11
dGF0aW9uQWNjdW11bGF0b3I6OmlzRW1wdHkoKQogewotICAgIHJldHVybiBtX3JlbW92ZWROb2Rl
cy5pc0VtcHR5KCkgJiYgbV9hZGRlZE5vZGVzLmlzRW1wdHkoKTsKLX0KLQotQ2hpbGRMaXN0TXV0
YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIqIENoaWxkTGlzdE11dGF0aW9u
U2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpzX2luc3RhbmNlID0gMDsKLQotQ2hp
bGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Ok11dGF0aW9u
QWNjdW11bGF0aW9uUm91dGVyKCkKLXsKLX0KLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0
YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6On5NdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcigpCi17
Ci0gICAgQVNTRVJUKG1fc2NvcGluZ0xldmVscy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX2Fj
Y3VtdWxhdGlvbnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3Bl
OjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJU
KCFzX2luc3RhbmNlKTsKLSAgICBzX2luc3RhbmNlID0gYWRvcHRQdHIobmV3IENoaWxkTGlzdE11
dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKS5sZWFrUHRyKCk7Ci19Ci0K
LQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIqIENo
aWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbnN0YW5j
ZSgpCi17Ci0gICAgaWYgKCFzX2luc3RhbmNlKQotICAgICAgICBpbml0aWFsaXplKCk7Ci0KLSAg
ICByZXR1cm4gc19pbnN0YW5jZTsKLX0KLQotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpN
dXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6Y2hpbGRBZGRlZChOb2RlKiB0YXJnZXQsIE5vZGUq
IGNoaWxkKQotewotICAgIEhhc2hNYXA8Tm9kZSosIE93blB0cjxDaGlsZExpc3RNdXRhdGlvblNj
b3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yPiA+OjppdGVyYXRvciBpdGVyID0gbV9hY2N1bXVsYXRp
b25zLmZpbmQodGFyZ2V0KTsKLSAgICBBU1NFUlQoaXRlciAhPSBtX2FjY3VtdWxhdGlvbnMuZW5k
KCkpOwotICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+c2Vj
b25kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpdGVyLT5zZWNvbmQtPmNoaWxkQWRkZWQoY2hp
bGQpOworICAgIGJvb2wgcmVzdWx0ID0gbV9yZW1vdmVkTm9kZXMuaXNFbXB0eSgpICYmIG1fYWRk
ZWROb2Rlcy5pc0VtcHR5KCk7CisjaWZuZGVmIE5ERUJVRworICAgIGlmIChyZXN1bHQpIHsKKyAg
ICAgICAgQVNTRVJUKCFtX3ByZXZpb3VzU2libGluZyk7CisgICAgICAgIEFTU0VSVCghbV9uZXh0
U2libGluZyk7CisgICAgICAgIEFTU0VSVCghbV9sYXN0QWRkZWQpOworICAgIH0KKyNlbmRpZgor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0
YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxSZW1vdmVDaGlsZChOb2RlKiB0YXJnZXQsIE5v
ZGUqIGNoaWxkKQorQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvciog
Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6Z2V0T3JDcmVhdGUo
Tm9kZSogdGFyZ2V0KQogewotICAgIEhhc2hNYXA8Tm9kZSosIE93blB0cjxDaGlsZExpc3RNdXRh
dGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yPiA+OjppdGVyYXRvciBpdGVyID0gbV9hY2N1
bXVsYXRpb25zLmZpbmQodGFyZ2V0KTsKLSAgICBBU1NFUlQoaXRlciAhPSBtX2FjY3VtdWxhdGlv
bnMuZW5kKCkpOwotICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRl
ci0+c2Vjb25kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpdGVyLT5zZWNvbmQtPndpbGxSZW1v
dmVDaGlsZChjaGlsZCk7CisgICAgQWNjdW11bGF0b3JNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBh
Y2N1bXVsYXRvck1hcCgpLmFkZCh0YXJnZXQsIDApOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCisgICAgICAgICsrKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5tX3Njb3BpbmdMZXZlbCk7
CisgICAgZWxzZQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBNdXRhdGlv
bkFjY3VtdWxhdG9yKHRhcmdldCwgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmNyZWF0
ZUZvckNoaWxkTGlzdE11dGF0aW9uKHRhcmdldCkpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKIH0KIAotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFj
Y3VtdWxhdGlvblJvdXRlcjo6aW5jcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRhcmdldCkKK3Zv
aWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6ZXhpdFNjb3Bl
KCkKIHsKLSAgICBTY29waW5nTGV2ZWxNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3Njb3BpbmdM
ZXZlbHMuYWRkKHRhcmdldCwgMSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAg
ICAgICArKyhyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgaWYgKC0tbV9zY29waW5nTGV2
ZWwgPiAwKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKE93blB0cjxNdXRhdGlv
bk9ic2VydmVySW50ZXJlc3RHcm91cD4gb2JzZXJ2ZXJzID0gTXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXA6OmNyZWF0ZUZvckNoaWxkTGlzdE11dGF0aW9uKHRhcmdldCkpCi0gICAgICAgIG1f
YWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCBhZG9wdFB0cihuZXcgQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcih0YXJnZXQsIG9ic2VydmVycy5yZWxlYXNlKCkpKSk7
Ci0jaWZuZGVmIE5ERUJVRwotICAgIGVsc2UKLSAgICAgICAgbV9hY2N1bXVsYXRpb25zLnNldCh0
YXJnZXQsIG51bGxwdHIpOwotI2VuZGlmCisgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Cisg
ICAgYWNjdW11bGF0b3JNYXAoKS5yZW1vdmUobV90YXJnZXQuZ2V0KCkpOworICAgIGRlbGV0ZSB0
aGlzOwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0
aW9uUm91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQorQ2hpbGRMaXN0
TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6QWNjdW11bGF0b3JNYXAmIENoaWxk
TGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmFjY3VtdWxhdG9yTWFwKCkK
IHsKLSAgICBTY29waW5nTGV2ZWxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BpbmdMZXZlbHMu
ZmluZCh0YXJnZXQpOwotICAgIEFTU0VSVChpdGVyICE9IG1fc2NvcGluZ0xldmVscy5lbmQoKSk7
Ci0KLSAgICAtLShpdGVyLT5zZWNvbmQpOwotICAgIGlmIChpdGVyLT5zZWNvbmQgPiAwKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3Njb3BpbmdMZXZlbHMucmVtb3ZlKGl0ZXIpOwotCi0gICAg
T3duUHRyPE11dGF0aW9uQWNjdW11bGF0b3I+IHJlY29yZChtX2FjY3VtdWxhdGlvbnMudGFrZSh0
YXJnZXQpKTsKLSAgICBpZiAocmVjb3JkKQotICAgICAgICByZWNvcmQtPmVucXVldWVNdXRhdGlv
blJlY29yZCgpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQWNjdW11bGF0b3JNYXAsIG1hcCwg
KCkpOworICAgIHJldHVybiBtYXA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oCmluZGV4IGUwNjI0ZWY1ZGIz
YzgzYTdjYjdkYzI5MTYzYjQzNWI0ZGI5MDJlNmMuLmFlOWFkNzBhYTZkNGQxMTRjODEzN2ZlYmVl
ZDRmNWY0NmI1MmYzMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RN
dXRhdGlvblNjb3BlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9u
U2NvcGUuaApAQCAtMzUsNjkgKzM1LDg0IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgTXV0YXRpb25PYnNl
cnZlckludGVyZXN0R3JvdXA7CitjbGFzcyBOb2RlOworCiBjbGFzcyBDaGlsZExpc3RNdXRhdGlv
blNjb3BlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDaGlsZExpc3RNdXRhdGlvblNjb3Bl
KTsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDaGlsZExpc3RNdXRhdGlvblNjb3BlKE5vZGUqIHRh
cmdldCkKLSAgICAgICAgOiBtX3RhcmdldCh0YXJnZXQtPmRvY3VtZW50KCktPmhhc011dGF0aW9u
T2JzZXJ2ZXJzT2ZUeXBlKE11dGF0aW9uT2JzZXJ2ZXI6OkNoaWxkTGlzdCkgPyB0YXJnZXQgOiAw
KQorICAgICAgICA6IG1fYWNjdW11bGF0b3IoMCkKICAgICB7Ci0gICAgICAgIGlmIChtX3Rhcmdl
dCkKLSAgICAgICAgICAgIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbnN0YW5jZSgpLT5p
bmNyZW1lbnRTY29waW5nTGV2ZWwobV90YXJnZXQpOworICAgICAgICBpZiAodGFyZ2V0LT5kb2N1
bWVudCgpLT5oYXNNdXRhdGlvbk9ic2VydmVyc09mVHlwZShNdXRhdGlvbk9ic2VydmVyOjpDaGls
ZExpc3QpKQorICAgICAgICAgICAgbV9hY2N1bXVsYXRvciA9IE11dGF0aW9uQWNjdW11bGF0b3I6
OmdldE9yQ3JlYXRlKHRhcmdldCk7CiAgICAgfQogCiAgICAgfkNoaWxkTGlzdE11dGF0aW9uU2Nv
cGUoKQogICAgIHsKLSAgICAgICAgaWYgKG1fdGFyZ2V0KQotICAgICAgICAgICAgTXV0YXRpb25B
Y2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPmRlY3JlbWVudFNjb3BpbmdMZXZlbChtX3Rh
cmdldCk7CisgICAgICAgIGlmIChtX2FjY3VtdWxhdG9yKQorICAgICAgICAgICAgbV9hY2N1bXVs
YXRvci0+ZXhpdFNjb3BlKCk7CiAgICAgfQogCiAgICAgdm9pZCBjaGlsZEFkZGVkKE5vZGUqIGNo
aWxkKQogICAgIHsKLSAgICAgICAgaWYgKG1fdGFyZ2V0KQotICAgICAgICAgICAgTXV0YXRpb25B
Y2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPmNoaWxkQWRkZWQobV90YXJnZXQsIGNoaWxk
KTsKKyAgICAgICAgaWYgKG1fYWNjdW11bGF0b3IpCisgICAgICAgICAgICBtX2FjY3VtdWxhdG9y
LT5jaGlsZEFkZGVkKGNoaWxkKTsKICAgICB9CiAKICAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChO
b2RlKiBjaGlsZCkKICAgICB7Ci0gICAgICAgIGlmIChtX3RhcmdldCkKLSAgICAgICAgICAgIE11
dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbnN0YW5jZSgpLT53aWxsUmVtb3ZlQ2hpbGQobV90
YXJnZXQsIGNoaWxkKTsKKyAgICAgICAgaWYgKG1fYWNjdW11bGF0b3IpCisgICAgICAgICAgICBt
X2FjY3VtdWxhdG9yLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOwogICAgIH0KIAogcHJpdmF0ZToK
LSAgICBjbGFzcyBNdXRhdGlvbkFjY3VtdWxhdG9yOwotCi0gICAgY2xhc3MgTXV0YXRpb25BY2N1
bXVsYXRpb25Sb3V0ZXIgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNdXRhdGlvbkFj
Y3VtdWxhdGlvblJvdXRlcik7CisgICAgLy8gTXV0YXRpb25BY2N1bXVsYXRvciBleHBlY3RzIHRo
YXQgYWxsIHJlbW92YWxzIGZyb20gYSBwYXJlbnQgdGFrZSBwbGFjZSBpbiBvcmRlcgorICAgIC8v
IGFuZCBwcmVjZWRlIGFueSBhZGRpdGlvbnMuIElmIHRoaXMgaXMgdmlvbGF0ZWQgKGkuZS4gYmVj
YXVzZSBvZiBjb2RlIGNoYW5nZXMgZWxzZXdoZXJlCisgICAgLy8gaW4gV2ViQ29yZSkgaXQgd2ls
bCBsaWtlbHkgcmVzdWx0IGluIGJvdGggKGEpIEFTU0VSVGlvbnMgZmFpbGluZywgYW5kIChiKSBt
dXRhdGlvbiByZWNvcmRzCisgICAgLy8gYmVpbmcgZW5xdWV1ZWQgZm9yIGRlbGl2ZXJ5IGJlZm9y
ZSB0aGUgb3V0ZXItbW9zdCBzY29wZSBjbG9zZXMuCisgICAgY2xhc3MgTXV0YXRpb25BY2N1bXVs
YXRvciB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE11dGF0aW9uQWNjdW11bGF0b3Ip
OwogICAgIHB1YmxpYzoKLSAgICAgICAgfk11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKCk7Cisg
ICAgICAgIHN0YXRpYyBNdXRhdGlvbkFjY3VtdWxhdG9yKiBnZXRPckNyZWF0ZShOb2RlKik7Cisg
ICAgICAgIHZvaWQgZXhpdFNjb3BlKCk7CiAKLSAgICAgICAgc3RhdGljIE11dGF0aW9uQWNjdW11
bGF0aW9uUm91dGVyKiBpbnN0YW5jZSgpOworICAgICAgICB2b2lkIGNoaWxkQWRkZWQoTm9kZSop
OworICAgICAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChOb2RlKik7CisgICAgICAgIHZvaWQgZW5x
dWV1ZU11dGF0aW9uUmVjb3JkKCk7CiAKLSAgICAgICAgdm9pZCBpbmNyZW1lbnRTY29waW5nTGV2
ZWwoTm9kZSopOwotICAgICAgICB2b2lkIGRlY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKik7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+
LCBQYXNzT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPik7CisgICAgICAgIH5N
dXRhdGlvbkFjY3VtdWxhdG9yKCk7CiAKLSAgICAgICAgdm9pZCBjaGlsZEFkZGVkKE5vZGUqIHRh
cmdldCwgTm9kZSogY2hpbGQpOwotICAgICAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChOb2RlKiB0
YXJnZXQsIE5vZGUqIGNoaWxkKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgd291bGQgbGlrZWx5
IGJlIG1vcmUgZWZmaWNpZW50IGFzIGEgVmVjdG9yLCBzaW5jZSBpdCBkb2Vzbid0CisgICAgICAg
IC8vIGNvbW1vbmx5IGNvbnRhaW4gbW9yZSB0aGFuIHR3byBvciB0aHJlZSBpdGVtcy4KKyAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwPE5vZGUqLCBNdXRhdGlvbkFjY3VtdWxhdG9yKj4gQWNjdW11bGF0
b3JNYXA7CisgICAgICAgIHN0YXRpYyBBY2N1bXVsYXRvck1hcCYgYWNjdW11bGF0b3JNYXAoKTsK
IAotICAgIHByaXZhdGU6Ci0gICAgICAgIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKCk7Ci0g
ICAgICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKKyAgICAgICAgYm9vbCBpc0VtcHR5KCk7
CisgICAgICAgIGJvb2wgaXNBZGRlZE5vZGVJbk9yZGVyKE5vZGUqKTsKKyAgICAgICAgYm9vbCBp
c1JlbW92ZWROb2RlSW5PcmRlcihOb2RlKik7CisKKyAgICAgICAgUmVmUHRyPE5vZGU+IG1fdGFy
Z2V0OworICAgICAgICB1bnNpZ25lZCBtX3Njb3BpbmdMZXZlbDsKIAotICAgICAgICB0eXBlZGVm
IEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBTY29waW5nTGV2ZWxNYXA7Ci0gICAgICAgIFNjb3Bp
bmdMZXZlbE1hcCBtX3Njb3BpbmdMZXZlbHM7Ci0gICAgICAgIEhhc2hNYXA8Tm9kZSosIE93blB0
cjxNdXRhdGlvbkFjY3VtdWxhdG9yPiA+IG1fYWNjdW11bGF0aW9uczsKKyAgICAgICAgVmVjdG9y
PFJlZlB0cjxOb2RlPiA+IG1fcmVtb3ZlZE5vZGVzOworICAgICAgICBWZWN0b3I8UmVmUHRyPE5v
ZGU+ID4gbV9hZGRlZE5vZGVzOworICAgICAgICBSZWZQdHI8Tm9kZT4gbV9wcmV2aW91c1NpYmxp
bmc7CisgICAgICAgIFJlZlB0cjxOb2RlPiBtX25leHRTaWJsaW5nOworICAgICAgICBOb2RlKiBt
X2xhc3RBZGRlZDsKIAotICAgICAgICBzdGF0aWMgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIq
IHNfaW5zdGFuY2U7CisgICAgICAgIE93blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91
cD4gbV9vYnNlcnZlcnM7CiAgICAgfTsKIAotICAgIE5vZGUqIG1fdGFyZ2V0OworICAgIE11dGF0
aW9uQWNjdW11bGF0b3IqIG1fYWNjdW11bGF0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IDY0MWMwYjg5MGIyYWQ3MTMz
MTE4MmYzYTZhMDIyNTM4ZmEzYTczNTUuLmNhZjRhYzkzOTg1MTZlZGI1Y2ZiZTA0YzM2MzFhZmY0
MzUzMjhjM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBAIC0zMCw3ICszMCw2
IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5
d29yZHMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKLSNpbmNsdWRlICJDaGlsZExpc3RN
dXRhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiRE9NU2V0dGFibGVUb2tlbkxpc3QuaCIKICNpbmNs
dWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165169</attachid>
            <date>2012-09-21 12:06:26 -0700</date>
            <delta_ts>2012-09-21 14:08:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97352-20120921120550.patch</filename>
            <type>text/plain</type>
            <size>16919</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjlmYjczNTExMmRhYWUx
ZjQ0MmQ0MmMzMzllZjFkMjUwYThhNDk4ZC4uZTg1M2EzYmUwMDBlN2EzN2RkNzFmZmJjY2ZkMDYx
ZjMyOTgzYzU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTA5LTIxICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IGFuZCBvcHRp
bWl6ZSBDaGlsZExpc3RNdXRhdGlvblNjb3BlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NzM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgaXMgb25lIG9mIHRoZSBt
b3N0IGNvbXBsaWNhdGVkIGJpdHMgb2YKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlciBpbXBsZW1l
bnRhdGlvbi4gVGhpcyBwYXRjaCBhaW1zIHRvIHNpbXBsaWZ5IGl0IGZvcgorICAgICAgICBjbGFy
aXR5IGFuZCBpbXByb3ZlIGl0cyBwZXJmb3JtYW5jZSAobW9zdGx5IGJ5IGp1c3QgZG9pbmcgbGVz
cykuCisKKyAgICAgICAgVGhlIGJpZyBjaGFuZ2UgaXMgdG8gcmVtb3ZlIHRoZSBNdXRhdGlvbkFj
Y3VtdWxhdG9yUm91dGVyIGNsYXNzLAorICAgICAgICByZXBsYWNpbmcgaXQgd2l0aCBzdGF0aWMg
bGlmZXRpbWUtbWFuYWdlbWVudCBsb2dpYyBpbgorICAgICAgICBNdXRhdGlvbkFjY3VtdWxhdG9y
ICh3aG9zZSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBhcmUgbm93IGJvdGgKKyAgICAgICAg
cHJpdmF0ZSkuIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgaXMgZXhwZWN0ZWQgdG8gY2FsbCBnZXRP
ckNyZWF0ZSgpIGluCisgICAgICAgIGl0cyBjb25zdHJ1Y3RvciBhbmQgZXhpdFNjb3BlKCkgaW4g
aXRzIGRlc3RydWN0b3IsIGFuZCB0aGUKKyAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRvciBoYW5k
bGVzIHRoZSBzY29waW5nLWxldmVsIGNvdW50aW5nIGFuZCByZWNvcmQKKyAgICAgICAgZW5xdWV1
ZWluZyBpbnRlcm5hbGx5LgorCisgICAgICAgIFRoaXMgZ3JlYXRseSByZWR1Y2VzIHRoZSBudW1i
ZXIgb2YgbGluZXMgb2YgY29kZSwgYW5kIGNvbmRlbnNlcworICAgICAgICB0d28gSGFzaE1hcHMg
aW50byBvbmUuIEl0IGFsc28gcmVkdWNlcyBoYXNoIGxvb2t1cHMsIHdoaWNoIG5vdworICAgICAg
ICBvY2N1ciBvbmx5IG9uIHNjb3BlIGNyZWF0aW9uIGFuZCB3aGVuIHRoZSBzY29waW5nIGxldmVs
IGZvciBhIGdpdmVuCisgICAgICAgIGFjY3VtdWxhdG9yIHJlYWNoZXMgMCAocHJldmlvdXNseSwg
ZWFjaCBjaGlsZEFkZGVkIGFuZCB3aWxsUmVtb3ZlQ2hpbGQKKyAgICAgICAgY2FsbCBjb3VsZCBy
ZXN1bHQgaW4gdHdvIGhhc2ggbG9va3VwcyBlYWNoKS4KKworICAgICAgICBUaGVyZSBhcmUgc29t
ZSBtaW5vciBjaGFuZ2VzIGFzIHdlbGw6IHRoZSBNdXRhdGlvbkFjY3VtdWxhdG9yOjpjbGVhcigp
CisgICAgICAgIG1ldGhvZCBpcyBnb25lLCBhcyBpdCB3YXMgZG9pbmcgbW9yZSB3b3JrIHRoYW4g
bmVjZXNzYXJ5OworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMIGlzIG5vdyB1c2VkIGluc3Rl
YWQgb2YgaGFuZC1yb2xsZWQgc3RhdGljLW1hbmFnZW1lbnQKKyAgICAgICAgY29kZTsgTXV0YXRp
b25BY2N1bXVsYXRvcjo6bV9sYXN0QWRkZWQgaXMgbm8gbG9uZ2VyIGEgUmVmUHRyLCBzaW5jZSBp
dAorICAgICAgICBhbHdheXMgcG9pbnRzIGF0IGEgTm9kZSB0aGF0J3MgYWxyZWFkeSBiZWluZyBy
ZWYnZCBieSB0aGUgYWNjdW11bGF0b3IuCisgICAgICAgIEFsc28gdmFyaW91cyBtaW5vciBzeW50
YWN0aWMgY2xlYW51cHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVo
YXZpb3IuCisKKyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9y
OjpNdXRhdGlvbkFjY3VtdWxhdG9yKToKKyAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGNhbGwg
dG8gY2xlYXIoKSAod2hpY2ggaXRzZWxmIGhhcyBiZWVuIHJlbW92ZWQpLgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRB
ZGRlZCk6CisgICAgICAgIENoYW5nZSBQYXNzUmVmUHRyIHRvIHJhdyBwb2ludGVyIG5vdyB0aGF0
IHdlIGJhaWwgb3V0IGlmIHRoZXJlIGFyZSBubyBvYnNlcnZlcnMuCisgICAgICAgIChXZWJDb3Jl
OjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjppc1JlbW92ZWRO
b2RlSW5PcmRlcik6CisgICAgICAgIFNpbXBsaWZ5IFJlZlB0ciBzeW50YXguCisgICAgICAgIChX
ZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjp3aWxs
UmVtb3ZlQ2hpbGQpOgorICAgICAgICBDaGFuZ2UgUGFzc1JlZlB0ciB0byByYXcgcG9pbnRlciBu
b3cgdGhhdCB3ZSBiYWlsIG91dCBpZiB0aGVyZSBhcmUgbm8gb2JzZXJ2ZXJzLgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6ZW5x
dWV1ZU11dGF0aW9uUmVjb3JkKToKKyAgICAgICAgUmVwbGFjZSBjYWxsIHRvIGNsZWFyKCkgd2l0
aCBjbGVhcmluZyBtX2xhc3RBZGRlZCwgc2luY2UgaXQncyB0aGUgb25seQorICAgICAgICBiaXQg
bm90IGNsZWFyZWQgYnkgdGhlIE11dGF0aW9uUmVjb3JkIGNyZWF0aW9uIGNhbGwuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpp
c0VtcHR5KToKKyAgICAgICAgQWRkZWQgbW9yZSBhc3NlcnRpb25zIGFib3V0IGVtcHRpbmVzcy4K
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11
bGF0b3I6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgUmVwbGFjZXMgaGFsZiBvZiBNdXRhdGlvbkFj
Y3VtdWxhdG9yUm91dGVyJ3Mgam9iLgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRp
b25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6ZXhpdFNjb3BlKToKKyAgICAgICAgUmVwbGFj
ZXMgdGhlIG90aGVyIGhhbGYgb2YgdGhlIHJvdXRlcidzIGpvYiwgYW5kIGhhbmRsZXMgdGhlIGxp
ZmV0aW1lCisgICAgICAgIG9mIE11dGF0aW9uQWNjdW11bGF0b3JzLgorICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6YWNjdW11bGF0
b3JNYXApOgorICAgICAgICBSZWR1Y2VkIHR3byBtYXBzIHRvIG9uZSwgYW5kIG1hbmFnZSBpdCBp
bnNpZGUgTXV0YXRpb25BY2N1bXVsYXRvciBpdHNlbGYuCisgICAgICAgICogZG9tL0NoaWxkTGlz
dE11dGF0aW9uU2NvcGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZSk6IFN0b3JlIG1f
YWNjdW11bGF0b3IgcmF0aGVyIHRoYW4gbV90YXJnZXQuCisgICAgICAgIChXZWJDb3JlOjpDaGls
ZExpc3RNdXRhdGlvblNjb3BlOjp+Q2hpbGRMaXN0TXV0YXRpb25TY29wZSk6IGRpdHRvCisgICAg
ICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpjaGlsZEFkZGVkKTogZGl0dG8K
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6OndpbGxSZW1vdmVDaGls
ZCk6IGRpdHRvCisgICAgICAgIChDaGlsZExpc3RNdXRhdGlvblNjb3BlKToKKyAgICAgICAgKE11
dGF0aW9uQWNjdW11bGF0b3IpOiBNb3ZlZCBjbGFzcyBkZWNsYXJhdGlvbiBpbnRvIGhlYWRlciBm
aWxlLCBzaW5jZQorICAgICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlJ3MgaW5saW5lIG1ldGhv
ZHMgbmVlZCB0byBjYWxsIHRoZXNlIG1ldGhvZHMuCisgICAgICAgICogaHRtbC9IVE1MRWxlbWVu
dC5jcHA6IFJlbW92ZSB1bnVzZWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICNpbmNsdWRlLgor
CiAyMDEyLTA5LTE5ICBSb2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNr
QmVycnldIFJlbW92ZSBjdXN0b20gcGFpbnRpbmcgY29kZSBmb3Igc2VhcmNoQ2FuY2VsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKaW5kZXggZjRhMmRh
MDRhYjYxNTgxM2Y4NjRhZTEzNTZmNGVhYTRkYjBiZmU0OS4uN2E5YjMzOWU2NzFlZDQwZjQyZjcz
ODkyMWVjN2QzNzU0MmM3ODc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxk
TGlzdE11dGF0aW9uU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RN
dXRhdGlvblNjb3BlLmNwcApAQCAtNDIsNDQgKzQyLDE2IEBACiAjaW5jbHVkZSAiU3RhdGljTm9k
ZUxpc3QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotLy8gTXV0YXRpb25BY2N1bXVsYXRvciBleHBlY3RzIHRoYXQgYWxsIHJlbW92YWxzIGZyb20g
YSBwYXJlbnQgdGFrZSBwbGFjZSBpbiBvcmRlcgotLy8gYW5kIHByZWNlZGUgYW55IGFkZGl0aW9u
cy4gSWYgdGhpcyBpcyB2aW9sYXRlZCAoaS5lLiBiZWNhdXNlIG9mIGNvZGUgY2hhbmdlcyBlbHNl
d2hlcmUKLS8vIGluIFdlYkNvcmUpIGl0IHdpbGwgbGlrZWx5IHJlc3VsdCBpbiBib3RoIChhKSBB
U1NFUlRpb25zIGZhaWxpbmcsIGFuZCAoYikgbXV0YXRpb24gcmVjb3JkcwotLy8gYmVpbmcgZW5x
dWV1ZWQgZm9yIGRlbGl2ZXJ5IGJlZm9yZSB0aGUgb3V0ZXItbW9zdCBzY29wZSBjbG9zZXMuCi1j
bGFzcyBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShNdXRhdGlvbkFjY3VtdWxhdG9yKTsKLXB1YmxpYzoKLSAgICBN
dXRhdGlvbkFjY3VtdWxhdG9yKFBhc3NSZWZQdHI8Tm9kZT4sIFBhc3NPd25QdHI8TXV0YXRpb25P
YnNlcnZlckludGVyZXN0R3JvdXA+IG9ic2VydmVycyk7Ci0gICAgfk11dGF0aW9uQWNjdW11bGF0
b3IoKTsKLQotICAgIHZvaWQgY2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+KTsKLSAgICB2b2lk
IHdpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+KTsKLSAgICB2b2lkIGVucXVldWVNdXRh
dGlvblJlY29yZCgpOwotCi1wcml2YXRlOgotICAgIHZvaWQgY2xlYXIoKTsKLSAgICBib29sIGlz
RW1wdHkoKTsKLSAgICBib29sIGlzQWRkZWROb2RlSW5PcmRlcihOb2RlKik7Ci0gICAgYm9vbCBp
c1JlbW92ZWROb2RlSW5PcmRlcihOb2RlKik7Ci0gICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0Owot
Ci0gICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG1fcmVtb3ZlZE5vZGVzOwotICAgIFZlY3RvcjxS
ZWZQdHI8Tm9kZT4gPiBtX2FkZGVkTm9kZXM7Ci0gICAgUmVmUHRyPE5vZGU+IG1fcHJldmlvdXNT
aWJsaW5nOwotICAgIFJlZlB0cjxOb2RlPiBtX25leHRTaWJsaW5nOwotICAgIFJlZlB0cjxOb2Rl
PiBtX2xhc3RBZGRlZDsKLQotICAgIE93blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91
cD4gbV9vYnNlcnZlcnM7Ci19OwotCiBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFj
Y3VtdWxhdG9yOjpNdXRhdGlvbkFjY3VtdWxhdG9yKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBQ
YXNzT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiBvYnNlcnZlcnMpCiAgICAg
OiBtX3RhcmdldCh0YXJnZXQpCisgICAgLCBtX3Njb3BpbmdMZXZlbCgxKQorICAgICwgbV9sYXN0
QWRkZWQoMCkKICAgICAsIG1fb2JzZXJ2ZXJzKG9ic2VydmVycykKIHsKLSAgICBjbGVhcigpOwog
fQogCiBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjp+TXV0YXRp
b25BY2N1bXVsYXRvcigpCkBAIC05MiwxMiArNjQsMTMgQEAgaW5saW5lIGJvb2wgQ2hpbGRMaXN0
TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6aXNBZGRlZE5vZGVJbk9yZGVyKE5v
ZGUKICAgICByZXR1cm4gaXNFbXB0eSgpIHx8IChtX2xhc3RBZGRlZCA9PSBjaGlsZC0+cHJldmlv
dXNTaWJsaW5nKCkgJiYgbV9uZXh0U2libGluZyA9PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSk7CiB9
CiAKLXZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hp
bGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxkKQordm9pZCBDaGlsZExpc3RNdXRhdGlv
blNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKE5vZGUqIGNoaWxkKQogewot
ICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9IHBycENoaWxkOworICAgIGlmICghbV9vYnNlcnZlcnMp
CisgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChpc0FkZGVkTm9kZUluT3JkZXIoY2hpbGQu
Z2V0KCkpKTsKLSAgICBpZiAoIWlzQWRkZWROb2RlSW5PcmRlcihjaGlsZC5nZXQoKSkpCisgICAg
QVNTRVJUKGlzQWRkZWROb2RlSW5PcmRlcihjaGlsZCkpOworICAgIGlmICghaXNBZGRlZE5vZGVJ
bk9yZGVyKGNoaWxkKSkKICAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CiAKICAgICBp
ZiAoaXNFbXB0eSgpKSB7CkBAIC0xMTEsMTYgKzg0LDE2IEBAIHZvaWQgQ2hpbGRMaXN0TXV0YXRp
b25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+
IHByCiAKIGlubGluZSBib29sIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11
bGF0b3I6OmlzUmVtb3ZlZE5vZGVJbk9yZGVyKE5vZGUqIGNoaWxkKQogewotICAgIHJldHVybiBp
c0VtcHR5KCkgfHwgbV9uZXh0U2libGluZy5nZXQoKSA9PSBjaGlsZDsKKyAgICByZXR1cm4gaXNF
bXB0eSgpIHx8IG1fbmV4dFNpYmxpbmcgPT0gY2hpbGQ7CiB9CiAKLXZvaWQgQ2hpbGRMaXN0TXV0
YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQ
dHI8Tm9kZT4gcHJwQ2hpbGQpCit2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9u
QWNjdW11bGF0b3I6OndpbGxSZW1vdmVDaGlsZChOb2RlKiBjaGlsZCkKIHsKLSAgICBSZWZQdHI8
Tm9kZT4gY2hpbGQgPSBwcnBDaGlsZDsKLQotICAgIEFTU0VSVChtX2FkZGVkTm9kZXMuaXNFbXB0
eSgpICYmIGlzUmVtb3ZlZE5vZGVJbk9yZGVyKGNoaWxkLmdldCgpKSk7CisgICAgaWYgKCFtX29i
c2VydmVycykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0
eSgpIHx8ICFpc1JlbW92ZWROb2RlSW5PcmRlcihjaGlsZC5nZXQoKSkpCisgICAgQVNTRVJUKG1f
YWRkZWROb2Rlcy5pc0VtcHR5KCkgJiYgaXNSZW1vdmVkTm9kZUluT3JkZXIoY2hpbGQpKTsKKyAg
ICBpZiAoIW1fYWRkZWROb2Rlcy5pc0VtcHR5KCkgfHwgIWlzUmVtb3ZlZE5vZGVJbk9yZGVyKGNo
aWxkKSkKICAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CiAKICAgICBpZiAoaXNFbXB0
eSgpKSB7CkBAIC0xMzUsMTA5ICsxMDgsNTEgQEAgdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3Bl
OjpNdXRhdGlvbkFjY3VtdWxhdG9yOjp3aWxsUmVtb3ZlQ2hpbGQoUGFzc1JlZlB0cjxOb2QKIAog
dm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjplbnF1ZXVl
TXV0YXRpb25SZWNvcmQoKQogewotICAgIGlmIChpc0VtcHR5KCkpIHsKLSAgICAgICAgY2xlYXIo
KTsKKyAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgbV9v
YnNlcnZlcnMtPmVucXVldWVNdXRhdGlvblJlY29yZChNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hp
bGRMaXN0KAogICAgICAgICAgICAgbV90YXJnZXQsIFN0YXRpY05vZGVMaXN0OjphZG9wdChtX2Fk
ZGVkTm9kZXMpLCBTdGF0aWNOb2RlTGlzdDo6YWRvcHQobV9yZW1vdmVkTm9kZXMpLCBtX3ByZXZp
b3VzU2libGluZy5yZWxlYXNlKCksIG1fbmV4dFNpYmxpbmcucmVsZWFzZSgpKSk7Ci0gICAgY2xl
YXIoKTsKLX0KLQotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxh
dG9yOjpjbGVhcigpCi17Ci0gICAgaWYgKCFtX3JlbW92ZWROb2Rlcy5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fcmVtb3ZlZE5vZGVzLmNsZWFyKCk7Ci0gICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0
eSgpKQotICAgICAgICBtX2FkZGVkTm9kZXMuY2xlYXIoKTsKLSAgICBtX3ByZXZpb3VzU2libGlu
ZyA9IDA7Ci0gICAgbV9uZXh0U2libGluZyA9IDA7CiAgICAgbV9sYXN0QWRkZWQgPSAwOworICAg
IEFTU0VSVChpc0VtcHR5KCkpOwogfQogCiBib29sIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11
dGF0aW9uQWNjdW11bGF0b3I6OmlzRW1wdHkoKQogewotICAgIHJldHVybiBtX3JlbW92ZWROb2Rl
cy5pc0VtcHR5KCkgJiYgbV9hZGRlZE5vZGVzLmlzRW1wdHkoKTsKLX0KLQotQ2hpbGRMaXN0TXV0
YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIqIENoaWxkTGlzdE11dGF0aW9u
U2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpzX2luc3RhbmNlID0gMDsKLQotQ2hp
bGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Ok11dGF0aW9u
QWNjdW11bGF0aW9uUm91dGVyKCkKLXsKLX0KLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0
YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6On5NdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcigpCi17
Ci0gICAgQVNTRVJUKG1fc2NvcGluZ0xldmVscy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX2Fj
Y3VtdWxhdGlvbnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3Bl
OjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJU
KCFzX2luc3RhbmNlKTsKLSAgICBzX2luc3RhbmNlID0gYWRvcHRQdHIobmV3IENoaWxkTGlzdE11
dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKS5sZWFrUHRyKCk7Ci19Ci0K
LQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIqIENo
aWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbnN0YW5j
ZSgpCi17Ci0gICAgaWYgKCFzX2luc3RhbmNlKQotICAgICAgICBpbml0aWFsaXplKCk7Ci0KLSAg
ICByZXR1cm4gc19pbnN0YW5jZTsKLX0KLQotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpN
dXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6Y2hpbGRBZGRlZChOb2RlKiB0YXJnZXQsIE5vZGUq
IGNoaWxkKQotewotICAgIEhhc2hNYXA8Tm9kZSosIE93blB0cjxDaGlsZExpc3RNdXRhdGlvblNj
b3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yPiA+OjppdGVyYXRvciBpdGVyID0gbV9hY2N1bXVsYXRp
b25zLmZpbmQodGFyZ2V0KTsKLSAgICBBU1NFUlQoaXRlciAhPSBtX2FjY3VtdWxhdGlvbnMuZW5k
KCkpOwotICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+c2Vj
b25kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpdGVyLT5zZWNvbmQtPmNoaWxkQWRkZWQoY2hp
bGQpOworICAgIGJvb2wgcmVzdWx0ID0gbV9yZW1vdmVkTm9kZXMuaXNFbXB0eSgpICYmIG1fYWRk
ZWROb2Rlcy5pc0VtcHR5KCk7CisjaWZuZGVmIE5ERUJVRworICAgIGlmIChyZXN1bHQpIHsKKyAg
ICAgICAgQVNTRVJUKCFtX3ByZXZpb3VzU2libGluZyk7CisgICAgICAgIEFTU0VSVCghbV9uZXh0
U2libGluZyk7CisgICAgICAgIEFTU0VSVCghbV9sYXN0QWRkZWQpOworICAgIH0KKyNlbmRpZgor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0
YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxSZW1vdmVDaGlsZChOb2RlKiB0YXJnZXQsIE5v
ZGUqIGNoaWxkKQorQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvciog
Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6Z2V0T3JDcmVhdGUo
Tm9kZSogdGFyZ2V0KQogewotICAgIEhhc2hNYXA8Tm9kZSosIE93blB0cjxDaGlsZExpc3RNdXRh
dGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yPiA+OjppdGVyYXRvciBpdGVyID0gbV9hY2N1
bXVsYXRpb25zLmZpbmQodGFyZ2V0KTsKLSAgICBBU1NFUlQoaXRlciAhPSBtX2FjY3VtdWxhdGlv
bnMuZW5kKCkpOwotICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRl
ci0+c2Vjb25kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpdGVyLT5zZWNvbmQtPndpbGxSZW1v
dmVDaGlsZChjaGlsZCk7CisgICAgQWNjdW11bGF0b3JNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBh
Y2N1bXVsYXRvck1hcCgpLmFkZCh0YXJnZXQsIDApOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCisgICAgICAgICsrKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5tX3Njb3BpbmdMZXZlbCk7
CisgICAgZWxzZQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBNdXRhdGlv
bkFjY3VtdWxhdG9yKHRhcmdldCwgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmNyZWF0
ZUZvckNoaWxkTGlzdE11dGF0aW9uKHRhcmdldCkpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKIH0KIAotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFj
Y3VtdWxhdGlvblJvdXRlcjo6aW5jcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRhcmdldCkKK3Zv
aWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6ZXhpdFNjb3Bl
KCkKIHsKLSAgICBTY29waW5nTGV2ZWxNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3Njb3BpbmdM
ZXZlbHMuYWRkKHRhcmdldCwgMSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAg
ICAgICArKyhyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7CisgICAgaWYgKC0tbV9zY29waW5nTGV2
ZWwgPiAwKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKE93blB0cjxNdXRhdGlv
bk9ic2VydmVySW50ZXJlc3RHcm91cD4gb2JzZXJ2ZXJzID0gTXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXA6OmNyZWF0ZUZvckNoaWxkTGlzdE11dGF0aW9uKHRhcmdldCkpCi0gICAgICAgIG1f
YWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCBhZG9wdFB0cihuZXcgQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcih0YXJnZXQsIG9ic2VydmVycy5yZWxlYXNlKCkpKSk7
Ci0jaWZuZGVmIE5ERUJVRwotICAgIGVsc2UKLSAgICAgICAgbV9hY2N1bXVsYXRpb25zLnNldCh0
YXJnZXQsIG51bGxwdHIpOwotI2VuZGlmCisgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Cisg
ICAgYWNjdW11bGF0b3JNYXAoKS5yZW1vdmUobV90YXJnZXQuZ2V0KCkpOworICAgIGRlbGV0ZSB0
aGlzOwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0
aW9uUm91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQorQ2hpbGRMaXN0
TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6QWNjdW11bGF0b3JNYXAmIENoaWxk
TGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmFjY3VtdWxhdG9yTWFwKCkK
IHsKLSAgICBTY29waW5nTGV2ZWxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Njb3BpbmdMZXZlbHMu
ZmluZCh0YXJnZXQpOwotICAgIEFTU0VSVChpdGVyICE9IG1fc2NvcGluZ0xldmVscy5lbmQoKSk7
Ci0KLSAgICAtLShpdGVyLT5zZWNvbmQpOwotICAgIGlmIChpdGVyLT5zZWNvbmQgPiAwKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3Njb3BpbmdMZXZlbHMucmVtb3ZlKGl0ZXIpOwotCi0gICAg
T3duUHRyPE11dGF0aW9uQWNjdW11bGF0b3I+IHJlY29yZChtX2FjY3VtdWxhdGlvbnMudGFrZSh0
YXJnZXQpKTsKLSAgICBpZiAocmVjb3JkKQotICAgICAgICByZWNvcmQtPmVucXVldWVNdXRhdGlv
blJlY29yZCgpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQWNjdW11bGF0b3JNYXAsIG1hcCwg
KCkpOworICAgIHJldHVybiBtYXA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oCmluZGV4IGUwNjI0ZWY1ZGIz
YzgzYTdjYjdkYzI5MTYzYjQzNWI0ZGI5MDJlNmMuLjViYjU4NGU1YzMwOTNiNGI5MzY1NDRiYTFm
YWJhYjc0YTBlY2Y2YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RN
dXRhdGlvblNjb3BlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9u
U2NvcGUuaApAQCAtNDIsNjIgKzQyLDc3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA7CisKIGNsYXNzIENoaWxkTGlzdE11dGF0
aW9uU2NvcGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENoaWxkTGlzdE11dGF0aW9uU2Nv
cGUpOwogcHVibGljOgogICAgIGV4cGxpY2l0IENoaWxkTGlzdE11dGF0aW9uU2NvcGUoTm9kZSog
dGFyZ2V0KQotICAgICAgICA6IG1fdGFyZ2V0KHRhcmdldC0+ZG9jdW1lbnQoKS0+aGFzTXV0YXRp
b25PYnNlcnZlcnNPZlR5cGUoTXV0YXRpb25PYnNlcnZlcjo6Q2hpbGRMaXN0KSA/IHRhcmdldCA6
IDApCisgICAgICAgIDogbV9hY2N1bXVsYXRvcigwKQogICAgIHsKLSAgICAgICAgaWYgKG1fdGFy
Z2V0KQotICAgICAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCkt
PmluY3JlbWVudFNjb3BpbmdMZXZlbChtX3RhcmdldCk7CisgICAgICAgIGlmICh0YXJnZXQtPmRv
Y3VtZW50KCktPmhhc011dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKE11dGF0aW9uT2JzZXJ2ZXI6OkNo
aWxkTGlzdCkpCisgICAgICAgICAgICBtX2FjY3VtdWxhdG9yID0gTXV0YXRpb25BY2N1bXVsYXRv
cjo6Z2V0T3JDcmVhdGUodGFyZ2V0KTsKICAgICB9CiAKICAgICB+Q2hpbGRMaXN0TXV0YXRpb25T
Y29wZSgpCiAgICAgewotICAgICAgICBpZiAobV90YXJnZXQpCi0gICAgICAgICAgICBNdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcjo6aW5zdGFuY2UoKS0+ZGVjcmVtZW50U2NvcGluZ0xldmVsKG1f
dGFyZ2V0KTsKKyAgICAgICAgaWYgKG1fYWNjdW11bGF0b3IpCisgICAgICAgICAgICBtX2FjY3Vt
dWxhdG9yLT5leGl0U2NvcGUoKTsKICAgICB9CiAKICAgICB2b2lkIGNoaWxkQWRkZWQoTm9kZSog
Y2hpbGQpCiAgICAgewotICAgICAgICBpZiAobV90YXJnZXQpCi0gICAgICAgICAgICBNdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcjo6aW5zdGFuY2UoKS0+Y2hpbGRBZGRlZChtX3RhcmdldCwgY2hp
bGQpOworICAgICAgICBpZiAobV9hY2N1bXVsYXRvcikKKyAgICAgICAgICAgIG1fYWNjdW11bGF0
b3ItPmNoaWxkQWRkZWQoY2hpbGQpOwogICAgIH0KIAogICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxk
KE5vZGUqIGNoaWxkKQogICAgIHsKLSAgICAgICAgaWYgKG1fdGFyZ2V0KQotICAgICAgICAgICAg
TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPndpbGxSZW1vdmVDaGlsZCht
X3RhcmdldCwgY2hpbGQpOworICAgICAgICBpZiAobV9hY2N1bXVsYXRvcikKKyAgICAgICAgICAg
IG1fYWNjdW11bGF0b3ItPndpbGxSZW1vdmVDaGlsZChjaGlsZCk7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIGNsYXNzIE11dGF0aW9uQWNjdW11bGF0b3I7Ci0KLSAgICBjbGFzcyBNdXRhdGlvbkFj
Y3VtdWxhdGlvblJvdXRlciB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE11dGF0aW9u
QWNjdW11bGF0aW9uUm91dGVyKTsKKyAgICAvLyBNdXRhdGlvbkFjY3VtdWxhdG9yIGV4cGVjdHMg
dGhhdCBhbGwgcmVtb3ZhbHMgZnJvbSBhIHBhcmVudCB0YWtlIHBsYWNlIGluIG9yZGVyCisgICAg
Ly8gYW5kIHByZWNlZGUgYW55IGFkZGl0aW9ucy4gSWYgdGhpcyBpcyB2aW9sYXRlZCAoaS5lLiBi
ZWNhdXNlIG9mIGNvZGUgY2hhbmdlcyBlbHNld2hlcmUKKyAgICAvLyBpbiBXZWJDb3JlKSBpdCB3
aWxsIGxpa2VseSByZXN1bHQgaW4gYm90aCAoYSkgQVNTRVJUaW9ucyBmYWlsaW5nLCBhbmQgKGIp
IG11dGF0aW9uIHJlY29yZHMKKyAgICAvLyBiZWluZyBlbnF1ZXVlZCBmb3IgZGVsaXZlcnkgYmVm
b3JlIHRoZSBvdXRlci1tb3N0IHNjb3BlIGNsb3Nlcy4KKyAgICBjbGFzcyBNdXRhdGlvbkFjY3Vt
dWxhdG9yIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTXV0YXRpb25BY2N1bXVsYXRv
cik7CiAgICAgcHVibGljOgotICAgICAgICB+TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIoKTsK
KyAgICAgICAgc3RhdGljIE11dGF0aW9uQWNjdW11bGF0b3IqIGdldE9yQ3JlYXRlKE5vZGUqKTsK
KyAgICAgICAgdm9pZCBleGl0U2NvcGUoKTsKIAotICAgICAgICBzdGF0aWMgTXV0YXRpb25BY2N1
bXVsYXRpb25Sb3V0ZXIqIGluc3RhbmNlKCk7CisgICAgICAgIHZvaWQgY2hpbGRBZGRlZChOb2Rl
Kik7CisgICAgICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKE5vZGUqKTsKKyAgICAgICAgdm9pZCBl
bnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKIAotICAgICAgICB2b2lkIGluY3JlbWVudFNjb3BpbmdM
ZXZlbChOb2RlKik7Ci0gICAgICAgIHZvaWQgZGVjcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqKTsK
KyAgICBwcml2YXRlOgorICAgICAgICBNdXRhdGlvbkFjY3VtdWxhdG9yKFBhc3NSZWZQdHI8Tm9k
ZT4sIFBhc3NPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA+KTsKKyAgICAgICAg
fk11dGF0aW9uQWNjdW11bGF0b3IoKTsKIAotICAgICAgICB2b2lkIGNoaWxkQWRkZWQoTm9kZSog
dGFyZ2V0LCBOb2RlKiBjaGlsZCk7Ci0gICAgICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKE5vZGUq
IHRhcmdldCwgTm9kZSogY2hpbGQpOworICAgICAgICAvLyBGSVhNRTogVGhpcyB3b3VsZCBsaWtl
bHkgYmUgbW9yZSBlZmZpY2llbnQgYXMgYSBWZWN0b3IsIHNpbmNlIGl0IGRvZXNuJ3QKKyAgICAg
ICAgLy8gY29tbW9ubHkgY29udGFpbiBtb3JlIHRoYW4gdHdvIG9yIHRocmVlIGl0ZW1zLgorICAg
ICAgICB0eXBlZGVmIEhhc2hNYXA8Tm9kZSosIE11dGF0aW9uQWNjdW11bGF0b3IqPiBBY2N1bXVs
YXRvck1hcDsKKyAgICAgICAgc3RhdGljIEFjY3VtdWxhdG9yTWFwJiBhY2N1bXVsYXRvck1hcCgp
OwogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIoKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgICAgICBib29sIGlzRW1wdHko
KTsKKyAgICAgICAgYm9vbCBpc0FkZGVkTm9kZUluT3JkZXIoTm9kZSopOworICAgICAgICBib29s
IGlzUmVtb3ZlZE5vZGVJbk9yZGVyKE5vZGUqKTsKKworICAgICAgICBSZWZQdHI8Tm9kZT4gbV90
YXJnZXQ7CisgICAgICAgIHVuc2lnbmVkIG1fc2NvcGluZ0xldmVsOwogCi0gICAgICAgIHR5cGVk
ZWYgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IFNjb3BpbmdMZXZlbE1hcDsKLSAgICAgICAgU2Nv
cGluZ0xldmVsTWFwIG1fc2NvcGluZ0xldmVsczsKLSAgICAgICAgSGFzaE1hcDxOb2RlKiwgT3du
UHRyPE11dGF0aW9uQWNjdW11bGF0b3I+ID4gbV9hY2N1bXVsYXRpb25zOworICAgICAgICBWZWN0
b3I8UmVmUHRyPE5vZGU+ID4gbV9yZW1vdmVkTm9kZXM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8
Tm9kZT4gPiBtX2FkZGVkTm9kZXM7CisgICAgICAgIFJlZlB0cjxOb2RlPiBtX3ByZXZpb3VzU2li
bGluZzsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG1fbmV4dFNpYmxpbmc7CisgICAgICAgIE5vZGUq
IG1fbGFzdEFkZGVkOwogCi0gICAgICAgIHN0YXRpYyBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRl
ciogc19pbnN0YW5jZTsKKyAgICAgICAgT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdy
b3VwPiBtX29ic2VydmVyczsKICAgICB9OwogCi0gICAgTm9kZSogbV90YXJnZXQ7CisgICAgTXV0
YXRpb25BY2N1bXVsYXRvciogbV9hY2N1bXVsYXRvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggNjQxYzBiODkwYjJhZDcx
MzMxMTgyZjNhNmEwMjI1MzhmYTNhNzM1NS4uY2FmNGFjOTM5ODUxNmVkYjVjZmJlMDRjMzYzMWFm
ZjQzNTMyOGMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTMwLDcgKzMw
LDYgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVL
ZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgotI2luY2x1ZGUgIkNoaWxkTGlz
dE11dGF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJET01TZXR0YWJsZVRva2VuTGlzdC5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165188</attachid>
            <date>2012-09-21 14:09:02 -0700</date>
            <delta_ts>2012-09-21 14:10:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97352-20120921140826.patch</filename>
            <type>text/plain</type>
            <size>17414</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjlmYjczNTExMmRhYWUx
ZjQ0MmQ0MmMzMzllZjFkMjUwYThhNDk4ZC4uNTE3MWQ1NDcyZTYwNzMzNzkyMjRiZjI3M2QxZjU0
MGZiYmQzZWRiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA5LTIxICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IGFuZCBvcHRp
bWl6ZSBDaGlsZExpc3RNdXRhdGlvblNjb3BlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NzM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgaXMgb25lIG9mIHRoZSBt
b3N0IGNvbXBsaWNhdGVkIGJpdHMgb2YKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlciBpbXBsZW1l
bnRhdGlvbi4gVGhpcyBwYXRjaCBhaW1zIHRvIHNpbXBsaWZ5IGl0IGZvcgorICAgICAgICBjbGFy
aXR5IGFuZCBpbXByb3ZlIGl0cyBwZXJmb3JtYW5jZSAobW9zdGx5IGJ5IGp1c3QgZG9pbmcgbGVz
cykuCisKKyAgICAgICAgVGhlIGJpZyBjaGFuZ2UgaXMgdG8gcmVtb3ZlIHRoZSBNdXRhdGlvbkFj
Y3VtdWxhdG9yUm91dGVyIGNsYXNzLAorICAgICAgICByZXBsYWNpbmcgaXQgd2l0aCBzdGF0aWMg
bGlmZXRpbWUtbWFuYWdlbWVudCBsb2dpYyBpbgorICAgICAgICBNdXRhdGlvbkFjY3VtdWxhdG9y
ICh3aG9zZSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBhcmUgbm93IGJvdGgKKyAgICAgICAg
cHJpdmF0ZSkuIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgaXMgZXhwZWN0ZWQgdG8gY2FsbCBnZXRP
ckNyZWF0ZSgpIGluCisgICAgICAgIGl0cyBjb25zdHJ1Y3RvciBhbmQgZXhpdFNjb3BlKCkgaW4g
aXRzIGRlc3RydWN0b3IsIGFuZCB0aGUKKyAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRvciBoYW5k
bGVzIHRoZSBzY29waW5nLWxldmVsIGNvdW50aW5nIGFuZCByZWNvcmQKKyAgICAgICAgZW5xdWV1
ZWluZyBpbnRlcm5hbGx5LgorCisgICAgICAgIFRoaXMgZ3JlYXRseSByZWR1Y2VzIHRoZSBudW1i
ZXIgb2YgbGluZXMgb2YgY29kZSwgYW5kIGNvbmRlbnNlcworICAgICAgICB0d28gSGFzaE1hcHMg
aW50byBvbmUuIEl0IGFsc28gcmVkdWNlcyBoYXNoIGxvb2t1cHMsIHdoaWNoIG5vdworICAgICAg
ICBvY2N1ciBvbmx5IG9uIHNjb3BlIGNyZWF0aW9uIGFuZCB3aGVuIHRoZSBzY29waW5nIGxldmVs
IGZvciBhIGdpdmVuCisgICAgICAgIGFjY3VtdWxhdG9yIHJlYWNoZXMgMCAocHJldmlvdXNseSwg
ZWFjaCBjaGlsZEFkZGVkIGFuZCB3aWxsUmVtb3ZlQ2hpbGQKKyAgICAgICAgY2FsbCBjb3VsZCBy
ZXN1bHQgaW4gdHdvIGhhc2ggbG9va3VwcyBlYWNoKS4KKworICAgICAgICBUaGVyZSBhcmUgc29t
ZSBtaW5vciBjaGFuZ2VzIGFzIHdlbGw6IHRoZSBNdXRhdGlvbkFjY3VtdWxhdG9yOjpjbGVhcigp
CisgICAgICAgIG1ldGhvZCBpcyBnb25lLCBhcyBpdCB3YXMgZG9pbmcgbW9yZSB3b3JrIHRoYW4g
bmVjZXNzYXJ5OworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMIGlzIG5vdyB1c2VkIGluc3Rl
YWQgb2YgaGFuZC1yb2xsZWQgc3RhdGljLW1hbmFnZW1lbnQKKyAgICAgICAgY29kZTsgTXV0YXRp
b25BY2N1bXVsYXRvcjo6bV9sYXN0QWRkZWQgaXMgbm8gbG9uZ2VyIGEgUmVmUHRyLCBzaW5jZSBp
dAorICAgICAgICBhbHdheXMgcG9pbnRzIGF0IGEgTm9kZSB0aGF0J3MgYWxyZWFkeSBiZWluZyBy
ZWYnZCBieSB0aGUgYWNjdW11bGF0b3IuCisgICAgICAgIEFsc28gdmFyaW91cyBtaW5vciBzeW50
YWN0aWMgY2xlYW51cHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVo
YXZpb3IuCisKKyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjphY2N1bXVsYXRvck1hcCk6IFJlZHVjZWQgdHdvIG1hcHMgdG8gb25lLCBh
bmQgbWFuYWdlIGl0cyBsaWZldGltZSB3aXRoIERFRklORV9TVEFUSUNfTE9DQUwuCisgICAgICAg
IChXZWJDb3JlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpNdXRhdGlvbkFjY3VtdWxhdG9yKTogUmVt
b3ZlIHVubmVjZXNzYXJ5IGNhbGwgdG8gY2xlYXIoKSAod2hpY2ggaXRzZWxmIGhhcyBiZWVuIHJl
bW92ZWQpLgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRBZGRl
ZCk6IE1pbm9yIFJlZlB0ciB1c2FnZSBpbXByb3ZlbWVudHMuCisgICAgICAgIChXZWJDb3JlOjpN
dXRhdGlvbkFjY3VtdWxhdG9yOjppc1JlbW92ZWROb2RlSW5PcmRlcik6IFNpbXBsaWZ5IFJlZlB0
ciBzeW50YXguCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjp3aWxsUmVt
b3ZlQ2hpbGQpOiBNaW5vciBSZWZQdHIgdXNhZ2UgaW1wcm92ZW1lbnRzLgorICAgICAgICAoV2Vi
Q29yZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKTogUmVwbGFj
ZSBjYWxsIHRvIGNsZWFyKCkgd2l0aCBjbGVhcmluZyBtX2xhc3RBZGRlZCwKKyAgICAgICAgc2lu
Y2UgaXQncyB0aGUgb25seSBiaXQgbm90IGNsZWFyZWQgYnkgdGhlIE11dGF0aW9uUmVjb3JkIGNy
ZWF0aW9uIGNhbGwuIEFsc28gcmVtb3ZlCisgICAgICAgIGlzRW1wdHkgY2hlY2sgYW5kIHJlcGxh
Y2Ugd2l0aCBhc3NlcnRzIG5vdyB0aGF0IGl0J3MgYSBwcml2YXRlIG1ldGhvZC4KKyAgICAgICAg
KFdlYkNvcmU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmlzRW1wdHkpOiBBZGRlZCBtb3JlIGFzc2Vy
dGlvbnMgYWJvdXQgZW1wdGluZXNzLgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25BY2N1bXVs
YXRvcjo6Z2V0T3JDcmVhdGUpOiBSZXBsYWNlcyBoYWxmIG9mIE11dGF0aW9uQWNjdW11bGF0b3JS
b3V0ZXIncyBqb2IuCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpleGl0
U2NvcGUpOiBSZXBsYWNlcyB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgcm91dGVyJ3Mgam9iLCBhbmQg
aGFuZGxlcyB0aGUgbGlmZXRpbWUgb2YgTXV0YXRpb25BY2N1bXVsYXRvcnMuCisgICAgICAgICog
ZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoTXV0YXRpb25BY2N1bXVsYXRvcik6IEV4dHJhY3QgdGhlIGlubmVyIGNsYXNzIHRvIG1ha2Ug
ZXZlcnl0aGluZyBlYXNpZXIgdG8gcmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11
dGF0aW9uU2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOiBTdG9yZSBtX2FjY3VtdWxhdG9y
IHJhdGhlciB0aGFuIG1fdGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRp
b25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOiBkaXR0bworICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6IGRpdHRvCisgICAgICAgIChX
ZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOiBkaXR0bwor
ICAgICAgICAoQ2hpbGRMaXN0TXV0YXRpb25TY29wZSk6CisgICAgICAgIChNdXRhdGlvbkFjY3Vt
dWxhdG9yKTogTW92ZWQgY2xhc3MgZGVjbGFyYXRpb24gaW50byBoZWFkZXIgZmlsZSwgc2luY2UK
KyAgICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSdzIGlubGluZSBtZXRob2RzIG5lZWQgdG8g
Y2FsbCB0aGVzZSBtZXRob2RzLgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOiBSZW1v
dmUgdW51c2VkIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAjaW5jbHVkZS4KKwogMjAxMi0wOS0x
OSAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBSZW1v
dmUgY3VzdG9tIHBhaW50aW5nIGNvZGUgZm9yIHNlYXJjaENhbmNlbApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCmluZGV4IGY0YTJkYTA0YWI2MTU4MTNm
ODY0YWUxMzU2ZjRlYWE0ZGIwYmZlNDkuLjM1NDhjZDljNjFjZjJkMDU0ODMxZDc0Mjk4MjA1MTQz
ZjE4MmZlZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlv
blNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5jcHAKQEAgLTQyLDYwICs0Miw0MCBAQAogI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIE11dGF0
aW9uQWNjdW11bGF0b3IgZXhwZWN0cyB0aGF0IGFsbCByZW1vdmFscyBmcm9tIGEgcGFyZW50IHRh
a2UgcGxhY2UgaW4gb3JkZXIKLS8vIGFuZCBwcmVjZWRlIGFueSBhZGRpdGlvbnMuIElmIHRoaXMg
aXMgdmlvbGF0ZWQgKGkuZS4gYmVjYXVzZSBvZiBjb2RlIGNoYW5nZXMgZWxzZXdoZXJlCi0vLyBp
biBXZWJDb3JlKSBpdCB3aWxsIGxpa2VseSByZXN1bHQgaW4gYm90aCAoYSkgQVNTRVJUaW9ucyBm
YWlsaW5nLCBhbmQgKGIpIG11dGF0aW9uIHJlY29yZHMKLS8vIGJlaW5nIGVucXVldWVkIGZvciBk
ZWxpdmVyeSBiZWZvcmUgdGhlIG91dGVyLW1vc3Qgc2NvcGUgY2xvc2VzLgotY2xhc3MgQ2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvciB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoTXV0YXRpb25BY2N1bXVsYXRvcik7Ci1wdWJsaWM6Ci0gICAgTXV0YXRpb25BY2N1
bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRl
cmVzdEdyb3VwPiBvYnNlcnZlcnMpOwotICAgIH5NdXRhdGlvbkFjY3VtdWxhdG9yKCk7Ci0KLSAg
ICB2b2lkIGNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPik7Ci0gICAgdm9pZCB3aWxsUmVtb3Zl
Q2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7Ci0gICAgdm9pZCBlbnF1ZXVlTXV0YXRpb25SZWNvcmQo
KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgYm9vbCBpc0VtcHR5KCk7Ci0g
ICAgYm9vbCBpc0FkZGVkTm9kZUluT3JkZXIoTm9kZSopOwotICAgIGJvb2wgaXNSZW1vdmVkTm9k
ZUluT3JkZXIoTm9kZSopOwotICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKLQotICAgIFZlY3Rv
cjxSZWZQdHI8Tm9kZT4gPiBtX3JlbW92ZWROb2RlczsKLSAgICBWZWN0b3I8UmVmUHRyPE5vZGU+
ID4gbV9hZGRlZE5vZGVzOwotICAgIFJlZlB0cjxOb2RlPiBtX3ByZXZpb3VzU2libGluZzsKLSAg
ICBSZWZQdHI8Tm9kZT4gbV9uZXh0U2libGluZzsKLSAgICBSZWZQdHI8Tm9kZT4gbV9sYXN0QWRk
ZWQ7Ci0KLSAgICBPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA+IG1fb2JzZXJ2
ZXJzOwotfTsKLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6
TXV0YXRpb25BY2N1bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgUGFzc093blB0cjxN
dXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4gb2JzZXJ2ZXJzKQordHlwZWRlZiBIYXNoTWFw
PE5vZGUqLCBNdXRhdGlvbkFjY3VtdWxhdG9yKj4gQWNjdW11bGF0b3JNYXA7CitzdGF0aWMgQWNj
dW11bGF0b3JNYXAmIGFjY3VtdWxhdG9yTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEFjY3VtdWxhdG9yTWFwLCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFwOworfQorCitNdXRhdGlv
bkFjY3VtdWxhdG9yOjpNdXRhdGlvbkFjY3VtdWxhdG9yKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0
LCBQYXNzT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiBvYnNlcnZlcnMpCiAg
ICAgOiBtX3RhcmdldCh0YXJnZXQpCisgICAgLCBtX3Njb3BpbmdMZXZlbCgxKQorICAgICwgbV9s
YXN0QWRkZWQoMCkKICAgICAsIG1fb2JzZXJ2ZXJzKG9ic2VydmVycykKIHsKLSAgICBjbGVhcigp
OwogfQogCi1DaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjp+TXV0
YXRpb25BY2N1bXVsYXRvcigpCitNdXRhdGlvbkFjY3VtdWxhdG9yOjp+TXV0YXRpb25BY2N1bXVs
YXRvcigpCiB7CiAgICAgQVNTRVJUKGlzRW1wdHkoKSk7CiB9CiAKLWlubGluZSBib29sIENoaWxk
TGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmlzQWRkZWROb2RlSW5PcmRl
cihOb2RlKiBjaGlsZCkKK2lubGluZSBib29sIE11dGF0aW9uQWNjdW11bGF0b3I6OmlzQWRkZWRO
b2RlSW5PcmRlcihOb2RlKiBjaGlsZCkKIHsKICAgICByZXR1cm4gaXNFbXB0eSgpIHx8IChtX2xh
c3RBZGRlZCA9PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgJiYgbV9uZXh0U2libGluZyA9PSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSk7CiB9CiAKLXZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6
TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxk
KQordm9pZCBNdXRhdGlvbkFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKFBhc3NSZWZQdHI8Tm9kZT4g
cHJwQ2hpbGQpCiB7CiAgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7CiAKKyAgICBB
U1NFUlQoaGFzT2JzZXJ2ZXJzKCkpOwogICAgIEFTU0VSVChpc0FkZGVkTm9kZUluT3JkZXIoY2hp
bGQuZ2V0KCkpKTsKICAgICBpZiAoIWlzQWRkZWROb2RlSW5PcmRlcihjaGlsZC5nZXQoKSkpCiAg
ICAgICAgIGVucXVldWVNdXRhdGlvblJlY29yZCgpOwpAQCAtMTA1LDIxICs4NSwyMSBAQCB2b2lk
IENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmNoaWxkQWRkZWQo
UGFzc1JlZlB0cjxOb2RlPiBwcgogICAgICAgICBtX25leHRTaWJsaW5nID0gY2hpbGQtPm5leHRT
aWJsaW5nKCk7CiAgICAgfQogCi0gICAgbV9hZGRlZE5vZGVzLmFwcGVuZChjaGlsZCk7Ci0gICAg
bV9sYXN0QWRkZWQgPSBjaGlsZDsKKyAgICBtX2xhc3RBZGRlZCA9IGNoaWxkLmdldCgpOworICAg
IG1fYWRkZWROb2Rlcy5hcHBlbmQoY2hpbGQucmVsZWFzZSgpKTsKIH0KIAotaW5saW5lIGJvb2wg
Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6aXNSZW1vdmVkTm9k
ZUluT3JkZXIoTm9kZSogY2hpbGQpCitpbmxpbmUgYm9vbCBNdXRhdGlvbkFjY3VtdWxhdG9yOjpp
c1JlbW92ZWROb2RlSW5PcmRlcihOb2RlKiBjaGlsZCkKIHsKLSAgICByZXR1cm4gaXNFbXB0eSgp
IHx8IG1fbmV4dFNpYmxpbmcuZ2V0KCkgPT0gY2hpbGQ7CisgICAgcmV0dXJuIGlzRW1wdHkoKSB8
fCBtX25leHRTaWJsaW5nID09IGNoaWxkOwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2Nv
cGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OndpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+
IHBycENoaWxkKQordm9pZCBNdXRhdGlvbkFjY3VtdWxhdG9yOjp3aWxsUmVtb3ZlQ2hpbGQoUGFz
c1JlZlB0cjxOb2RlPiBwcnBDaGlsZCkKIHsKICAgICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBwcnBD
aGlsZDsKIAorICAgIEFTU0VSVChoYXNPYnNlcnZlcnMoKSk7CiAgICAgQVNTRVJUKG1fYWRkZWRO
b2Rlcy5pc0VtcHR5KCkgJiYgaXNSZW1vdmVkTm9kZUluT3JkZXIoY2hpbGQuZ2V0KCkpKTsKLQog
ICAgIGlmICghbV9hZGRlZE5vZGVzLmlzRW1wdHkoKSB8fCAhaXNSZW1vdmVkTm9kZUluT3JkZXIo
Y2hpbGQuZ2V0KCkpKQogICAgICAgICBlbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKIApAQCAtMTMw
LDExNCArMTEwLDUzIEBAIHZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1
bXVsYXRvcjo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kCiAgICAgfSBlbHNlCiAgICAg
ICAgIG1fbmV4dFNpYmxpbmcgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKIAotICAgIG1fcmVtb3Zl
ZE5vZGVzLmFwcGVuZChjaGlsZCk7CisgICAgbV9yZW1vdmVkTm9kZXMuYXBwZW5kKGNoaWxkLnJl
bGVhc2UoKSk7CiB9CiAKLXZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1
bXVsYXRvcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCkKK3ZvaWQgTXV0YXRpb25BY2N1bXVsYXRv
cjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCkKIHsKLSAgICBpZiAoaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVycy0+
ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGlsZExpc3QoCi0g
ICAgICAgICAgICBtX3RhcmdldCwgU3RhdGljTm9kZUxpc3Q6OmFkb3B0KG1fYWRkZWROb2Rlcyks
IFN0YXRpY05vZGVMaXN0OjphZG9wdChtX3JlbW92ZWROb2RlcyksIG1fcHJldmlvdXNTaWJsaW5n
LnJlbGVhc2UoKSwgbV9uZXh0U2libGluZy5yZWxlYXNlKCkpKTsKLSAgICBjbGVhcigpOwotfQor
ICAgIEFTU0VSVChoYXNPYnNlcnZlcnMoKSk7CisgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwogCi12
b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmNsZWFyKCkK
LXsKLSAgICBpZiAoIW1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9yZW1vdmVk
Tm9kZXMuY2xlYXIoKTsKLSAgICBpZiAoIW1fYWRkZWROb2Rlcy5pc0VtcHR5KCkpCi0gICAgICAg
IG1fYWRkZWROb2Rlcy5jbGVhcigpOwotICAgIG1fcHJldmlvdXNTaWJsaW5nID0gMDsKLSAgICBt
X25leHRTaWJsaW5nID0gMDsKKyAgICBSZWZQdHI8Tm9kZUxpc3Q+IGFkZGVkTm9kZXMgPSBTdGF0
aWNOb2RlTGlzdDo6YWRvcHQobV9hZGRlZE5vZGVzKTsKKyAgICBSZWZQdHI8Tm9kZUxpc3Q+IHJl
bW92ZWROb2RlcyA9IFN0YXRpY05vZGVMaXN0OjphZG9wdChtX3JlbW92ZWROb2Rlcyk7CisgICAg
UmVmUHRyPE11dGF0aW9uUmVjb3JkPiByZWNvcmQgPSBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hp
bGRMaXN0KG1fdGFyZ2V0LCBhZGRlZE5vZGVzLnJlbGVhc2UoKSwgcmVtb3ZlZE5vZGVzLnJlbGVh
c2UoKSwgbV9wcmV2aW91c1NpYmxpbmcucmVsZWFzZSgpLCBtX25leHRTaWJsaW5nLnJlbGVhc2Uo
KSk7CisgICAgbV9vYnNlcnZlcnMtPmVucXVldWVNdXRhdGlvblJlY29yZChyZWNvcmQucmVsZWFz
ZSgpKTsKICAgICBtX2xhc3RBZGRlZCA9IDA7CisgICAgQVNTRVJUKGlzRW1wdHkoKSk7CiB9CiAK
LWJvb2wgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6aXNFbXB0
eSgpCi17Ci0gICAgcmV0dXJuIG1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSAmJiBtX2FkZGVkTm9k
ZXMuaXNFbXB0eSgpOwotfQotCi1DaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3Vt
dWxhdGlvblJvdXRlciogQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRp
b25Sb3V0ZXI6OnNfaW5zdGFuY2UgPSAwOwotCi1DaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRh
dGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIoKQotewot
fQotCi1DaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6
fk11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKCkKLXsKLSAgICBBU1NFUlQobV9zY29waW5nTGV2
ZWxzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fYWNjdW11bGF0aW9ucy5pc0VtcHR5KCkpOwot
fQotCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91
dGVyOjppbml0aWFsaXplKCkKLXsKLSAgICBBU1NFUlQoIXNfaW5zdGFuY2UpOwotICAgIHNfaW5z
dGFuY2UgPSBhZG9wdFB0cihuZXcgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1
bXVsYXRpb25Sb3V0ZXIpLmxlYWtQdHIoKTsKLX0KLQotCi1DaGlsZExpc3RNdXRhdGlvblNjb3Bl
OjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciogQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0
YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCkKLXsKLSAgICBpZiAoIXNfaW5zdGFu
Y2UpCi0gICAgICAgIGluaXRpYWxpemUoKTsKLQotICAgIHJldHVybiBzX2luc3RhbmNlOwotfQot
Ci12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
OjpjaGlsZEFkZGVkKE5vZGUqIHRhcmdldCwgTm9kZSogY2hpbGQpCi17Ci0gICAgSGFzaE1hcDxO
b2RlKiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I+
ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOwotICAgIEFT
U0VSVChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9h
Y2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGl0ZXItPnNlY29uZC0+Y2hpbGRBZGRlZChjaGlsZCk7Ci19Ci0KLXZvaWQgQ2hpbGRMaXN0
TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxSZW1vdmVDaGls
ZChOb2RlKiB0YXJnZXQsIE5vZGUqIGNoaWxkKQorYm9vbCBNdXRhdGlvbkFjY3VtdWxhdG9yOjpp
c0VtcHR5KCkKIHsKLSAgICBIYXNoTWFwPE5vZGUqLCBPd25QdHI8Q2hpbGRMaXN0TXV0YXRpb25T
Y29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcj4gPjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11bGF0
aW9ucy5maW5kKHRhcmdldCk7Ci0gICAgQVNTRVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVu
ZCgpKTsKLSAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnNl
Y29uZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXRlci0+c2Vjb25kLT53aWxsUmVtb3ZlQ2hp
bGQoY2hpbGQpOworICAgIGJvb2wgcmVzdWx0ID0gbV9yZW1vdmVkTm9kZXMuaXNFbXB0eSgpICYm
IG1fYWRkZWROb2Rlcy5pc0VtcHR5KCk7CisjaWZuZGVmIE5ERUJVRworICAgIGlmIChyZXN1bHQp
IHsKKyAgICAgICAgQVNTRVJUKCFtX3ByZXZpb3VzU2libGluZyk7CisgICAgICAgIEFTU0VSVCgh
bV9uZXh0U2libGluZyk7CisgICAgICAgIEFTU0VSVCghbV9sYXN0QWRkZWQpOworICAgIH0KKyNl
bmRpZgorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmluY3JlbWVudFNjb3BpbmdMZXZlbChOb2Rl
KiB0YXJnZXQpCitNdXRhdGlvbkFjY3VtdWxhdG9yKiBNdXRhdGlvbkFjY3VtdWxhdG9yOjpnZXRP
ckNyZWF0ZShOb2RlKiB0YXJnZXQpCiB7Ci0gICAgU2NvcGluZ0xldmVsTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gbV9zY29waW5nTGV2ZWxzLmFkZCh0YXJnZXQsIDEpOwotICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpIHsKLSAgICAgICAgKysocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKE93blB0cjxNdXRhdGlvbk9ic2VydmVySW50
ZXJlc3RHcm91cD4gb2JzZXJ2ZXJzID0gTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmNy
ZWF0ZUZvckNoaWxkTGlzdE11dGF0aW9uKHRhcmdldCkpCi0gICAgICAgIG1fYWNjdW11bGF0aW9u
cy5zZXQodGFyZ2V0LCBhZG9wdFB0cihuZXcgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRp
b25BY2N1bXVsYXRvcih0YXJnZXQsIG9ic2VydmVycy5yZWxlYXNlKCkpKSk7Ci0jaWZuZGVmIE5E
RUJVRworICAgIEFjY3VtdWxhdG9yTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYWNjdW11bGF0b3JN
YXAoKS5hZGQodGFyZ2V0LCAwKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAg
ICArKyhyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+bV9zY29waW5nTGV2ZWwpOwogICAgIGVsc2UK
LSAgICAgICAgbV9hY2N1bXVsYXRpb25zLnNldCh0YXJnZXQsIG51bGxwdHIpOwotI2VuZGlmCisg
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbmV3IE11dGF0aW9uQWNjdW11bGF0b3Io
dGFyZ2V0LCBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6Y3JlYXRlRm9yQ2hpbGRMaXN0
TXV0YXRpb24odGFyZ2V0KSk7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwog
fQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91
dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQordm9pZCBNdXRhdGlvbkFj
Y3VtdWxhdG9yOjpleGl0U2NvcGUoKQogewotICAgIFNjb3BpbmdMZXZlbE1hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fc2NvcGluZ0xldmVscy5maW5kKHRhcmdldCk7Ci0gICAgQVNTRVJUKGl0ZXIgIT0g
bV9zY29waW5nTGV2ZWxzLmVuZCgpKTsKLQotICAgIC0tKGl0ZXItPnNlY29uZCk7Ci0gICAgaWYg
KGl0ZXItPnNlY29uZCA+IDApCisgICAgaWYgKC0tbV9zY29waW5nTGV2ZWwgPiAwKQogICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3Njb3BpbmdMZXZlbHMucmVtb3ZlKGl0ZXIpOwotCi0gICAgT3du
UHRyPE11dGF0aW9uQWNjdW11bGF0b3I+IHJlY29yZChtX2FjY3VtdWxhdGlvbnMudGFrZSh0YXJn
ZXQpKTsKLSAgICBpZiAocmVjb3JkKQotICAgICAgICByZWNvcmQtPmVucXVldWVNdXRhdGlvblJl
Y29yZCgpOworICAgIGlmIChoYXNPYnNlcnZlcnMoKSAmJiAhaXNFbXB0eSgpKQorICAgICAgICBl
bnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKKyAgICBhY2N1bXVsYXRvck1hcCgpLnJlbW92ZShtX3Rh
cmdldC5nZXQoKSk7CisgICAgZGVsZXRlIHRoaXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3Bl
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oCmluZGV4IGUw
NjI0ZWY1ZGIzYzgzYTdjYjdkYzI5MTYzYjQzNWI0ZGI5MDJlNmMuLjllNjAwMDk5ZjE0ZDU4Y2Yw
MTdjYTU0Nzc2MzIxOTc0NDVjOGZiMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9D
aGlsZExpc3RNdXRhdGlvblNjb3BlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlz
dE11dGF0aW9uU2NvcGUuaApAQCAtNDIsNjIgKzQyLDc2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA7CisKKy8vIE11dGF0aW9u
QWNjdW11bGF0b3IgaXMgbm90IG1lYW50IHRvIGJlIHVzZWQgZGlyZWN0bHk7IENoaWxkTGlzdE11
dGF0aW9uU2NvcGUgaXMgdGhlIHB1YmxpYyBpbnRlcmZhY2UuCisvLworLy8gTXV0YXRpb25BY2N1
bXVsYXRvciBleHBlY3RzIHRoYXQgYWxsIHJlbW92YWxzIGZyb20gYSBwYXJlbnQgdGFrZSBwbGFj
ZSBpbiBvcmRlcgorLy8gYW5kIHByZWNlZGUgYW55IGFkZGl0aW9ucy4gSWYgdGhpcyBpcyB2aW9s
YXRlZCAoaS5lLiBiZWNhdXNlIG9mIGNvZGUgY2hhbmdlcyBlbHNld2hlcmUKKy8vIGluIFdlYkNv
cmUpIGl0IHdpbGwgbGlrZWx5IHJlc3VsdCBpbiBib3RoIChhKSBBU1NFUlRpb25zIGZhaWxpbmcs
IGFuZCAoYikgbXV0YXRpb24gcmVjb3JkcworLy8gYmVpbmcgZW5xdWV1ZWQgZm9yIGRlbGl2ZXJ5
IGJlZm9yZSB0aGUgb3V0ZXItbW9zdCBzY29wZSBjbG9zZXMuCitjbGFzcyBNdXRhdGlvbkFjY3Vt
dWxhdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNdXRhdGlvbkFjY3VtdWxhdG9yKTsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgTXV0YXRpb25BY2N1bXVsYXRvciogZ2V0T3JDcmVhdGUoTm9k
ZSopOworICAgIHZvaWQgZXhpdFNjb3BlKCk7CisKKyAgICB2b2lkIGNoaWxkQWRkZWQoUGFzc1Jl
ZlB0cjxOb2RlPik7CisgICAgdm9pZCB3aWxsUmVtb3ZlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7
CisKKyAgICBib29sIGhhc09ic2VydmVycygpIGNvbnN0IHsgcmV0dXJuIG1fb2JzZXJ2ZXJzOyB9
CisKK3ByaXZhdGU6CisgICAgTXV0YXRpb25BY2N1bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+LCBQ
YXNzT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPik7CisgICAgfk11dGF0aW9u
QWNjdW11bGF0b3IoKTsKKworICAgIHZvaWQgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CisgICAg
Ym9vbCBpc0VtcHR5KCk7CisgICAgYm9vbCBpc0FkZGVkTm9kZUluT3JkZXIoTm9kZSopOworICAg
IGJvb2wgaXNSZW1vdmVkTm9kZUluT3JkZXIoTm9kZSopOworCisgICAgUmVmUHRyPE5vZGU+IG1f
dGFyZ2V0OworICAgIHVuc2lnbmVkIG1fc2NvcGluZ0xldmVsOworCisgICAgVmVjdG9yPFJlZlB0
cjxOb2RlPiA+IG1fcmVtb3ZlZE5vZGVzOworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBtX2Fk
ZGVkTm9kZXM7CisgICAgUmVmUHRyPE5vZGU+IG1fcHJldmlvdXNTaWJsaW5nOworICAgIFJlZlB0
cjxOb2RlPiBtX25leHRTaWJsaW5nOworICAgIE5vZGUqIG1fbGFzdEFkZGVkOworCisgICAgT3du
UHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiBtX29ic2VydmVyczsKK307CisKIGNs
YXNzIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENo
aWxkTGlzdE11dGF0aW9uU2NvcGUpOwogcHVibGljOgogICAgIGV4cGxpY2l0IENoaWxkTGlzdE11
dGF0aW9uU2NvcGUoTm9kZSogdGFyZ2V0KQotICAgICAgICA6IG1fdGFyZ2V0KHRhcmdldC0+ZG9j
dW1lbnQoKS0+aGFzTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoTXV0YXRpb25PYnNlcnZlcjo6Q2hp
bGRMaXN0KSA/IHRhcmdldCA6IDApCisgICAgICAgIDogbV9hY2N1bXVsYXRvcigwKQogICAgIHsK
LSAgICAgICAgaWYgKG1fdGFyZ2V0KQotICAgICAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRpb25S
b3V0ZXI6Omluc3RhbmNlKCktPmluY3JlbWVudFNjb3BpbmdMZXZlbChtX3RhcmdldCk7CisgICAg
ICAgIGlmICh0YXJnZXQtPmRvY3VtZW50KCktPmhhc011dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKE11
dGF0aW9uT2JzZXJ2ZXI6OkNoaWxkTGlzdCkpCisgICAgICAgICAgICBtX2FjY3VtdWxhdG9yID0g
TXV0YXRpb25BY2N1bXVsYXRvcjo6Z2V0T3JDcmVhdGUodGFyZ2V0KTsKICAgICB9CiAKICAgICB+
Q2hpbGRMaXN0TXV0YXRpb25TY29wZSgpCiAgICAgewotICAgICAgICBpZiAobV90YXJnZXQpCi0g
ICAgICAgICAgICBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5zdGFuY2UoKS0+ZGVjcmVt
ZW50U2NvcGluZ0xldmVsKG1fdGFyZ2V0KTsKKyAgICAgICAgaWYgKG1fYWNjdW11bGF0b3IpCisg
ICAgICAgICAgICBtX2FjY3VtdWxhdG9yLT5leGl0U2NvcGUoKTsKICAgICB9CiAKICAgICB2b2lk
IGNoaWxkQWRkZWQoTm9kZSogY2hpbGQpCiAgICAgewotICAgICAgICBpZiAobV90YXJnZXQpCi0g
ICAgICAgICAgICBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5zdGFuY2UoKS0+Y2hpbGRB
ZGRlZChtX3RhcmdldCwgY2hpbGQpOworICAgICAgICBpZiAobV9hY2N1bXVsYXRvciAmJiBtX2Fj
Y3VtdWxhdG9yLT5oYXNPYnNlcnZlcnMoKSkKKyAgICAgICAgICAgIG1fYWNjdW11bGF0b3ItPmNo
aWxkQWRkZWQoY2hpbGQpOwogICAgIH0KIAogICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKE5vZGUq
IGNoaWxkKQogICAgIHsKLSAgICAgICAgaWYgKG1fdGFyZ2V0KQotICAgICAgICAgICAgTXV0YXRp
b25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPndpbGxSZW1vdmVDaGlsZChtX3Rhcmdl
dCwgY2hpbGQpOworICAgICAgICBpZiAobV9hY2N1bXVsYXRvciAmJiBtX2FjY3VtdWxhdG9yLT5o
YXNPYnNlcnZlcnMoKSkKKyAgICAgICAgICAgIG1fYWNjdW11bGF0b3ItPndpbGxSZW1vdmVDaGls
ZChjaGlsZCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIGNsYXNzIE11dGF0aW9uQWNjdW11bGF0
b3I7Ci0KLSAgICBjbGFzcyBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciB7Ci0gICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKTsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIH5NdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcigpOwotCi0gICAgICAgIHN0
YXRpYyBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciogaW5zdGFuY2UoKTsKLQotICAgICAgICB2
b2lkIGluY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKik7Ci0gICAgICAgIHZvaWQgZGVjcmVtZW50
U2NvcGluZ0xldmVsKE5vZGUqKTsKLQotICAgICAgICB2b2lkIGNoaWxkQWRkZWQoTm9kZSogdGFy
Z2V0LCBOb2RlKiBjaGlsZCk7Ci0gICAgICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKE5vZGUqIHRh
cmdldCwgTm9kZSogY2hpbGQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTXV0YXRpb25BY2N1
bXVsYXRpb25Sb3V0ZXIoKTsKLSAgICAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotCi0g
ICAgICAgIHR5cGVkZWYgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IFNjb3BpbmdMZXZlbE1hcDsK
LSAgICAgICAgU2NvcGluZ0xldmVsTWFwIG1fc2NvcGluZ0xldmVsczsKLSAgICAgICAgSGFzaE1h
cDxOb2RlKiwgT3duUHRyPE11dGF0aW9uQWNjdW11bGF0b3I+ID4gbV9hY2N1bXVsYXRpb25zOwot
Ci0gICAgICAgIHN0YXRpYyBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciogc19pbnN0YW5jZTsK
LSAgICB9OwotCi0gICAgTm9kZSogbV90YXJnZXQ7CisgICAgTXV0YXRpb25BY2N1bXVsYXRvciog
bV9hY2N1bXVsYXRvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudC5jcHAKaW5kZXggNjQxYzBiODkwYjJhZDcxMzMxMTgyZjNhNmEwMjI1Mzhm
YTNhNzM1NS4uY2FmNGFjOTM5ODUxNmVkYjVjZmJlMDRjMzYzMWFmZjQzNTMyOGMzZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJD
U1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1
ZGUgIkNTU1ZhbHVlUG9vbC5oIgotI2luY2x1ZGUgIkNoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCIK
ICNpbmNsdWRlICJET01TZXR0YWJsZVRva2VuTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJh
Z21lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165189</attachid>
            <date>2012-09-21 14:10:10 -0700</date>
            <delta_ts>2012-09-21 15:40:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97352-20120921140934.patch</filename>
            <type>text/plain</type>
            <size>17406</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjlmYjczNTExMmRhYWUx
ZjQ0MmQ0MmMzMzllZjFkMjUwYThhNDk4ZC4uNzI2M2ZlZDZhMGMzM2MwYTE4ZmNhZGZjYWNjYjNk
ZTYyMTZlNjZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA5LTIxICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IGFuZCBvcHRp
bWl6ZSBDaGlsZExpc3RNdXRhdGlvblNjb3BlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NzM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgaXMgb25lIG9mIHRoZSBt
b3N0IGNvbXBsaWNhdGVkIGJpdHMgb2YKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlciBpbXBsZW1l
bnRhdGlvbi4gVGhpcyBwYXRjaCBhaW1zIHRvIHNpbXBsaWZ5IGl0IGZvcgorICAgICAgICBjbGFy
aXR5IGFuZCBpbXByb3ZlIGl0cyBwZXJmb3JtYW5jZSAobW9zdGx5IGJ5IGp1c3QgZG9pbmcgbGVz
cykuCisKKyAgICAgICAgVGhlIGJpZyBjaGFuZ2UgaXMgdG8gcmVtb3ZlIHRoZSBNdXRhdGlvbkFj
Y3VtdWxhdG9yUm91dGVyIGNsYXNzLAorICAgICAgICByZXBsYWNpbmcgaXQgd2l0aCBzdGF0aWMg
bGlmZXRpbWUtbWFuYWdlbWVudCBsb2dpYyBpbgorICAgICAgICBNdXRhdGlvbkFjY3VtdWxhdG9y
ICh3aG9zZSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBhcmUgbm93IGJvdGgKKyAgICAgICAg
cHJpdmF0ZSkuIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgaXMgZXhwZWN0ZWQgdG8gY2FsbCBnZXRP
ckNyZWF0ZSgpIGluCisgICAgICAgIGl0cyBjb25zdHJ1Y3RvciBhbmQgZXhpdFNjb3BlKCkgaW4g
aXRzIGRlc3RydWN0b3IsIGFuZCB0aGUKKyAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRvciBoYW5k
bGVzIHRoZSBzY29waW5nLWxldmVsIGNvdW50aW5nIGFuZCByZWNvcmQKKyAgICAgICAgZW5xdWV1
ZWluZyBpbnRlcm5hbGx5LgorCisgICAgICAgIFRoaXMgZ3JlYXRseSByZWR1Y2VzIHRoZSBudW1i
ZXIgb2YgbGluZXMgb2YgY29kZSwgYW5kIGNvbmRlbnNlcworICAgICAgICB0d28gSGFzaE1hcHMg
aW50byBvbmUuIEl0IGFsc28gcmVkdWNlcyBoYXNoIGxvb2t1cHMsIHdoaWNoIG5vdworICAgICAg
ICBvY2N1ciBvbmx5IG9uIHNjb3BlIGNyZWF0aW9uIGFuZCB3aGVuIHRoZSBzY29waW5nIGxldmVs
IGZvciBhIGdpdmVuCisgICAgICAgIGFjY3VtdWxhdG9yIHJlYWNoZXMgMCAocHJldmlvdXNseSwg
ZWFjaCBjaGlsZEFkZGVkIGFuZCB3aWxsUmVtb3ZlQ2hpbGQKKyAgICAgICAgY2FsbCBjb3VsZCBy
ZXN1bHQgaW4gdHdvIGhhc2ggbG9va3VwcyBlYWNoKS4KKworICAgICAgICBUaGVyZSBhcmUgc29t
ZSBtaW5vciBjaGFuZ2VzIGFzIHdlbGw6IHRoZSBNdXRhdGlvbkFjY3VtdWxhdG9yOjpjbGVhcigp
CisgICAgICAgIG1ldGhvZCBpcyBnb25lLCBhcyBpdCB3YXMgZG9pbmcgbW9yZSB3b3JrIHRoYW4g
bmVjZXNzYXJ5OworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMIGlzIG5vdyB1c2VkIGluc3Rl
YWQgb2YgaGFuZC1yb2xsZWQgc3RhdGljLW1hbmFnZW1lbnQKKyAgICAgICAgY29kZTsgTXV0YXRp
b25BY2N1bXVsYXRvcjo6bV9sYXN0QWRkZWQgaXMgbm8gbG9uZ2VyIGEgUmVmUHRyLCBzaW5jZSBp
dAorICAgICAgICBhbHdheXMgcG9pbnRzIGF0IGEgTm9kZSB0aGF0J3MgYWxyZWFkeSBiZWluZyBy
ZWYnZCBieSB0aGUgYWNjdW11bGF0b3IuCisgICAgICAgIEFsc28gdmFyaW91cyBtaW5vciBzeW50
YWN0aWMgY2xlYW51cHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVo
YXZpb3IuCisKKyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpNdXRhdGlvbkFjY3VtdWxhdG9yKTog
UmVtb3ZlIHVubmVjZXNzYXJ5IGNhbGwgdG8gY2xlYXIoKSAod2hpY2ggaXRzZWxmIGhhcyBiZWVu
IHJlbW92ZWQpLgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRB
ZGRlZCk6IE1pbm9yIFJlZlB0ciB1c2FnZSBpbXByb3ZlbWVudHMuCisgICAgICAgIChXZWJDb3Jl
OjpNdXRhdGlvbkFjY3VtdWxhdG9yOjppc1JlbW92ZWROb2RlSW5PcmRlcik6IFNpbXBsaWZ5IFJl
ZlB0ciBzeW50YXguCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjp3aWxs
UmVtb3ZlQ2hpbGQpOiBNaW5vciBSZWZQdHIgdXNhZ2UgaW1wcm92ZW1lbnRzLgorICAgICAgICAo
V2ViQ29yZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKTogUmVw
bGFjZSBjYWxsIHRvIGNsZWFyKCkgd2l0aCBjbGVhcmluZyBtX2xhc3RBZGRlZCwKKyAgICAgICAg
c2luY2UgaXQncyB0aGUgb25seSBiaXQgbm90IGNsZWFyZWQgYnkgdGhlIE11dGF0aW9uUmVjb3Jk
IGNyZWF0aW9uIGNhbGwuIEFsc28gcmVtb3ZlCisgICAgICAgIGlzRW1wdHkgY2hlY2sgYW5kIHJl
cGxhY2Ugd2l0aCBhc3NlcnRzIG5vdyB0aGF0IGl0J3MgYSBwcml2YXRlIG1ldGhvZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmlzRW1wdHkpOiBBZGRlZCBtb3JlIGFz
c2VydGlvbnMgYWJvdXQgZW1wdGluZXNzLgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11bGF0b3JN
YXApOiBSZWR1Y2VkIHR3byBtYXBzIHRvIG9uZSwgYW5kIG1hbmFnZSBpdHMgbGlmZXRpbWUgd2l0
aCBERUZJTkVfU1RBVElDX0xPQ0FMLgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25BY2N1bXVs
YXRvcjo6Z2V0T3JDcmVhdGUpOiBSZXBsYWNlcyBoYWxmIG9mIE11dGF0aW9uQWNjdW11bGF0b3JS
b3V0ZXIncyBqb2IuCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpleGl0
U2NvcGUpOiBSZXBsYWNlcyB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgcm91dGVyJ3Mgam9iLCBhbmQg
aGFuZGxlcyB0aGUgbGlmZXRpbWUgb2YgTXV0YXRpb25BY2N1bXVsYXRvcnMuCisgICAgICAgICog
ZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoTXV0YXRpb25BY2N1bXVsYXRvcik6IEV4dHJhY3QgdGhlIGlubmVyIGNsYXNzIHRvIG1ha2Ug
ZXZlcnl0aGluZyBlYXNpZXIgdG8gcmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11
dGF0aW9uU2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOiBTdG9yZSBtX2FjY3VtdWxhdG9y
IHJhdGhlciB0aGFuIG1fdGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRp
b25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOiBkaXR0bworICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6IGRpdHRvCisgICAgICAgIChX
ZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOiBkaXR0bwor
ICAgICAgICAoQ2hpbGRMaXN0TXV0YXRpb25TY29wZSk6CisgICAgICAgIChNdXRhdGlvbkFjY3Vt
dWxhdG9yKTogTW92ZWQgY2xhc3MgZGVjbGFyYXRpb24gaW50byBoZWFkZXIgZmlsZSwgc2luY2UK
KyAgICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSdzIGlubGluZSBtZXRob2RzIG5lZWQgdG8g
Y2FsbCB0aGVzZSBtZXRob2RzLgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOiBSZW1v
dmUgdW51c2VkIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAjaW5jbHVkZS4KKwogMjAxMi0wOS0x
OSAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBSZW1v
dmUgY3VzdG9tIHBhaW50aW5nIGNvZGUgZm9yIHNlYXJjaENhbmNlbApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCmluZGV4IGY0YTJkYTA0YWI2MTU4MTNm
ODY0YWUxMzU2ZjRlYWE0ZGIwYmZlNDkuLjFhYWJhMTdjZDEwOWM3MDYzNjliYmUwODZmNWVmMjky
OWZjMWYwMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlv
blNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5jcHAKQEAgLTQyLDYwICs0MiwzMyBAQAogI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIE11dGF0
aW9uQWNjdW11bGF0b3IgZXhwZWN0cyB0aGF0IGFsbCByZW1vdmFscyBmcm9tIGEgcGFyZW50IHRh
a2UgcGxhY2UgaW4gb3JkZXIKLS8vIGFuZCBwcmVjZWRlIGFueSBhZGRpdGlvbnMuIElmIHRoaXMg
aXMgdmlvbGF0ZWQgKGkuZS4gYmVjYXVzZSBvZiBjb2RlIGNoYW5nZXMgZWxzZXdoZXJlCi0vLyBp
biBXZWJDb3JlKSBpdCB3aWxsIGxpa2VseSByZXN1bHQgaW4gYm90aCAoYSkgQVNTRVJUaW9ucyBm
YWlsaW5nLCBhbmQgKGIpIG11dGF0aW9uIHJlY29yZHMKLS8vIGJlaW5nIGVucXVldWVkIGZvciBk
ZWxpdmVyeSBiZWZvcmUgdGhlIG91dGVyLW1vc3Qgc2NvcGUgY2xvc2VzLgotY2xhc3MgQ2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvciB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoTXV0YXRpb25BY2N1bXVsYXRvcik7Ci1wdWJsaWM6Ci0gICAgTXV0YXRpb25BY2N1
bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRl
cmVzdEdyb3VwPiBvYnNlcnZlcnMpOwotICAgIH5NdXRhdGlvbkFjY3VtdWxhdG9yKCk7Ci0KLSAg
ICB2b2lkIGNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPik7Ci0gICAgdm9pZCB3aWxsUmVtb3Zl
Q2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7Ci0gICAgdm9pZCBlbnF1ZXVlTXV0YXRpb25SZWNvcmQo
KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgYm9vbCBpc0VtcHR5KCk7Ci0g
ICAgYm9vbCBpc0FkZGVkTm9kZUluT3JkZXIoTm9kZSopOwotICAgIGJvb2wgaXNSZW1vdmVkTm9k
ZUluT3JkZXIoTm9kZSopOwotICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKLQotICAgIFZlY3Rv
cjxSZWZQdHI8Tm9kZT4gPiBtX3JlbW92ZWROb2RlczsKLSAgICBWZWN0b3I8UmVmUHRyPE5vZGU+
ID4gbV9hZGRlZE5vZGVzOwotICAgIFJlZlB0cjxOb2RlPiBtX3ByZXZpb3VzU2libGluZzsKLSAg
ICBSZWZQdHI8Tm9kZT4gbV9uZXh0U2libGluZzsKLSAgICBSZWZQdHI8Tm9kZT4gbV9sYXN0QWRk
ZWQ7Ci0KLSAgICBPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA+IG1fb2JzZXJ2
ZXJzOwotfTsKLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6
TXV0YXRpb25BY2N1bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgUGFzc093blB0cjxN
dXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4gb2JzZXJ2ZXJzKQorTXV0YXRpb25BY2N1bXVs
YXRvcjo6TXV0YXRpb25BY2N1bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgUGFzc093
blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4gb2JzZXJ2ZXJzKQogICAgIDogbV90
YXJnZXQodGFyZ2V0KQorICAgICwgbV9zY29waW5nTGV2ZWwoMSkKKyAgICAsIG1fbGFzdEFkZGVk
KDApCiAgICAgLCBtX29ic2VydmVycyhvYnNlcnZlcnMpCiB7Ci0gICAgY2xlYXIoKTsKIH0KIAot
Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6fk11dGF0aW9uQWNj
dW11bGF0b3IoKQorTXV0YXRpb25BY2N1bXVsYXRvcjo6fk11dGF0aW9uQWNjdW11bGF0b3IoKQog
ewogICAgIEFTU0VSVChpc0VtcHR5KCkpOwogfQogCi1pbmxpbmUgYm9vbCBDaGlsZExpc3RNdXRh
dGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjppc0FkZGVkTm9kZUluT3JkZXIoTm9kZSog
Y2hpbGQpCitpbmxpbmUgYm9vbCBNdXRhdGlvbkFjY3VtdWxhdG9yOjppc0FkZGVkTm9kZUluT3Jk
ZXIoTm9kZSogY2hpbGQpCiB7CiAgICAgcmV0dXJuIGlzRW1wdHkoKSB8fCAobV9sYXN0QWRkZWQg
PT0gY2hpbGQtPnByZXZpb3VzU2libGluZygpICYmIG1fbmV4dFNpYmxpbmcgPT0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpOwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9u
QWNjdW11bGF0b3I6OmNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCkKK3ZvaWQg
TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxk
KQogewogICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9IHBycENoaWxkOwogCisgICAgQVNTRVJUKGhh
c09ic2VydmVycygpKTsKICAgICBBU1NFUlQoaXNBZGRlZE5vZGVJbk9yZGVyKGNoaWxkLmdldCgp
KSk7CiAgICAgaWYgKCFpc0FkZGVkTm9kZUluT3JkZXIoY2hpbGQuZ2V0KCkpKQogICAgICAgICBl
bnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKQEAgLTEwNSwyMSArNzgsMjEgQEAgdm9pZCBDaGlsZExp
c3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKFBhc3NSZWZQ
dHI8Tm9kZT4gcHIKICAgICAgICAgbV9uZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygp
OwogICAgIH0KIAotICAgIG1fYWRkZWROb2Rlcy5hcHBlbmQoY2hpbGQpOwotICAgIG1fbGFzdEFk
ZGVkID0gY2hpbGQ7CisgICAgbV9sYXN0QWRkZWQgPSBjaGlsZC5nZXQoKTsKKyAgICBtX2FkZGVk
Tm9kZXMuYXBwZW5kKGNoaWxkLnJlbGVhc2UoKSk7CiB9CiAKLWlubGluZSBib29sIENoaWxkTGlz
dE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmlzUmVtb3ZlZE5vZGVJbk9yZGVy
KE5vZGUqIGNoaWxkKQoraW5saW5lIGJvb2wgTXV0YXRpb25BY2N1bXVsYXRvcjo6aXNSZW1vdmVk
Tm9kZUluT3JkZXIoTm9kZSogY2hpbGQpCiB7Ci0gICAgcmV0dXJuIGlzRW1wdHkoKSB8fCBtX25l
eHRTaWJsaW5nLmdldCgpID09IGNoaWxkOworICAgIHJldHVybiBpc0VtcHR5KCkgfHwgbV9uZXh0
U2libGluZyA9PSBjaGlsZDsKIH0KIAotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRh
dGlvbkFjY3VtdWxhdG9yOjp3aWxsUmVtb3ZlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGls
ZCkKK3ZvaWQgTXV0YXRpb25BY2N1bXVsYXRvcjo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8
Tm9kZT4gcHJwQ2hpbGQpCiB7CiAgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7CiAK
KyAgICBBU1NFUlQoaGFzT2JzZXJ2ZXJzKCkpOwogICAgIEFTU0VSVChtX2FkZGVkTm9kZXMuaXNF
bXB0eSgpICYmIGlzUmVtb3ZlZE5vZGVJbk9yZGVyKGNoaWxkLmdldCgpKSk7Ci0KICAgICBpZiAo
IW1fYWRkZWROb2Rlcy5pc0VtcHR5KCkgfHwgIWlzUmVtb3ZlZE5vZGVJbk9yZGVyKGNoaWxkLmdl
dCgpKSkKICAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CiAKQEAgLTEzMCwxMTQgKzEw
Myw2MCBAQCB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6
OndpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZAogICAgIH0gZWxzZQogICAgICAgICBtX25l
eHRTaWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAKLSAgICBtX3JlbW92ZWROb2Rlcy5h
cHBlbmQoY2hpbGQpOworICAgIG1fcmVtb3ZlZE5vZGVzLmFwcGVuZChjaGlsZC5yZWxlYXNlKCkp
OwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6
OmVucXVldWVNdXRhdGlvblJlY29yZCgpCit2b2lkIE11dGF0aW9uQWNjdW11bGF0b3I6OmVucXVl
dWVNdXRhdGlvblJlY29yZCgpCiB7Ci0gICAgaWYgKGlzRW1wdHkoKSkgewotICAgICAgICBjbGVh
cigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlcnMtPmVucXVldWVN
dXRhdGlvblJlY29yZChNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hpbGRMaXN0KAotICAgICAgICAg
ICAgbV90YXJnZXQsIFN0YXRpY05vZGVMaXN0OjphZG9wdChtX2FkZGVkTm9kZXMpLCBTdGF0aWNO
b2RlTGlzdDo6YWRvcHQobV9yZW1vdmVkTm9kZXMpLCBtX3ByZXZpb3VzU2libGluZy5yZWxlYXNl
KCksIG1fbmV4dFNpYmxpbmcucmVsZWFzZSgpKSk7Ci0gICAgY2xlYXIoKTsKLX0KKyAgICBBU1NF
UlQoaGFzT2JzZXJ2ZXJzKCkpOworICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKIAotdm9pZCBDaGls
ZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpjbGVhcigpCi17Ci0gICAg
aWYgKCFtX3JlbW92ZWROb2Rlcy5pc0VtcHR5KCkpCi0gICAgICAgIG1fcmVtb3ZlZE5vZGVzLmNs
ZWFyKCk7Ci0gICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0eSgpKQotICAgICAgICBtX2FkZGVk
Tm9kZXMuY2xlYXIoKTsKLSAgICBtX3ByZXZpb3VzU2libGluZyA9IDA7Ci0gICAgbV9uZXh0U2li
bGluZyA9IDA7CisgICAgUmVmUHRyPE5vZGVMaXN0PiBhZGRlZE5vZGVzID0gU3RhdGljTm9kZUxp
c3Q6OmFkb3B0KG1fYWRkZWROb2Rlcyk7CisgICAgUmVmUHRyPE5vZGVMaXN0PiByZW1vdmVkTm9k
ZXMgPSBTdGF0aWNOb2RlTGlzdDo6YWRvcHQobV9yZW1vdmVkTm9kZXMpOworICAgIFJlZlB0cjxN
dXRhdGlvblJlY29yZD4gcmVjb3JkID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoaWxkTGlzdCht
X3RhcmdldCwgYWRkZWROb2Rlcy5yZWxlYXNlKCksIHJlbW92ZWROb2Rlcy5yZWxlYXNlKCksIG1f
cHJldmlvdXNTaWJsaW5nLnJlbGVhc2UoKSwgbV9uZXh0U2libGluZy5yZWxlYXNlKCkpOworICAg
IG1fb2JzZXJ2ZXJzLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQocmVjb3JkLnJlbGVhc2UoKSk7CiAg
ICAgbV9sYXN0QWRkZWQgPSAwOworICAgIEFTU0VSVChpc0VtcHR5KCkpOwogfQogCi1ib29sIENo
aWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmlzRW1wdHkoKQotewot
ICAgIHJldHVybiBtX3JlbW92ZWROb2Rlcy5pc0VtcHR5KCkgJiYgbV9hZGRlZE5vZGVzLmlzRW1w
dHkoKTsKLX0KLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25S
b3V0ZXIqIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
OjpzX2luc3RhbmNlID0gMDsKLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1
bXVsYXRpb25Sb3V0ZXI6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKCkKLXsKLX0KLQotQ2hp
bGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6On5NdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcigpCi17Ci0gICAgQVNTRVJUKG1fc2NvcGluZ0xldmVscy5pc0Vt
cHR5KCkpOwotICAgIEFTU0VSVChtX2FjY3VtdWxhdGlvbnMuaXNFbXB0eSgpKTsKLX0KLQotdm9p
ZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5p
dGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFzX2luc3RhbmNlKTsKLSAgICBzX2luc3RhbmNlID0g
YWRvcHRQdHIobmV3IENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyKS5sZWFrUHRyKCk7Ci19Ci0KLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRp
b25BY2N1bXVsYXRpb25Sb3V0ZXIqIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNj
dW11bGF0aW9uUm91dGVyOjppbnN0YW5jZSgpCi17Ci0gICAgaWYgKCFzX2luc3RhbmNlKQotICAg
ICAgICBpbml0aWFsaXplKCk7Ci0KLSAgICByZXR1cm4gc19pbnN0YW5jZTsKLX0KLQotdm9pZCBD
aGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6Y2hpbGRB
ZGRlZChOb2RlKiB0YXJnZXQsIE5vZGUqIGNoaWxkKQorYm9vbCBNdXRhdGlvbkFjY3VtdWxhdG9y
Ojppc0VtcHR5KCkKIHsKLSAgICBIYXNoTWFwPE5vZGUqLCBPd25QdHI8Q2hpbGRMaXN0TXV0YXRp
b25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcj4gPjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11
bGF0aW9ucy5maW5kKHRhcmdldCk7Ci0gICAgQVNTRVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25z
LmVuZCgpKTsKLSAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXIt
PnNlY29uZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXRlci0+c2Vjb25kLT5jaGlsZEFkZGVk
KGNoaWxkKTsKKyAgICBib29sIHJlc3VsdCA9IG1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSAmJiBt
X2FkZGVkTm9kZXMuaXNFbXB0eSgpOworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAocmVzdWx0KSB7
CisgICAgICAgIEFTU0VSVCghbV9wcmV2aW91c1NpYmxpbmcpOworICAgICAgICBBU1NFUlQoIW1f
bmV4dFNpYmxpbmcpOworICAgICAgICBBU1NFUlQoIW1fbGFzdEFkZGVkKTsKKyAgICB9CisjZW5k
aWYKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6
Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjp3aWxsUmVtb3ZlQ2hpbGQoTm9kZSogdGFyZ2V0
LCBOb2RlKiBjaGlsZCkKK3R5cGVkZWYgSGFzaE1hcDxOb2RlKiwgTXV0YXRpb25BY2N1bXVsYXRv
cio+IEFjY3VtdWxhdG9yTWFwOworc3RhdGljIEFjY3VtdWxhdG9yTWFwJiBhY2N1bXVsYXRvck1h
cCgpCiB7Ci0gICAgSGFzaE1hcDxOb2RlKiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9uU2NvcGU6
Ok11dGF0aW9uQWNjdW11bGF0b3I+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMu
ZmluZCh0YXJnZXQpOwotICAgIEFTU0VSVChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7
Ci0gICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGl0ZXItPnNlY29uZC0+d2lsbFJlbW92ZUNoaWxkKGNo
aWxkKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEFjY3VtdWxhdG9yTWFwLCBtYXAsICgpKTsK
KyAgICByZXR1cm4gbWFwOwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0
aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0
KQorTXV0YXRpb25BY2N1bXVsYXRvciogTXV0YXRpb25BY2N1bXVsYXRvcjo6Z2V0T3JDcmVhdGUo
Tm9kZSogdGFyZ2V0KQogewotICAgIFNjb3BpbmdMZXZlbE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1fc2NvcGluZ0xldmVscy5hZGQodGFyZ2V0LCAxKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0Vu
dHJ5KSB7Ci0gICAgICAgICsrKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3Jv
dXA+IG9ic2VydmVycyA9IE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpjcmVhdGVGb3JD
aGlsZExpc3RNdXRhdGlvbih0YXJnZXQpKQotICAgICAgICBtX2FjY3VtdWxhdGlvbnMuc2V0KHRh
cmdldCwgYWRvcHRQdHIobmV3IENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11
bGF0b3IodGFyZ2V0LCBvYnNlcnZlcnMucmVsZWFzZSgpKSkpOwotI2lmbmRlZiBOREVCVUcKKyAg
ICBBY2N1bXVsYXRvck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGFjY3VtdWxhdG9yTWFwKCkuYWRk
KHRhcmdldCwgMCk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgKysocmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQtPm1fc2NvcGluZ0xldmVsKTsKICAgICBlbHNlCi0gICAgICAg
IG1fYWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCBudWxscHRyKTsKLSNlbmRpZgorICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBNdXRhdGlvbkFjY3VtdWxhdG9yKHRhcmdldCwg
TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmNyZWF0ZUZvckNoaWxkTGlzdE11dGF0aW9u
KHRhcmdldCkpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKIH0KIAotdm9p
ZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6ZGVj
cmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRhcmdldCkKK3ZvaWQgTXV0YXRpb25BY2N1bXVsYXRv
cjo6ZXhpdFNjb3BlKCkKIHsKLSAgICBTY29waW5nTGV2ZWxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3Njb3BpbmdMZXZlbHMuZmluZCh0YXJnZXQpOwotICAgIEFTU0VSVChpdGVyICE9IG1fc2NvcGlu
Z0xldmVscy5lbmQoKSk7Ci0KLSAgICAtLShpdGVyLT5zZWNvbmQpOwotICAgIGlmIChpdGVyLT5z
ZWNvbmQgPiAwKQorICAgIGlmICgtLW1fc2NvcGluZ0xldmVsID4gMCkKICAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9zY29waW5nTGV2ZWxzLnJlbW92ZShpdGVyKTsKLQotICAgIE93blB0cjxNdXRh
dGlvbkFjY3VtdWxhdG9yPiByZWNvcmQobV9hY2N1bXVsYXRpb25zLnRha2UodGFyZ2V0KSk7Ci0g
ICAgaWYgKHJlY29yZCkKLSAgICAgICAgcmVjb3JkLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsK
KyAgICBpZiAoaGFzT2JzZXJ2ZXJzKCkgJiYgIWlzRW1wdHkoKSkKKyAgICAgICAgZW5xdWV1ZU11
dGF0aW9uUmVjb3JkKCk7CisgICAgYWNjdW11bGF0b3JNYXAoKS5yZW1vdmUobV90YXJnZXQuZ2V0
KCkpOworICAgIGRlbGV0ZSB0aGlzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuaAppbmRleCBlMDYyNGVmNWRi
M2M4M2E3Y2I3ZGMyOTE2M2I0MzViNGRiOTAyZTZjLi45ZTYwMDA5OWYxNGQ1OGNmMDE3Y2E1NDc3
NjMyMTk3NDQ1YzhmYjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlv
blNjb3BlLmgKQEAgLTQyLDYyICs0Miw3NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOworCisvLyBNdXRhdGlvbkFjY3VtdWxh
dG9yIGlzIG5vdCBtZWFudCB0byBiZSB1c2VkIGRpcmVjdGx5OyBDaGlsZExpc3RNdXRhdGlvblNj
b3BlIGlzIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgorLy8KKy8vIE11dGF0aW9uQWNjdW11bGF0b3Ig
ZXhwZWN0cyB0aGF0IGFsbCByZW1vdmFscyBmcm9tIGEgcGFyZW50IHRha2UgcGxhY2UgaW4gb3Jk
ZXIKKy8vIGFuZCBwcmVjZWRlIGFueSBhZGRpdGlvbnMuIElmIHRoaXMgaXMgdmlvbGF0ZWQgKGku
ZS4gYmVjYXVzZSBvZiBjb2RlIGNoYW5nZXMgZWxzZXdoZXJlCisvLyBpbiBXZWJDb3JlKSBpdCB3
aWxsIGxpa2VseSByZXN1bHQgaW4gYm90aCAoYSkgQVNTRVJUaW9ucyBmYWlsaW5nLCBhbmQgKGIp
IG11dGF0aW9uIHJlY29yZHMKKy8vIGJlaW5nIGVucXVldWVkIGZvciBkZWxpdmVyeSBiZWZvcmUg
dGhlIG91dGVyLW1vc3Qgc2NvcGUgY2xvc2VzLgorY2xhc3MgTXV0YXRpb25BY2N1bXVsYXRvciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTXV0YXRpb25BY2N1bXVsYXRvcik7CitwdWJsaWM6
CisgICAgc3RhdGljIE11dGF0aW9uQWNjdW11bGF0b3IqIGdldE9yQ3JlYXRlKE5vZGUqKTsKKyAg
ICB2b2lkIGV4aXRTY29wZSgpOworCisgICAgdm9pZCBjaGlsZEFkZGVkKFBhc3NSZWZQdHI8Tm9k
ZT4pOworICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4pOworCisgICAg
Ym9vbCBoYXNPYnNlcnZlcnMoKSBjb25zdCB7IHJldHVybiBtX29ic2VydmVyczsgfQorCitwcml2
YXRlOgorICAgIE11dGF0aW9uQWNjdW11bGF0b3IoUGFzc1JlZlB0cjxOb2RlPiwgUGFzc093blB0
cjxNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4pOworICAgIH5NdXRhdGlvbkFjY3VtdWxh
dG9yKCk7CisKKyAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZCgpOworICAgIGJvb2wgaXNF
bXB0eSgpOworICAgIGJvb2wgaXNBZGRlZE5vZGVJbk9yZGVyKE5vZGUqKTsKKyAgICBib29sIGlz
UmVtb3ZlZE5vZGVJbk9yZGVyKE5vZGUqKTsKKworICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsK
KyAgICB1bnNpZ25lZCBtX3Njb3BpbmdMZXZlbDsKKworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PiBtX3JlbW92ZWROb2RlczsKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9hZGRlZE5vZGVz
OworICAgIFJlZlB0cjxOb2RlPiBtX3ByZXZpb3VzU2libGluZzsKKyAgICBSZWZQdHI8Tm9kZT4g
bV9uZXh0U2libGluZzsKKyAgICBOb2RlKiBtX2xhc3RBZGRlZDsKKworICAgIE93blB0cjxNdXRh
dGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4gbV9vYnNlcnZlcnM7Cit9OworCiBjbGFzcyBDaGls
ZExpc3RNdXRhdGlvblNjb3BlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDaGlsZExpc3RN
dXRhdGlvblNjb3BlKTsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDaGlsZExpc3RNdXRhdGlvblNj
b3BlKE5vZGUqIHRhcmdldCkKLSAgICAgICAgOiBtX3RhcmdldCh0YXJnZXQtPmRvY3VtZW50KCkt
Pmhhc011dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKE11dGF0aW9uT2JzZXJ2ZXI6OkNoaWxkTGlzdCkg
PyB0YXJnZXQgOiAwKQorICAgICAgICA6IG1fYWNjdW11bGF0b3IoMCkKICAgICB7Ci0gICAgICAg
IGlmIChtX3RhcmdldCkKLSAgICAgICAgICAgIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpp
bnN0YW5jZSgpLT5pbmNyZW1lbnRTY29waW5nTGV2ZWwobV90YXJnZXQpOworICAgICAgICBpZiAo
dGFyZ2V0LT5kb2N1bWVudCgpLT5oYXNNdXRhdGlvbk9ic2VydmVyc09mVHlwZShNdXRhdGlvbk9i
c2VydmVyOjpDaGlsZExpc3QpKQorICAgICAgICAgICAgbV9hY2N1bXVsYXRvciA9IE11dGF0aW9u
QWNjdW11bGF0b3I6OmdldE9yQ3JlYXRlKHRhcmdldCk7CiAgICAgfQogCiAgICAgfkNoaWxkTGlz
dE11dGF0aW9uU2NvcGUoKQogICAgIHsKLSAgICAgICAgaWYgKG1fdGFyZ2V0KQotICAgICAgICAg
ICAgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPmRlY3JlbWVudFNjb3Bp
bmdMZXZlbChtX3RhcmdldCk7CisgICAgICAgIGlmIChtX2FjY3VtdWxhdG9yKQorICAgICAgICAg
ICAgbV9hY2N1bXVsYXRvci0+ZXhpdFNjb3BlKCk7CiAgICAgfQogCiAgICAgdm9pZCBjaGlsZEFk
ZGVkKE5vZGUqIGNoaWxkKQogICAgIHsKLSAgICAgICAgaWYgKG1fdGFyZ2V0KQotICAgICAgICAg
ICAgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPmNoaWxkQWRkZWQobV90
YXJnZXQsIGNoaWxkKTsKKyAgICAgICAgaWYgKG1fYWNjdW11bGF0b3IgJiYgbV9hY2N1bXVsYXRv
ci0+aGFzT2JzZXJ2ZXJzKCkpCisgICAgICAgICAgICBtX2FjY3VtdWxhdG9yLT5jaGlsZEFkZGVk
KGNoaWxkKTsKICAgICB9CiAKICAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChOb2RlKiBjaGlsZCkK
ICAgICB7Ci0gICAgICAgIGlmIChtX3RhcmdldCkKLSAgICAgICAgICAgIE11dGF0aW9uQWNjdW11
bGF0aW9uUm91dGVyOjppbnN0YW5jZSgpLT53aWxsUmVtb3ZlQ2hpbGQobV90YXJnZXQsIGNoaWxk
KTsKKyAgICAgICAgaWYgKG1fYWNjdW11bGF0b3IgJiYgbV9hY2N1bXVsYXRvci0+aGFzT2JzZXJ2
ZXJzKCkpCisgICAgICAgICAgICBtX2FjY3VtdWxhdG9yLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQp
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBjbGFzcyBNdXRhdGlvbkFjY3VtdWxhdG9yOwotCi0g
ICAgY2xhc3MgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIgewotICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcik7Ci0gICAgcHVibGljOgotICAg
ICAgICB+TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIoKTsKLQotICAgICAgICBzdGF0aWMgTXV0
YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIqIGluc3RhbmNlKCk7Ci0KLSAgICAgICAgdm9pZCBpbmNy
ZW1lbnRTY29waW5nTGV2ZWwoTm9kZSopOwotICAgICAgICB2b2lkIGRlY3JlbWVudFNjb3BpbmdM
ZXZlbChOb2RlKik7Ci0KLSAgICAgICAgdm9pZCBjaGlsZEFkZGVkKE5vZGUqIHRhcmdldCwgTm9k
ZSogY2hpbGQpOwotICAgICAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChOb2RlKiB0YXJnZXQsIE5v
ZGUqIGNoaWxkKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKLQotICAgICAgICB0
eXBlZGVmIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBTY29waW5nTGV2ZWxNYXA7Ci0gICAgICAg
IFNjb3BpbmdMZXZlbE1hcCBtX3Njb3BpbmdMZXZlbHM7Ci0gICAgICAgIEhhc2hNYXA8Tm9kZSos
IE93blB0cjxNdXRhdGlvbkFjY3VtdWxhdG9yPiA+IG1fYWNjdW11bGF0aW9uczsKLQotICAgICAg
ICBzdGF0aWMgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIqIHNfaW5zdGFuY2U7Ci0gICAgfTsK
LQotICAgIE5vZGUqIG1fdGFyZ2V0OworICAgIE11dGF0aW9uQWNjdW11bGF0b3IqIG1fYWNjdW11
bGF0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuY3BwCmluZGV4IDY0MWMwYjg5MGIyYWQ3MTMzMTE4MmYzYTZhMDIyNTM4ZmEzYTczNTUu
LmNhZjRhYzkzOTg1MTZlZGI1Y2ZiZTA0YzM2MzFhZmY0MzUzMjhjM2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEVsZW1lbnQuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDU1NW
YWx1ZVBvb2wuaCIKLSNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNjb3BlLmgiCiAjaW5jbHVk
ZSAiRE9NU2V0dGFibGVUb2tlbkxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnQuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165213</attachid>
            <date>2012-09-21 15:40:15 -0700</date>
            <delta_ts>2012-09-21 16:39:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97352-20120921153939.patch</filename>
            <type>text/plain</type>
            <size>17388</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjlmYjczNTExMmRhYWUx
ZjQ0MmQ0MmMzMzllZjFkMjUwYThhNDk4ZC4uNzI2M2ZlZDZhMGMzM2MwYTE4ZmNhZGZjYWNjYjNk
ZTYyMTZlNjZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA5LTIxICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IGFuZCBvcHRp
bWl6ZSBDaGlsZExpc3RNdXRhdGlvblNjb3BlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NzM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgaXMgb25lIG9mIHRoZSBt
b3N0IGNvbXBsaWNhdGVkIGJpdHMgb2YKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlciBpbXBsZW1l
bnRhdGlvbi4gVGhpcyBwYXRjaCBhaW1zIHRvIHNpbXBsaWZ5IGl0IGZvcgorICAgICAgICBjbGFy
aXR5IGFuZCBpbXByb3ZlIGl0cyBwZXJmb3JtYW5jZSAobW9zdGx5IGJ5IGp1c3QgZG9pbmcgbGVz
cykuCisKKyAgICAgICAgVGhlIGJpZyBjaGFuZ2UgaXMgdG8gcmVtb3ZlIHRoZSBNdXRhdGlvbkFj
Y3VtdWxhdG9yUm91dGVyIGNsYXNzLAorICAgICAgICByZXBsYWNpbmcgaXQgd2l0aCBzdGF0aWMg
bGlmZXRpbWUtbWFuYWdlbWVudCBsb2dpYyBpbgorICAgICAgICBNdXRhdGlvbkFjY3VtdWxhdG9y
ICh3aG9zZSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBhcmUgbm93IGJvdGgKKyAgICAgICAg
cHJpdmF0ZSkuIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgaXMgZXhwZWN0ZWQgdG8gY2FsbCBnZXRP
ckNyZWF0ZSgpIGluCisgICAgICAgIGl0cyBjb25zdHJ1Y3RvciBhbmQgZXhpdFNjb3BlKCkgaW4g
aXRzIGRlc3RydWN0b3IsIGFuZCB0aGUKKyAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRvciBoYW5k
bGVzIHRoZSBzY29waW5nLWxldmVsIGNvdW50aW5nIGFuZCByZWNvcmQKKyAgICAgICAgZW5xdWV1
ZWluZyBpbnRlcm5hbGx5LgorCisgICAgICAgIFRoaXMgZ3JlYXRseSByZWR1Y2VzIHRoZSBudW1i
ZXIgb2YgbGluZXMgb2YgY29kZSwgYW5kIGNvbmRlbnNlcworICAgICAgICB0d28gSGFzaE1hcHMg
aW50byBvbmUuIEl0IGFsc28gcmVkdWNlcyBoYXNoIGxvb2t1cHMsIHdoaWNoIG5vdworICAgICAg
ICBvY2N1ciBvbmx5IG9uIHNjb3BlIGNyZWF0aW9uIGFuZCB3aGVuIHRoZSBzY29waW5nIGxldmVs
IGZvciBhIGdpdmVuCisgICAgICAgIGFjY3VtdWxhdG9yIHJlYWNoZXMgMCAocHJldmlvdXNseSwg
ZWFjaCBjaGlsZEFkZGVkIGFuZCB3aWxsUmVtb3ZlQ2hpbGQKKyAgICAgICAgY2FsbCBjb3VsZCBy
ZXN1bHQgaW4gdHdvIGhhc2ggbG9va3VwcyBlYWNoKS4KKworICAgICAgICBUaGVyZSBhcmUgc29t
ZSBtaW5vciBjaGFuZ2VzIGFzIHdlbGw6IHRoZSBNdXRhdGlvbkFjY3VtdWxhdG9yOjpjbGVhcigp
CisgICAgICAgIG1ldGhvZCBpcyBnb25lLCBhcyBpdCB3YXMgZG9pbmcgbW9yZSB3b3JrIHRoYW4g
bmVjZXNzYXJ5OworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMIGlzIG5vdyB1c2VkIGluc3Rl
YWQgb2YgaGFuZC1yb2xsZWQgc3RhdGljLW1hbmFnZW1lbnQKKyAgICAgICAgY29kZTsgTXV0YXRp
b25BY2N1bXVsYXRvcjo6bV9sYXN0QWRkZWQgaXMgbm8gbG9uZ2VyIGEgUmVmUHRyLCBzaW5jZSBp
dAorICAgICAgICBhbHdheXMgcG9pbnRzIGF0IGEgTm9kZSB0aGF0J3MgYWxyZWFkeSBiZWluZyBy
ZWYnZCBieSB0aGUgYWNjdW11bGF0b3IuCisgICAgICAgIEFsc28gdmFyaW91cyBtaW5vciBzeW50
YWN0aWMgY2xlYW51cHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVo
YXZpb3IuCisKKyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpNdXRhdGlvbkFjY3VtdWxhdG9yKTog
UmVtb3ZlIHVubmVjZXNzYXJ5IGNhbGwgdG8gY2xlYXIoKSAod2hpY2ggaXRzZWxmIGhhcyBiZWVu
IHJlbW92ZWQpLgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRB
ZGRlZCk6IE1pbm9yIFJlZlB0ciB1c2FnZSBpbXByb3ZlbWVudHMuCisgICAgICAgIChXZWJDb3Jl
OjpNdXRhdGlvbkFjY3VtdWxhdG9yOjppc1JlbW92ZWROb2RlSW5PcmRlcik6IFNpbXBsaWZ5IFJl
ZlB0ciBzeW50YXguCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjp3aWxs
UmVtb3ZlQ2hpbGQpOiBNaW5vciBSZWZQdHIgdXNhZ2UgaW1wcm92ZW1lbnRzLgorICAgICAgICAo
V2ViQ29yZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKTogUmVw
bGFjZSBjYWxsIHRvIGNsZWFyKCkgd2l0aCBjbGVhcmluZyBtX2xhc3RBZGRlZCwKKyAgICAgICAg
c2luY2UgaXQncyB0aGUgb25seSBiaXQgbm90IGNsZWFyZWQgYnkgdGhlIE11dGF0aW9uUmVjb3Jk
IGNyZWF0aW9uIGNhbGwuIEFsc28gcmVtb3ZlCisgICAgICAgIGlzRW1wdHkgY2hlY2sgYW5kIHJl
cGxhY2Ugd2l0aCBhc3NlcnRzIG5vdyB0aGF0IGl0J3MgYSBwcml2YXRlIG1ldGhvZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmlzRW1wdHkpOiBBZGRlZCBtb3JlIGFz
c2VydGlvbnMgYWJvdXQgZW1wdGluZXNzLgorICAgICAgICAoV2ViQ29yZTo6YWNjdW11bGF0b3JN
YXApOiBSZWR1Y2VkIHR3byBtYXBzIHRvIG9uZSwgYW5kIG1hbmFnZSBpdHMgbGlmZXRpbWUgd2l0
aCBERUZJTkVfU1RBVElDX0xPQ0FMLgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25BY2N1bXVs
YXRvcjo6Z2V0T3JDcmVhdGUpOiBSZXBsYWNlcyBoYWxmIG9mIE11dGF0aW9uQWNjdW11bGF0b3JS
b3V0ZXIncyBqb2IuCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpleGl0
U2NvcGUpOiBSZXBsYWNlcyB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgcm91dGVyJ3Mgam9iLCBhbmQg
aGFuZGxlcyB0aGUgbGlmZXRpbWUgb2YgTXV0YXRpb25BY2N1bXVsYXRvcnMuCisgICAgICAgICog
ZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoTXV0YXRpb25BY2N1bXVsYXRvcik6IEV4dHJhY3QgdGhlIGlubmVyIGNsYXNzIHRvIG1ha2Ug
ZXZlcnl0aGluZyBlYXNpZXIgdG8gcmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11
dGF0aW9uU2NvcGU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOiBTdG9yZSBtX2FjY3VtdWxhdG9y
IHJhdGhlciB0aGFuIG1fdGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRp
b25TY29wZTo6fkNoaWxkTGlzdE11dGF0aW9uU2NvcGUpOiBkaXR0bworICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRBZGRlZCk6IGRpdHRvCisgICAgICAgIChX
ZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp3aWxsUmVtb3ZlQ2hpbGQpOiBkaXR0bwor
ICAgICAgICAoQ2hpbGRMaXN0TXV0YXRpb25TY29wZSk6CisgICAgICAgIChNdXRhdGlvbkFjY3Vt
dWxhdG9yKTogTW92ZWQgY2xhc3MgZGVjbGFyYXRpb24gaW50byBoZWFkZXIgZmlsZSwgc2luY2UK
KyAgICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSdzIGlubGluZSBtZXRob2RzIG5lZWQgdG8g
Y2FsbCB0aGVzZSBtZXRob2RzLgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOiBSZW1v
dmUgdW51c2VkIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAjaW5jbHVkZS4KKwogMjAxMi0wOS0x
OSAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBSZW1v
dmUgY3VzdG9tIHBhaW50aW5nIGNvZGUgZm9yIHNlYXJjaENhbmNlbApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCmluZGV4IGY0YTJkYTA0YWI2MTU4MTNm
ODY0YWUxMzU2ZjRlYWE0ZGIwYmZlNDkuLmQ5NWM0M2NhMDg2NGE0NWNiM2Q3MzAwMTMxYjM3YTU2
MTQ1ZTcwZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlv
blNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5jcHAKQEAgLTQyLDYwICs0MiwzMyBAQAogI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIE11dGF0
aW9uQWNjdW11bGF0b3IgZXhwZWN0cyB0aGF0IGFsbCByZW1vdmFscyBmcm9tIGEgcGFyZW50IHRh
a2UgcGxhY2UgaW4gb3JkZXIKLS8vIGFuZCBwcmVjZWRlIGFueSBhZGRpdGlvbnMuIElmIHRoaXMg
aXMgdmlvbGF0ZWQgKGkuZS4gYmVjYXVzZSBvZiBjb2RlIGNoYW5nZXMgZWxzZXdoZXJlCi0vLyBp
biBXZWJDb3JlKSBpdCB3aWxsIGxpa2VseSByZXN1bHQgaW4gYm90aCAoYSkgQVNTRVJUaW9ucyBm
YWlsaW5nLCBhbmQgKGIpIG11dGF0aW9uIHJlY29yZHMKLS8vIGJlaW5nIGVucXVldWVkIGZvciBk
ZWxpdmVyeSBiZWZvcmUgdGhlIG91dGVyLW1vc3Qgc2NvcGUgY2xvc2VzLgotY2xhc3MgQ2hpbGRM
aXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvciB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoTXV0YXRpb25BY2N1bXVsYXRvcik7Ci1wdWJsaWM6Ci0gICAgTXV0YXRpb25BY2N1
bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRl
cmVzdEdyb3VwPiBvYnNlcnZlcnMpOwotICAgIH5NdXRhdGlvbkFjY3VtdWxhdG9yKCk7Ci0KLSAg
ICB2b2lkIGNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPik7Ci0gICAgdm9pZCB3aWxsUmVtb3Zl
Q2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7Ci0gICAgdm9pZCBlbnF1ZXVlTXV0YXRpb25SZWNvcmQo
KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgYm9vbCBpc0VtcHR5KCk7Ci0g
ICAgYm9vbCBpc0FkZGVkTm9kZUluT3JkZXIoTm9kZSopOwotICAgIGJvb2wgaXNSZW1vdmVkTm9k
ZUluT3JkZXIoTm9kZSopOwotICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKLQotICAgIFZlY3Rv
cjxSZWZQdHI8Tm9kZT4gPiBtX3JlbW92ZWROb2RlczsKLSAgICBWZWN0b3I8UmVmUHRyPE5vZGU+
ID4gbV9hZGRlZE5vZGVzOwotICAgIFJlZlB0cjxOb2RlPiBtX3ByZXZpb3VzU2libGluZzsKLSAg
ICBSZWZQdHI8Tm9kZT4gbV9uZXh0U2libGluZzsKLSAgICBSZWZQdHI8Tm9kZT4gbV9sYXN0QWRk
ZWQ7Ci0KLSAgICBPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA+IG1fb2JzZXJ2
ZXJzOwotfTsKLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6
TXV0YXRpb25BY2N1bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgUGFzc093blB0cjxN
dXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4gb2JzZXJ2ZXJzKQorTXV0YXRpb25BY2N1bXVs
YXRvcjo6TXV0YXRpb25BY2N1bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgUGFzc093
blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4gb2JzZXJ2ZXJzKQogICAgIDogbV90
YXJnZXQodGFyZ2V0KQorICAgICwgbV9zY29waW5nTGV2ZWwoMSkKKyAgICAsIG1fbGFzdEFkZGVk
KDApCiAgICAgLCBtX29ic2VydmVycyhvYnNlcnZlcnMpCiB7Ci0gICAgY2xlYXIoKTsKIH0KIAot
Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6fk11dGF0aW9uQWNj
dW11bGF0b3IoKQorTXV0YXRpb25BY2N1bXVsYXRvcjo6fk11dGF0aW9uQWNjdW11bGF0b3IoKQog
ewogICAgIEFTU0VSVChpc0VtcHR5KCkpOwogfQogCi1pbmxpbmUgYm9vbCBDaGlsZExpc3RNdXRh
dGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjppc0FkZGVkTm9kZUluT3JkZXIoTm9kZSog
Y2hpbGQpCitpbmxpbmUgYm9vbCBNdXRhdGlvbkFjY3VtdWxhdG9yOjppc0FkZGVkTm9kZUluT3Jk
ZXIoTm9kZSogY2hpbGQpCiB7CiAgICAgcmV0dXJuIGlzRW1wdHkoKSB8fCAobV9sYXN0QWRkZWQg
PT0gY2hpbGQtPnByZXZpb3VzU2libGluZygpICYmIG1fbmV4dFNpYmxpbmcgPT0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpOwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9u
QWNjdW11bGF0b3I6OmNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCkKK3ZvaWQg
TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxk
KQogewogICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9IHBycENoaWxkOwogCisgICAgQVNTRVJUKGhh
c09ic2VydmVycygpKTsKICAgICBBU1NFUlQoaXNBZGRlZE5vZGVJbk9yZGVyKGNoaWxkLmdldCgp
KSk7CiAgICAgaWYgKCFpc0FkZGVkTm9kZUluT3JkZXIoY2hpbGQuZ2V0KCkpKQogICAgICAgICBl
bnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKQEAgLTEwNSwyMSArNzgsMjEgQEAgdm9pZCBDaGlsZExp
c3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKFBhc3NSZWZQ
dHI8Tm9kZT4gcHIKICAgICAgICAgbV9uZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygp
OwogICAgIH0KIAotICAgIG1fYWRkZWROb2Rlcy5hcHBlbmQoY2hpbGQpOwotICAgIG1fbGFzdEFk
ZGVkID0gY2hpbGQ7CisgICAgbV9sYXN0QWRkZWQgPSBjaGlsZC5nZXQoKTsKKyAgICBtX2FkZGVk
Tm9kZXMuYXBwZW5kKGNoaWxkLnJlbGVhc2UoKSk7CiB9CiAKLWlubGluZSBib29sIENoaWxkTGlz
dE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmlzUmVtb3ZlZE5vZGVJbk9yZGVy
KE5vZGUqIGNoaWxkKQoraW5saW5lIGJvb2wgTXV0YXRpb25BY2N1bXVsYXRvcjo6aXNSZW1vdmVk
Tm9kZUluT3JkZXIoTm9kZSogY2hpbGQpCiB7Ci0gICAgcmV0dXJuIGlzRW1wdHkoKSB8fCBtX25l
eHRTaWJsaW5nLmdldCgpID09IGNoaWxkOworICAgIHJldHVybiBpc0VtcHR5KCkgfHwgbV9uZXh0
U2libGluZyA9PSBjaGlsZDsKIH0KIAotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRh
dGlvbkFjY3VtdWxhdG9yOjp3aWxsUmVtb3ZlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGls
ZCkKK3ZvaWQgTXV0YXRpb25BY2N1bXVsYXRvcjo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8
Tm9kZT4gcHJwQ2hpbGQpCiB7CiAgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7CiAK
KyAgICBBU1NFUlQoaGFzT2JzZXJ2ZXJzKCkpOwogICAgIEFTU0VSVChtX2FkZGVkTm9kZXMuaXNF
bXB0eSgpICYmIGlzUmVtb3ZlZE5vZGVJbk9yZGVyKGNoaWxkLmdldCgpKSk7Ci0KICAgICBpZiAo
IW1fYWRkZWROb2Rlcy5pc0VtcHR5KCkgfHwgIWlzUmVtb3ZlZE5vZGVJbk9yZGVyKGNoaWxkLmdl
dCgpKSkKICAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CiAKQEAgLTEzMCwxMTQgKzEw
Myw2MCBAQCB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6
OndpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZAogICAgIH0gZWxzZQogICAgICAgICBtX25l
eHRTaWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAKLSAgICBtX3JlbW92ZWROb2Rlcy5h
cHBlbmQoY2hpbGQpOworICAgIG1fcmVtb3ZlZE5vZGVzLmFwcGVuZChjaGlsZC5yZWxlYXNlKCkp
OwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6
OmVucXVldWVNdXRhdGlvblJlY29yZCgpCit2b2lkIE11dGF0aW9uQWNjdW11bGF0b3I6OmVucXVl
dWVNdXRhdGlvblJlY29yZCgpCiB7Ci0gICAgaWYgKGlzRW1wdHkoKSkgewotICAgICAgICBjbGVh
cigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlcnMtPmVucXVldWVN
dXRhdGlvblJlY29yZChNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hpbGRMaXN0KAotICAgICAgICAg
ICAgbV90YXJnZXQsIFN0YXRpY05vZGVMaXN0OjphZG9wdChtX2FkZGVkTm9kZXMpLCBTdGF0aWNO
b2RlTGlzdDo6YWRvcHQobV9yZW1vdmVkTm9kZXMpLCBtX3ByZXZpb3VzU2libGluZy5yZWxlYXNl
KCksIG1fbmV4dFNpYmxpbmcucmVsZWFzZSgpKSk7Ci0gICAgY2xlYXIoKTsKLX0KKyAgICBBU1NF
UlQoaGFzT2JzZXJ2ZXJzKCkpOworICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKIAotdm9pZCBDaGls
ZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpjbGVhcigpCi17Ci0gICAg
aWYgKCFtX3JlbW92ZWROb2Rlcy5pc0VtcHR5KCkpCi0gICAgICAgIG1fcmVtb3ZlZE5vZGVzLmNs
ZWFyKCk7Ci0gICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0eSgpKQotICAgICAgICBtX2FkZGVk
Tm9kZXMuY2xlYXIoKTsKLSAgICBtX3ByZXZpb3VzU2libGluZyA9IDA7Ci0gICAgbV9uZXh0U2li
bGluZyA9IDA7CisgICAgUmVmUHRyPE5vZGVMaXN0PiBhZGRlZE5vZGVzID0gU3RhdGljTm9kZUxp
c3Q6OmFkb3B0KG1fYWRkZWROb2Rlcyk7CisgICAgUmVmUHRyPE5vZGVMaXN0PiByZW1vdmVkTm9k
ZXMgPSBTdGF0aWNOb2RlTGlzdDo6YWRvcHQobV9yZW1vdmVkTm9kZXMpOworICAgIFJlZlB0cjxN
dXRhdGlvblJlY29yZD4gcmVjb3JkID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoaWxkTGlzdCht
X3RhcmdldCwgYWRkZWROb2Rlcy5yZWxlYXNlKCksIHJlbW92ZWROb2Rlcy5yZWxlYXNlKCksIG1f
cHJldmlvdXNTaWJsaW5nLnJlbGVhc2UoKSwgbV9uZXh0U2libGluZy5yZWxlYXNlKCkpOworICAg
IG1fb2JzZXJ2ZXJzLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQocmVjb3JkLnJlbGVhc2UoKSk7CiAg
ICAgbV9sYXN0QWRkZWQgPSAwOworICAgIEFTU0VSVChpc0VtcHR5KCkpOwogfQogCi1ib29sIENo
aWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmlzRW1wdHkoKQotewot
ICAgIHJldHVybiBtX3JlbW92ZWROb2Rlcy5pc0VtcHR5KCkgJiYgbV9hZGRlZE5vZGVzLmlzRW1w
dHkoKTsKLX0KLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25S
b3V0ZXIqIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
OjpzX2luc3RhbmNlID0gMDsKLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1
bXVsYXRpb25Sb3V0ZXI6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKCkKLXsKLX0KLQotQ2hp
bGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6On5NdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcigpCi17Ci0gICAgQVNTRVJUKG1fc2NvcGluZ0xldmVscy5pc0Vt
cHR5KCkpOwotICAgIEFTU0VSVChtX2FjY3VtdWxhdGlvbnMuaXNFbXB0eSgpKTsKLX0KLQotdm9p
ZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5p
dGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFzX2luc3RhbmNlKTsKLSAgICBzX2luc3RhbmNlID0g
YWRvcHRQdHIobmV3IENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9u
Um91dGVyKS5sZWFrUHRyKCk7Ci19Ci0KLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRp
b25BY2N1bXVsYXRpb25Sb3V0ZXIqIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNj
dW11bGF0aW9uUm91dGVyOjppbnN0YW5jZSgpCi17Ci0gICAgaWYgKCFzX2luc3RhbmNlKQotICAg
ICAgICBpbml0aWFsaXplKCk7Ci0KLSAgICByZXR1cm4gc19pbnN0YW5jZTsKLX0KLQotdm9pZCBD
aGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6Y2hpbGRB
ZGRlZChOb2RlKiB0YXJnZXQsIE5vZGUqIGNoaWxkKQorYm9vbCBNdXRhdGlvbkFjY3VtdWxhdG9y
Ojppc0VtcHR5KCkKIHsKLSAgICBIYXNoTWFwPE5vZGUqLCBPd25QdHI8Q2hpbGRMaXN0TXV0YXRp
b25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcj4gPjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11
bGF0aW9ucy5maW5kKHRhcmdldCk7Ci0gICAgQVNTRVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25z
LmVuZCgpKTsKLSAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXIt
PnNlY29uZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXRlci0+c2Vjb25kLT5jaGlsZEFkZGVk
KGNoaWxkKTsKKyAgICBib29sIHJlc3VsdCA9IG1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSAmJiBt
X2FkZGVkTm9kZXMuaXNFbXB0eSgpOworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAocmVzdWx0KSB7
CisgICAgICAgIEFTU0VSVCghbV9wcmV2aW91c1NpYmxpbmcpOworICAgICAgICBBU1NFUlQoIW1f
bmV4dFNpYmxpbmcpOworICAgICAgICBBU1NFUlQoIW1fbGFzdEFkZGVkKTsKKyAgICB9CisjZW5k
aWYKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6
Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjp3aWxsUmVtb3ZlQ2hpbGQoTm9kZSogdGFyZ2V0
LCBOb2RlKiBjaGlsZCkKK3R5cGVkZWYgSGFzaE1hcDxOb2RlKiwgTXV0YXRpb25BY2N1bXVsYXRv
cio+IEFjY3VtdWxhdG9yTWFwOworc3RhdGljIEFjY3VtdWxhdG9yTWFwJiBhY2N1bXVsYXRvck1h
cCgpCiB7Ci0gICAgSGFzaE1hcDxOb2RlKiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9uU2NvcGU6
Ok11dGF0aW9uQWNjdW11bGF0b3I+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMu
ZmluZCh0YXJnZXQpOwotICAgIEFTU0VSVChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7
Ci0gICAgaWYgKGl0ZXIgPT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGl0ZXItPnNlY29uZC0+d2lsbFJlbW92ZUNoaWxkKGNo
aWxkKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEFjY3VtdWxhdG9yTWFwLCBtYXAsICgpKTsK
KyAgICByZXR1cm4gbWFwOwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0
aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0
KQorTXV0YXRpb25BY2N1bXVsYXRvciogTXV0YXRpb25BY2N1bXVsYXRvcjo6Z2V0T3JDcmVhdGUo
Tm9kZSogdGFyZ2V0KQogewotICAgIFNjb3BpbmdMZXZlbE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1fc2NvcGluZ0xldmVscy5hZGQodGFyZ2V0LCAxKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0Vu
dHJ5KSB7Ci0gICAgICAgICsrKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3Jv
dXA+IG9ic2VydmVycyA9IE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpjcmVhdGVGb3JD
aGlsZExpc3RNdXRhdGlvbih0YXJnZXQpKQotICAgICAgICBtX2FjY3VtdWxhdGlvbnMuc2V0KHRh
cmdldCwgYWRvcHRQdHIobmV3IENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11
bGF0b3IodGFyZ2V0LCBvYnNlcnZlcnMucmVsZWFzZSgpKSkpOwotI2lmbmRlZiBOREVCVUcKKyAg
ICBBY2N1bXVsYXRvck1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGFjY3VtdWxhdG9yTWFwKCkuYWRk
KHRhcmdldCwgMCk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgKysocmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQtPm1fc2NvcGluZ0xldmVsKTsKICAgICBlbHNlCi0gICAgICAg
IG1fYWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCBudWxscHRyKTsKLSNlbmRpZgorICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IG5ldyBNdXRhdGlvbkFjY3VtdWxhdG9yKHRhcmdldCwg
TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6OmNyZWF0ZUZvckNoaWxkTGlzdE11dGF0aW9u
KHRhcmdldCkpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKIH0KIAotdm9p
ZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6ZGVj
cmVtZW50U2NvcGluZ0xldmVsKE5vZGUqIHRhcmdldCkKK3ZvaWQgTXV0YXRpb25BY2N1bXVsYXRv
cjo6ZXhpdFNjb3BlKCkKIHsKLSAgICBTY29waW5nTGV2ZWxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3Njb3BpbmdMZXZlbHMuZmluZCh0YXJnZXQpOwotICAgIEFTU0VSVChpdGVyICE9IG1fc2NvcGlu
Z0xldmVscy5lbmQoKSk7Ci0KLSAgICAtLShpdGVyLT5zZWNvbmQpOwotICAgIGlmIChpdGVyLT5z
ZWNvbmQgPiAwKQorICAgIGlmICgtLW1fc2NvcGluZ0xldmVsID4gMCkKICAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9zY29waW5nTGV2ZWxzLnJlbW92ZShpdGVyKTsKLQotICAgIE93blB0cjxNdXRh
dGlvbkFjY3VtdWxhdG9yPiByZWNvcmQobV9hY2N1bXVsYXRpb25zLnRha2UodGFyZ2V0KSk7Ci0g
ICAgaWYgKHJlY29yZCkKLSAgICAgICAgcmVjb3JkLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsK
KyAgICBpZiAoIWlzRW1wdHkoKSkKKyAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Cisg
ICAgYWNjdW11bGF0b3JNYXAoKS5yZW1vdmUobV90YXJnZXQuZ2V0KCkpOworICAgIGRlbGV0ZSB0
aGlzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0No
aWxkTGlzdE11dGF0aW9uU2NvcGUuaAppbmRleCBlMDYyNGVmNWRiM2M4M2E3Y2I3ZGMyOTE2M2I0
MzViNGRiOTAyZTZjLi45ZTYwMDA5OWYxNGQ1OGNmMDE3Y2E1NDc3NjMyMTk3NDQ1YzhmYjM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmgKQEAgLTQyLDYy
ICs0Miw3NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIE11dGF0aW9uT2JzZXJ2
ZXJJbnRlcmVzdEdyb3VwOworCisvLyBNdXRhdGlvbkFjY3VtdWxhdG9yIGlzIG5vdCBtZWFudCB0
byBiZSB1c2VkIGRpcmVjdGx5OyBDaGlsZExpc3RNdXRhdGlvblNjb3BlIGlzIHRoZSBwdWJsaWMg
aW50ZXJmYWNlLgorLy8KKy8vIE11dGF0aW9uQWNjdW11bGF0b3IgZXhwZWN0cyB0aGF0IGFsbCBy
ZW1vdmFscyBmcm9tIGEgcGFyZW50IHRha2UgcGxhY2UgaW4gb3JkZXIKKy8vIGFuZCBwcmVjZWRl
IGFueSBhZGRpdGlvbnMuIElmIHRoaXMgaXMgdmlvbGF0ZWQgKGkuZS4gYmVjYXVzZSBvZiBjb2Rl
IGNoYW5nZXMgZWxzZXdoZXJlCisvLyBpbiBXZWJDb3JlKSBpdCB3aWxsIGxpa2VseSByZXN1bHQg
aW4gYm90aCAoYSkgQVNTRVJUaW9ucyBmYWlsaW5nLCBhbmQgKGIpIG11dGF0aW9uIHJlY29yZHMK
Ky8vIGJlaW5nIGVucXVldWVkIGZvciBkZWxpdmVyeSBiZWZvcmUgdGhlIG91dGVyLW1vc3Qgc2Nv
cGUgY2xvc2VzLgorY2xhc3MgTXV0YXRpb25BY2N1bXVsYXRvciB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoTXV0YXRpb25BY2N1bXVsYXRvcik7CitwdWJsaWM6CisgICAgc3RhdGljIE11dGF0
aW9uQWNjdW11bGF0b3IqIGdldE9yQ3JlYXRlKE5vZGUqKTsKKyAgICB2b2lkIGV4aXRTY29wZSgp
OworCisgICAgdm9pZCBjaGlsZEFkZGVkKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgd2ls
bFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4pOworCisgICAgYm9vbCBoYXNPYnNlcnZlcnMo
KSBjb25zdCB7IHJldHVybiBtX29ic2VydmVyczsgfQorCitwcml2YXRlOgorICAgIE11dGF0aW9u
QWNjdW11bGF0b3IoUGFzc1JlZlB0cjxOb2RlPiwgUGFzc093blB0cjxNdXRhdGlvbk9ic2VydmVy
SW50ZXJlc3RHcm91cD4pOworICAgIH5NdXRhdGlvbkFjY3VtdWxhdG9yKCk7CisKKyAgICB2b2lk
IGVucXVldWVNdXRhdGlvblJlY29yZCgpOworICAgIGJvb2wgaXNFbXB0eSgpOworICAgIGJvb2wg
aXNBZGRlZE5vZGVJbk9yZGVyKE5vZGUqKTsKKyAgICBib29sIGlzUmVtb3ZlZE5vZGVJbk9yZGVy
KE5vZGUqKTsKKworICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKKyAgICB1bnNpZ25lZCBtX3Nj
b3BpbmdMZXZlbDsKKworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBtX3JlbW92ZWROb2RlczsK
KyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9hZGRlZE5vZGVzOworICAgIFJlZlB0cjxOb2Rl
PiBtX3ByZXZpb3VzU2libGluZzsKKyAgICBSZWZQdHI8Tm9kZT4gbV9uZXh0U2libGluZzsKKyAg
ICBOb2RlKiBtX2xhc3RBZGRlZDsKKworICAgIE93blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJl
c3RHcm91cD4gbV9vYnNlcnZlcnM7Cit9OworCiBjbGFzcyBDaGlsZExpc3RNdXRhdGlvblNjb3Bl
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDaGlsZExpc3RNdXRhdGlvblNjb3BlKTsKIHB1
YmxpYzoKICAgICBleHBsaWNpdCBDaGlsZExpc3RNdXRhdGlvblNjb3BlKE5vZGUqIHRhcmdldCkK
LSAgICAgICAgOiBtX3RhcmdldCh0YXJnZXQtPmRvY3VtZW50KCktPmhhc011dGF0aW9uT2JzZXJ2
ZXJzT2ZUeXBlKE11dGF0aW9uT2JzZXJ2ZXI6OkNoaWxkTGlzdCkgPyB0YXJnZXQgOiAwKQorICAg
ICAgICA6IG1fYWNjdW11bGF0b3IoMCkKICAgICB7Ci0gICAgICAgIGlmIChtX3RhcmdldCkKLSAg
ICAgICAgICAgIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbnN0YW5jZSgpLT5pbmNyZW1l
bnRTY29waW5nTGV2ZWwobV90YXJnZXQpOworICAgICAgICBpZiAodGFyZ2V0LT5kb2N1bWVudCgp
LT5oYXNNdXRhdGlvbk9ic2VydmVyc09mVHlwZShNdXRhdGlvbk9ic2VydmVyOjpDaGlsZExpc3Qp
KQorICAgICAgICAgICAgbV9hY2N1bXVsYXRvciA9IE11dGF0aW9uQWNjdW11bGF0b3I6OmdldE9y
Q3JlYXRlKHRhcmdldCk7CiAgICAgfQogCiAgICAgfkNoaWxkTGlzdE11dGF0aW9uU2NvcGUoKQog
ICAgIHsKLSAgICAgICAgaWYgKG1fdGFyZ2V0KQotICAgICAgICAgICAgTXV0YXRpb25BY2N1bXVs
YXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPmRlY3JlbWVudFNjb3BpbmdMZXZlbChtX3RhcmdldCk7
CisgICAgICAgIGlmIChtX2FjY3VtdWxhdG9yKQorICAgICAgICAgICAgbV9hY2N1bXVsYXRvci0+
ZXhpdFNjb3BlKCk7CiAgICAgfQogCiAgICAgdm9pZCBjaGlsZEFkZGVkKE5vZGUqIGNoaWxkKQog
ICAgIHsKLSAgICAgICAgaWYgKG1fdGFyZ2V0KQotICAgICAgICAgICAgTXV0YXRpb25BY2N1bXVs
YXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPmNoaWxkQWRkZWQobV90YXJnZXQsIGNoaWxkKTsKKyAg
ICAgICAgaWYgKG1fYWNjdW11bGF0b3IgJiYgbV9hY2N1bXVsYXRvci0+aGFzT2JzZXJ2ZXJzKCkp
CisgICAgICAgICAgICBtX2FjY3VtdWxhdG9yLT5jaGlsZEFkZGVkKGNoaWxkKTsKICAgICB9CiAK
ICAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChOb2RlKiBjaGlsZCkKICAgICB7Ci0gICAgICAgIGlm
IChtX3RhcmdldCkKLSAgICAgICAgICAgIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbnN0
YW5jZSgpLT53aWxsUmVtb3ZlQ2hpbGQobV90YXJnZXQsIGNoaWxkKTsKKyAgICAgICAgaWYgKG1f
YWNjdW11bGF0b3IgJiYgbV9hY2N1bXVsYXRvci0+aGFzT2JzZXJ2ZXJzKCkpCisgICAgICAgICAg
ICBtX2FjY3VtdWxhdG9yLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOwogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBjbGFzcyBNdXRhdGlvbkFjY3VtdWxhdG9yOwotCi0gICAgY2xhc3MgTXV0YXRpb25B
Y2N1bXVsYXRpb25Sb3V0ZXIgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcik7Ci0gICAgcHVibGljOgotICAgICAgICB+TXV0YXRpb25BY2N1
bXVsYXRpb25Sb3V0ZXIoKTsKLQotICAgICAgICBzdGF0aWMgTXV0YXRpb25BY2N1bXVsYXRpb25S
b3V0ZXIqIGluc3RhbmNlKCk7Ci0KLSAgICAgICAgdm9pZCBpbmNyZW1lbnRTY29waW5nTGV2ZWwo
Tm9kZSopOwotICAgICAgICB2b2lkIGRlY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKik7Ci0KLSAg
ICAgICAgdm9pZCBjaGlsZEFkZGVkKE5vZGUqIHRhcmdldCwgTm9kZSogY2hpbGQpOwotICAgICAg
ICB2b2lkIHdpbGxSZW1vdmVDaGlsZChOb2RlKiB0YXJnZXQsIE5vZGUqIGNoaWxkKTsKLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKCk7Ci0gICAgICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKLQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8Tm9k
ZSosIHVuc2lnbmVkPiBTY29waW5nTGV2ZWxNYXA7Ci0gICAgICAgIFNjb3BpbmdMZXZlbE1hcCBt
X3Njb3BpbmdMZXZlbHM7Ci0gICAgICAgIEhhc2hNYXA8Tm9kZSosIE93blB0cjxNdXRhdGlvbkFj
Y3VtdWxhdG9yPiA+IG1fYWNjdW11bGF0aW9uczsKLQotICAgICAgICBzdGF0aWMgTXV0YXRpb25B
Y2N1bXVsYXRpb25Sb3V0ZXIqIHNfaW5zdGFuY2U7Ci0gICAgfTsKLQotICAgIE5vZGUqIG1fdGFy
Z2V0OworICAgIE11dGF0aW9uQWNjdW11bGF0b3IqIG1fYWNjdW11bGF0b3I7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IDY0
MWMwYjg5MGIyYWQ3MTMzMTE4MmYzYTZhMDIyNTM4ZmEzYTczNTUuLmNhZjRhYzkzOTg1MTZlZGI1
Y2ZiZTA0YzM2MzFhZmY0MzUzMjhjM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3Bw
CkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1
ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKLSNpbmNs
dWRlICJDaGlsZExpc3RNdXRhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiRE9NU2V0dGFibGVUb2tl
bkxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQu
aCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165220</attachid>
            <date>2012-09-21 16:12:10 -0700</date>
            <delta_ts>2012-09-21 16:49:16 -0700</delta_ts>
            <desc>Alternate approach: RefCount MutationAccumulator</desc>
            <filename>bug-97352-20120921161134.patch</filename>
            <type>text/plain</type>
            <size>17495</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjlmYjczNTExMmRhYWUx
ZjQ0MmQ0MmMzMzllZjFkMjUwYThhNDk4ZC4uZTg0NzlmYTZlOWNjNzZiMzU3M2NjZTNjZWIzODdl
ZjA3ZTYxYTNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTA5LTIxICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IGFuZCBvcHRp
bWl6ZSBDaGlsZExpc3RNdXRhdGlvblNjb3BlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NzM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgaXMgb25lIG9mIHRoZSBt
b3N0IGNvbXBsaWNhdGVkIGJpdHMgb2YKKyAgICAgICAgTXV0YXRpb25PYnNlcnZlciBpbXBsZW1l
bnRhdGlvbi4gVGhpcyBwYXRjaCBhaW1zIHRvIHNpbXBsaWZ5IGl0IGZvcgorICAgICAgICBjbGFy
aXR5IGFuZCBpbXByb3ZlIGl0cyBwZXJmb3JtYW5jZSAobW9zdGx5IGJ5IGp1c3QgZG9pbmcgbGVz
cykuCisKKyAgICAgICAgVGhlIGJpZyBjaGFuZ2UgaXMgdG8gcmVtb3ZlIHRoZSBNdXRhdGlvbkFj
Y3VtdWxhdG9yUm91dGVyIGNsYXNzLAorICAgICAgICByZXBsYWNpbmcgaXQgd2l0aCBsaWZldGlt
ZS1tYW5hZ2VtZW50IGxvZ2ljIGluIE11dGF0aW9uQWNjdW11bGF0b3IKKyAgICAgICAgQ2hpbGRM
aXN0TXV0YXRpb25TY29wZSBpcyBleHBlY3RlZCB0byBjYWxsIGdldE9yQ3JlYXRlKCkgaW4KKyAg
ICAgICAgaXRzIGNvbnN0cnVjdG9yLCBhbmQgZWFjaCBzY29wZSBob2xkcyBhIFJlZlB0ciB0byB0
aGUgYWNjdW11bGF0b3IuCisgICAgICAgIFdoZW4gdGhlIGxhc3Qgc2NvcGUgaG9sZGluZyBzdWNo
IGEgUmVmUHRyIGlzIGRlc3Ryb3llZCwKKyAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRvcidzIGRl
c3RydWN0b3IgZW5xdWV1ZXMgdGhlIGFjY3VtdWxhdGVkIHJlY29yZC4KKworICAgICAgICBUaGlz
IGdyZWF0bHkgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGxpbmVzIG9mIGNvZGUsIGFuZCBjb25kZW5z
ZXMKKyAgICAgICAgdHdvIEhhc2hNYXBzIGludG8gb25lLiBJdCBhbHNvIHJlZHVjZXMgaGFzaCBs
b29rdXBzLCB3aGljaCBub3cKKyAgICAgICAgb2NjdXIgb25seSBvbiBzY29wZSBjcmVhdGlvbiBh
bmQgd2hlbiB0aGUgc2NvcGluZyBsZXZlbCBmb3IgYSBnaXZlbgorICAgICAgICBhY2N1bXVsYXRv
ciByZWFjaGVzIDAgKHByZXZpb3VzbHksIGVhY2ggY2hpbGRBZGRlZCBhbmQgd2lsbFJlbW92ZUNo
aWxkCisgICAgICAgIGNhbGwgY291bGQgcmVzdWx0IGluIHR3byBoYXNoIGxvb2t1cHMgZWFjaCku
CisKKyAgICAgICAgVGhlcmUgYXJlIHNvbWUgbWlub3IgY2hhbmdlcyBhcyB3ZWxsOiB0aGUgTXV0
YXRpb25BY2N1bXVsYXRvcjo6Y2xlYXIoKQorICAgICAgICBtZXRob2QgaXMgZ29uZSwgYXMgaXQg
d2FzIGRvaW5nIG1vcmUgd29yayB0aGFuIG5lY2Vzc2FyeTsKKyAgICAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTCBpcyBub3cgdXNlZCBpbnN0ZWFkIG9mIGhhbmQtcm9sbGVkIHN0YXRpYy1tYW5hZ2Vt
ZW50CisgICAgICAgIGNvZGU7IE11dGF0aW9uQWNjdW11bGF0b3I6Om1fbGFzdEFkZGVkIGlzIG5v
IGxvbmdlciBhIFJlZlB0ciwgc2luY2UgaXQKKyAgICAgICAgYWx3YXlzIHBvaW50cyBhdCBhIE5v
ZGUgdGhhdCdzIGFscmVhZHkgYmVpbmcgcmVmJ2QgYnkgdGhlIGFjY3VtdWxhdG9yLgorICAgICAg
ICBBbHNvIHZhcmlvdXMgbWlub3Igc3ludGFjdGljIGNsZWFudXBzLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogZG9tL0NoaWxkTGlz
dE11dGF0aW9uU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25BY2N1bXVsYXRv
cjo6TXV0YXRpb25BY2N1bXVsYXRvcik6IFJlbW92ZSB1bm5lY2Vzc2FyeSBjYWxsIHRvIGNsZWFy
KCkgKHdoaWNoIGl0c2VsZiBoYXMgYmVlbiByZW1vdmVkKS4KKyAgICAgICAgKFdlYkNvcmU6Ok11
dGF0aW9uQWNjdW11bGF0b3I6On5NdXRhdGlvbkFjY3VtdWxhdG9yKTogRW5xdWV1ZSByZWNvcmQg
aWYgbm90IGVtcHR5IGF0IGRlc3RydWN0aW9uLCBhbmQgaGF2ZSB0aGUgYWNjdW11bGF0b3IKKyAg
ICAgICAgcmVtb3ZlIGl0c2VsZiBmcm9tIHRoZSBtYXAuCisgICAgICAgIChXZWJDb3JlOjpNdXRh
dGlvbkFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKTogTWlub3IgUmVmUHRyIHVzYWdlIGltcHJvdmVt
ZW50cy4KKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmlzUmVtb3ZlZE5v
ZGVJbk9yZGVyKTogU2ltcGxpZnkgUmVmUHRyIHN5bnRheC4KKyAgICAgICAgKFdlYkNvcmU6Ok11
dGF0aW9uQWNjdW11bGF0b3I6OndpbGxSZW1vdmVDaGlsZCk6IE1pbm9yIFJlZlB0ciB1c2FnZSBp
bXByb3ZlbWVudHMuCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjplbnF1
ZXVlTXV0YXRpb25SZWNvcmQpOiBSZXBsYWNlIGNhbGwgdG8gY2xlYXIoKSB3aXRoIGNsZWFyaW5n
IG1fbGFzdEFkZGVkLAorICAgICAgICBzaW5jZSBpdCdzIHRoZSBvbmx5IGJpdCBub3QgY2xlYXJl
ZCBieSB0aGUgTXV0YXRpb25SZWNvcmQgY3JlYXRpb24gY2FsbC4gQWxzbyByZW1vdmUKKyAgICAg
ICAgaXNFbXB0eSBjaGVjayBhbmQgcmVwbGFjZSB3aXRoIGFzc2VydHMgbm93IHRoYXQgaXQncyBh
IHByaXZhdGUgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6
aXNFbXB0eSk6IEFkZGVkIG1vcmUgYXNzZXJ0aW9ucyBhYm91dCBlbXB0aW5lc3MuCisgICAgICAg
IChXZWJDb3JlOjphY2N1bXVsYXRvck1hcCk6IFJlZHVjZWQgdHdvIG1hcHMgdG8gb25lLCBhbmQg
bWFuYWdlIGl0cyBsaWZldGltZSB3aXRoIERFRklORV9TVEFUSUNfTE9DQUwuCisgICAgICAgIChX
ZWJDb3JlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpnZXRPckNyZWF0ZSk6IFJlcGxhY2VzIGhhbGYg
b2YgTXV0YXRpb25BY2N1bXVsYXRvclJvdXRlcidzIGpvYi4KKyAgICAgICAgKFdlYkNvcmU6Ok11
dGF0aW9uQWNjdW11bGF0b3I6OmV4aXRTY29wZSk6IFJlcGxhY2VzIHRoZSBvdGhlciBoYWxmIG9m
IHRoZSByb3V0ZXIncyBqb2IsIGFuZCBoYW5kbGVzIHRoZSBsaWZldGltZSBvZiBNdXRhdGlvbkFj
Y3VtdWxhdG9ycy4KKyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNdXRhdGlvbkFjY3VtdWxhdG9yKTogRXh0cmFjdCB0
aGUgaW5uZXIgY2xhc3MgdG8gbWFrZSBldmVyeXRoaW5nIGVhc2llciB0byByZWFkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29w
ZSk6IFN0b3JlIG1fYWNjdW11bGF0b3IgcmF0aGVyIHRoYW4gbV90YXJnZXQuCisgICAgICAgIChX
ZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjp+Q2hpbGRMaXN0TXV0YXRpb25TY29wZSk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpjaGlsZEFk
ZGVkKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ondp
bGxSZW1vdmVDaGlsZCk6IGRpdHRvCisgICAgICAgIChDaGlsZExpc3RNdXRhdGlvblNjb3BlKToK
KyAgICAgICAgKE11dGF0aW9uQWNjdW11bGF0b3IpOiBNb3ZlZCBjbGFzcyBkZWNsYXJhdGlvbiBp
bnRvIGhlYWRlciBmaWxlLCBzaW5jZQorICAgICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlJ3Mg
aW5saW5lIG1ldGhvZHMgbmVlZCB0byBjYWxsIHRoZXNlIG1ldGhvZHMuCisgICAgICAgICogaHRt
bC9IVE1MRWxlbWVudC5jcHA6IFJlbW92ZSB1bnVzZWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5o
ICNpbmNsdWRlLgorCiAyMDEyLTA5LTE5ICBSb2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAg
ICAgICAgW0JsYWNrQmVycnldIFJlbW92ZSBjdXN0b20gcGFpbnRpbmcgY29kZSBmb3Igc2VhcmNo
Q2FuY2VsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAK
aW5kZXggZjRhMmRhMDRhYjYxNTgxM2Y4NjRhZTEzNTZmNGVhYTRkYjBiZmU0OS4uN2VjNmNhYjFi
ZTIzMDk0MTg5MjJlMzkyZDk1NzQ0NWFiYWJiZjkxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcApAQCAtNDIsNjAgKzQyLDU0IEBACiAjaW5jbHVk
ZSAiU3RhdGljTm9kZUxpc3QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotLy8gTXV0YXRpb25BY2N1bXVsYXRvciBleHBlY3RzIHRoYXQgYWxsIHJl
bW92YWxzIGZyb20gYSBwYXJlbnQgdGFrZSBwbGFjZSBpbiBvcmRlcgotLy8gYW5kIHByZWNlZGUg
YW55IGFkZGl0aW9ucy4gSWYgdGhpcyBpcyB2aW9sYXRlZCAoaS5lLiBiZWNhdXNlIG9mIGNvZGUg
Y2hhbmdlcyBlbHNld2hlcmUKLS8vIGluIFdlYkNvcmUpIGl0IHdpbGwgbGlrZWx5IHJlc3VsdCBp
biBib3RoIChhKSBBU1NFUlRpb25zIGZhaWxpbmcsIGFuZCAoYikgbXV0YXRpb24gcmVjb3Jkcwot
Ly8gYmVpbmcgZW5xdWV1ZWQgZm9yIGRlbGl2ZXJ5IGJlZm9yZSB0aGUgb3V0ZXItbW9zdCBzY29w
ZSBjbG9zZXMuCi1jbGFzcyBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxh
dG9yIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNdXRhdGlvbkFjY3VtdWxhdG9yKTsKLXB1
YmxpYzoKLSAgICBNdXRhdGlvbkFjY3VtdWxhdG9yKFBhc3NSZWZQdHI8Tm9kZT4sIFBhc3NPd25Q
dHI8TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA+IG9ic2VydmVycyk7Ci0gICAgfk11dGF0
aW9uQWNjdW11bGF0b3IoKTsKLQotICAgIHZvaWQgY2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+
KTsKLSAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+KTsKLSAgICB2b2lk
IGVucXVldWVNdXRhdGlvblJlY29yZCgpOwotCi1wcml2YXRlOgotICAgIHZvaWQgY2xlYXIoKTsK
LSAgICBib29sIGlzRW1wdHkoKTsKLSAgICBib29sIGlzQWRkZWROb2RlSW5PcmRlcihOb2RlKik7
Ci0gICAgYm9vbCBpc1JlbW92ZWROb2RlSW5PcmRlcihOb2RlKik7Ci0gICAgUmVmUHRyPE5vZGU+
IG1fdGFyZ2V0OwotCi0gICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG1fcmVtb3ZlZE5vZGVzOwot
ICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBtX2FkZGVkTm9kZXM7Ci0gICAgUmVmUHRyPE5vZGU+
IG1fcHJldmlvdXNTaWJsaW5nOwotICAgIFJlZlB0cjxOb2RlPiBtX25leHRTaWJsaW5nOwotICAg
IFJlZlB0cjxOb2RlPiBtX2xhc3RBZGRlZDsKLQotICAgIE93blB0cjxNdXRhdGlvbk9ic2VydmVy
SW50ZXJlc3RHcm91cD4gbV9vYnNlcnZlcnM7Ci19OwotCi1DaGlsZExpc3RNdXRhdGlvblNjb3Bl
OjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpNdXRhdGlvbkFjY3VtdWxhdG9yKFBhc3NSZWZQdHI8Tm9k
ZT4gdGFyZ2V0LCBQYXNzT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiBvYnNl
cnZlcnMpCit0eXBlZGVmIEhhc2hNYXA8Tm9kZSosIE11dGF0aW9uQWNjdW11bGF0b3IqPiBBY2N1
bXVsYXRvck1hcDsKK3N0YXRpYyBBY2N1bXVsYXRvck1hcCYgYWNjdW11bGF0b3JNYXAoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQWNjdW11bGF0b3JNYXAsIG1hcCwgKCkpOworICAgIHJl
dHVybiBtYXA7Cit9CisKK011dGF0aW9uQWNjdW11bGF0b3I6Ok11dGF0aW9uQWNjdW11bGF0b3Io
UGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIFBhc3NPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXA+IG9ic2VydmVycykKICAgICA6IG1fdGFyZ2V0KHRhcmdldCkKKyAgICAsIG1fbGFz
dEFkZGVkKDApCiAgICAgLCBtX29ic2VydmVycyhvYnNlcnZlcnMpCiB7Ci0gICAgY2xlYXIoKTsK
IH0KIAotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6fk11dGF0
aW9uQWNjdW11bGF0b3IoKQorTXV0YXRpb25BY2N1bXVsYXRvcjo6fk11dGF0aW9uQWNjdW11bGF0
b3IoKQogewotICAgIEFTU0VSVChpc0VtcHR5KCkpOworICAgIGlmICghaXNFbXB0eSgpKQorICAg
ICAgICBlbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKKyAgICBhY2N1bXVsYXRvck1hcCgpLnJlbW92
ZShtX3RhcmdldC5nZXQoKSk7CiB9CiAKLWlubGluZSBib29sIENoaWxkTGlzdE11dGF0aW9uU2Nv
cGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmlzQWRkZWROb2RlSW5PcmRlcihOb2RlKiBjaGlsZCkK
K1Bhc3NSZWZQdHI8TXV0YXRpb25BY2N1bXVsYXRvcj4gTXV0YXRpb25BY2N1bXVsYXRvcjo6Z2V0
T3JDcmVhdGUoTm9kZSogdGFyZ2V0KQoreworICAgIEFjY3VtdWxhdG9yTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gYWNjdW11bGF0b3JNYXAoKS5hZGQodGFyZ2V0LCAwKTsKKyAgICBSZWZQdHI8TXV0
YXRpb25BY2N1bXVsYXRvcj4gYWNjdW11bGF0b3I7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkKKyAgICAgICAgYWNjdW11bGF0b3IgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBl
bHNlIHsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBhZG9wdFJlZihuZXcgTXV0YXRpb25BY2N1bXVs
YXRvcih0YXJnZXQsIE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpjcmVhdGVGb3JDaGls
ZExpc3RNdXRhdGlvbih0YXJnZXQpKSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
ID0gYWNjdW11bGF0b3IuZ2V0KCk7CisgICAgfQorICAgIHJldHVybiBhY2N1bXVsYXRvci5yZWxl
YXNlKCk7Cit9CisKK2lubGluZSBib29sIE11dGF0aW9uQWNjdW11bGF0b3I6OmlzQWRkZWROb2Rl
SW5PcmRlcihOb2RlKiBjaGlsZCkKIHsKICAgICByZXR1cm4gaXNFbXB0eSgpIHx8IChtX2xhc3RB
ZGRlZCA9PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgJiYgbV9uZXh0U2libGluZyA9PSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSk7CiB9CiAKLXZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0
YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxkKQor
dm9pZCBNdXRhdGlvbkFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKFBhc3NSZWZQdHI8Tm9kZT4gcHJw
Q2hpbGQpCiB7CiAgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7CiAKKyAgICBBU1NF
UlQoaGFzT2JzZXJ2ZXJzKCkpOwogICAgIEFTU0VSVChpc0FkZGVkTm9kZUluT3JkZXIoY2hpbGQu
Z2V0KCkpKTsKICAgICBpZiAoIWlzQWRkZWROb2RlSW5PcmRlcihjaGlsZC5nZXQoKSkpCiAgICAg
ICAgIGVucXVldWVNdXRhdGlvblJlY29yZCgpOwpAQCAtMTA1LDIxICs5OSwyMSBAQCB2b2lkIENo
aWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmNoaWxkQWRkZWQoUGFz
c1JlZlB0cjxOb2RlPiBwcgogICAgICAgICBtX25leHRTaWJsaW5nID0gY2hpbGQtPm5leHRTaWJs
aW5nKCk7CiAgICAgfQogCi0gICAgbV9hZGRlZE5vZGVzLmFwcGVuZChjaGlsZCk7Ci0gICAgbV9s
YXN0QWRkZWQgPSBjaGlsZDsKKyAgICBtX2xhc3RBZGRlZCA9IGNoaWxkLmdldCgpOworICAgIG1f
YWRkZWROb2Rlcy5hcHBlbmQoY2hpbGQucmVsZWFzZSgpKTsKIH0KIAotaW5saW5lIGJvb2wgQ2hp
bGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6aXNSZW1vdmVkTm9kZUlu
T3JkZXIoTm9kZSogY2hpbGQpCitpbmxpbmUgYm9vbCBNdXRhdGlvbkFjY3VtdWxhdG9yOjppc1Jl
bW92ZWROb2RlSW5PcmRlcihOb2RlKiBjaGlsZCkKIHsKLSAgICByZXR1cm4gaXNFbXB0eSgpIHx8
IG1fbmV4dFNpYmxpbmcuZ2V0KCkgPT0gY2hpbGQ7CisgICAgcmV0dXJuIGlzRW1wdHkoKSB8fCBt
X25leHRTaWJsaW5nID09IGNoaWxkOwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6
Ok11dGF0aW9uQWNjdW11bGF0b3I6OndpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+IHBy
cENoaWxkKQordm9pZCBNdXRhdGlvbkFjY3VtdWxhdG9yOjp3aWxsUmVtb3ZlQ2hpbGQoUGFzc1Jl
ZlB0cjxOb2RlPiBwcnBDaGlsZCkKIHsKICAgICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBwcnBDaGls
ZDsKIAorICAgIEFTU0VSVChoYXNPYnNlcnZlcnMoKSk7CiAgICAgQVNTRVJUKG1fYWRkZWROb2Rl
cy5pc0VtcHR5KCkgJiYgaXNSZW1vdmVkTm9kZUluT3JkZXIoY2hpbGQuZ2V0KCkpKTsKLQogICAg
IGlmICghbV9hZGRlZE5vZGVzLmlzRW1wdHkoKSB8fCAhaXNSZW1vdmVkTm9kZUluT3JkZXIoY2hp
bGQuZ2V0KCkpKQogICAgICAgICBlbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKIApAQCAtMTMwLDEx
NCArMTI0LDMzIEBAIHZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVs
YXRvcjo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kCiAgICAgfSBlbHNlCiAgICAgICAg
IG1fbmV4dFNpYmxpbmcgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKIAotICAgIG1fcmVtb3ZlZE5v
ZGVzLmFwcGVuZChjaGlsZCk7CisgICAgbV9yZW1vdmVkTm9kZXMuYXBwZW5kKGNoaWxkLnJlbGVh
c2UoKSk7CiB9CiAKLXZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVs
YXRvcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCkKK3ZvaWQgTXV0YXRpb25BY2N1bXVsYXRvcjo6
ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCkKIHsKLSAgICBpZiAoaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVycy0+ZW5x
dWV1ZU11dGF0aW9uUmVjb3JkKE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGlsZExpc3QoCi0gICAg
ICAgICAgICBtX3RhcmdldCwgU3RhdGljTm9kZUxpc3Q6OmFkb3B0KG1fYWRkZWROb2RlcyksIFN0
YXRpY05vZGVMaXN0OjphZG9wdChtX3JlbW92ZWROb2RlcyksIG1fcHJldmlvdXNTaWJsaW5nLnJl
bGVhc2UoKSwgbV9uZXh0U2libGluZy5yZWxlYXNlKCkpKTsKLSAgICBjbGVhcigpOwotfQorICAg
IEFTU0VSVChoYXNPYnNlcnZlcnMoKSk7CisgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwogCi12b2lk
IENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmNsZWFyKCkKLXsK
LSAgICBpZiAoIW1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9yZW1vdmVkTm9k
ZXMuY2xlYXIoKTsKLSAgICBpZiAoIW1fYWRkZWROb2Rlcy5pc0VtcHR5KCkpCi0gICAgICAgIG1f
YWRkZWROb2Rlcy5jbGVhcigpOwotICAgIG1fcHJldmlvdXNTaWJsaW5nID0gMDsKLSAgICBtX25l
eHRTaWJsaW5nID0gMDsKKyAgICBSZWZQdHI8Tm9kZUxpc3Q+IGFkZGVkTm9kZXMgPSBTdGF0aWNO
b2RlTGlzdDo6YWRvcHQobV9hZGRlZE5vZGVzKTsKKyAgICBSZWZQdHI8Tm9kZUxpc3Q+IHJlbW92
ZWROb2RlcyA9IFN0YXRpY05vZGVMaXN0OjphZG9wdChtX3JlbW92ZWROb2Rlcyk7CisgICAgUmVm
UHRyPE11dGF0aW9uUmVjb3JkPiByZWNvcmQgPSBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hpbGRM
aXN0KG1fdGFyZ2V0LCBhZGRlZE5vZGVzLnJlbGVhc2UoKSwgcmVtb3ZlZE5vZGVzLnJlbGVhc2Uo
KSwgbV9wcmV2aW91c1NpYmxpbmcucmVsZWFzZSgpLCBtX25leHRTaWJsaW5nLnJlbGVhc2UoKSk7
CisgICAgbV9vYnNlcnZlcnMtPmVucXVldWVNdXRhdGlvblJlY29yZChyZWNvcmQucmVsZWFzZSgp
KTsKICAgICBtX2xhc3RBZGRlZCA9IDA7CisgICAgQVNTRVJUKGlzRW1wdHkoKSk7CiB9CiAKLWJv
b2wgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6aXNFbXB0eSgp
Ci17Ci0gICAgcmV0dXJuIG1fcmVtb3ZlZE5vZGVzLmlzRW1wdHkoKSAmJiBtX2FkZGVkTm9kZXMu
aXNFbXB0eSgpOwotfQotCi1DaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxh
dGlvblJvdXRlciogQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25S
b3V0ZXI6OnNfaW5zdGFuY2UgPSAwOwotCi1DaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcjo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIoKQotewotfQot
Ci1DaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6fk11
dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKCkKLXsKLSAgICBBU1NFUlQobV9zY29waW5nTGV2ZWxz
LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fYWNjdW11bGF0aW9ucy5pc0VtcHR5KCkpOwotfQot
Ci12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
Ojppbml0aWFsaXplKCkKLXsKLSAgICBBU1NFUlQoIXNfaW5zdGFuY2UpOwotICAgIHNfaW5zdGFu
Y2UgPSBhZG9wdFB0cihuZXcgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVs
YXRpb25Sb3V0ZXIpLmxlYWtQdHIoKTsKLX0KLQotCi1DaGlsZExpc3RNdXRhdGlvblNjb3BlOjpN
dXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciogQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRp
b25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCkKLXsKLSAgICBpZiAoIXNfaW5zdGFuY2Up
Ci0gICAgICAgIGluaXRpYWxpemUoKTsKLQotICAgIHJldHVybiBzX2luc3RhbmNlOwotfQotCi12
b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpj
aGlsZEFkZGVkKE5vZGUqIHRhcmdldCwgTm9kZSogY2hpbGQpCi17Ci0gICAgSGFzaE1hcDxOb2Rl
KiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I+ID46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOwotICAgIEFTU0VS
VChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9hY2N1
bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGl0ZXItPnNlY29uZC0+Y2hpbGRBZGRlZChjaGlsZCk7Ci19Ci0KLXZvaWQgQ2hpbGRMaXN0TXV0
YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OndpbGxSZW1vdmVDaGlsZChO
b2RlKiB0YXJnZXQsIE5vZGUqIGNoaWxkKQotewotICAgIEhhc2hNYXA8Tm9kZSosIE93blB0cjxD
aGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yPiA+OjppdGVyYXRvciBp
dGVyID0gbV9hY2N1bXVsYXRpb25zLmZpbmQodGFyZ2V0KTsKLSAgICBBU1NFUlQoaXRlciAhPSBt
X2FjY3VtdWxhdGlvbnMuZW5kKCkpOwotICAgIGlmIChpdGVyID09IG1fYWNjdW11bGF0aW9ucy5l
bmQoKSB8fCAhaXRlci0+c2Vjb25kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpdGVyLT5zZWNv
bmQtPndpbGxSZW1vdmVDaGlsZChjaGlsZCk7Ci19Ci0KLXZvaWQgQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmluY3JlbWVudFNjb3BpbmdMZXZlbChO
b2RlKiB0YXJnZXQpCitib29sIE11dGF0aW9uQWNjdW11bGF0b3I6OmlzRW1wdHkoKQogewotICAg
IFNjb3BpbmdMZXZlbE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fc2NvcGluZ0xldmVscy5hZGQo
dGFyZ2V0LCAxKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICsrKHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA+IG9ic2VydmVycyA9IE11dGF0
aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpjcmVhdGVGb3JDaGlsZExpc3RNdXRhdGlvbih0YXJn
ZXQpKQotICAgICAgICBtX2FjY3VtdWxhdGlvbnMuc2V0KHRhcmdldCwgYWRvcHRQdHIobmV3IENo
aWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3IodGFyZ2V0LCBvYnNlcnZl
cnMucmVsZWFzZSgpKSkpOworICAgIGJvb2wgcmVzdWx0ID0gbV9yZW1vdmVkTm9kZXMuaXNFbXB0
eSgpICYmIG1fYWRkZWROb2Rlcy5pc0VtcHR5KCk7CiAjaWZuZGVmIE5ERUJVRwotICAgIGVsc2UK
LSAgICAgICAgbV9hY2N1bXVsYXRpb25zLnNldCh0YXJnZXQsIG51bGxwdHIpOworICAgIGlmIChy
ZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFtX3ByZXZpb3VzU2libGluZyk7CisgICAgICAgIEFT
U0VSVCghbV9uZXh0U2libGluZyk7CisgICAgICAgIEFTU0VSVCghbV9sYXN0QWRkZWQpOworICAg
IH0KICNlbmRpZgotfQotCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNj
dW11bGF0aW9uUm91dGVyOjpkZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSogdGFyZ2V0KQotewot
ICAgIFNjb3BpbmdMZXZlbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2NvcGluZ0xldmVscy5maW5k
KHRhcmdldCk7Ci0gICAgQVNTRVJUKGl0ZXIgIT0gbV9zY29waW5nTGV2ZWxzLmVuZCgpKTsKLQot
ICAgIC0tKGl0ZXItPnNlY29uZCk7Ci0gICAgaWYgKGl0ZXItPnNlY29uZCA+IDApCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2NvcGluZ0xldmVscy5yZW1vdmUoaXRlcik7Ci0KLSAgICBPd25Q
dHI8TXV0YXRpb25BY2N1bXVsYXRvcj4gcmVjb3JkKG1fYWNjdW11bGF0aW9ucy50YWtlKHRhcmdl
dCkpOwotICAgIGlmIChyZWNvcmQpCi0gICAgICAgIHJlY29yZC0+ZW5xdWV1ZU11dGF0aW9uUmVj
b3JkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmgKaW5kZXggZTA2MjRl
ZjVkYjNjODNhN2NiN2RjMjkxNjNiNDM1YjRkYjkwMmU2Yy4uYTlkNWJkNzNlMmIwNTExMDU5YzVi
Mjg0MjM1YjJlMzkzOWUzY2RmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxk
TGlzdE11dGF0aW9uU2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0
YXRpb25TY29wZS5oCkBAIC0zOSw2NSArMzksNzAgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOworCisvLyBNdXRhdGlvbkFjY3VtdWxh
dG9yIGlzIG5vdCBtZWFudCB0byBiZSB1c2VkIGRpcmVjdGx5OyBDaGlsZExpc3RNdXRhdGlvblNj
b3BlIGlzIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgorLy8KKy8vIE11dGF0aW9uQWNjdW11bGF0b3Ig
ZXhwZWN0cyB0aGF0IGFsbCByZW1vdmFscyBmcm9tIGEgcGFyZW50IHRha2UgcGxhY2UgaW4gb3Jk
ZXIKKy8vIGFuZCBwcmVjZWRlIGFueSBhZGRpdGlvbnMuIElmIHRoaXMgaXMgdmlvbGF0ZWQgKGku
ZS4gYmVjYXVzZSBvZiBjb2RlIGNoYW5nZXMgZWxzZXdoZXJlCisvLyBpbiBXZWJDb3JlKSBpdCB3
aWxsIGxpa2VseSByZXN1bHQgaW4gYm90aCAoYSkgQVNTRVJUaW9ucyBmYWlsaW5nLCBhbmQgKGIp
IG11dGF0aW9uIHJlY29yZHMKKy8vIGJlaW5nIGVucXVldWVkIGZvciBkZWxpdmVyeSBiZWZvcmUg
dGhlIG91dGVyLW1vc3Qgc2NvcGUgY2xvc2VzLgorY2xhc3MgTXV0YXRpb25BY2N1bXVsYXRvciA6
IHB1YmxpYyBSZWZDb3VudGVkPE11dGF0aW9uQWNjdW11bGF0b3I+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvbkFjY3VtdWxhdG9yPiBnZXRPckNyZWF0ZShOb2RlKik7
CisgICAgfk11dGF0aW9uQWNjdW11bGF0b3IoKTsKKworICAgIHZvaWQgY2hpbGRBZGRlZChQYXNz
UmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+
KTsKKworICAgIGJvb2wgaGFzT2JzZXJ2ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9vYnNlcnZlcnM7
IH0KKworcHJpdmF0ZToKKyAgICBNdXRhdGlvbkFjY3VtdWxhdG9yKFBhc3NSZWZQdHI8Tm9kZT4s
IFBhc3NPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA+KTsKKworICAgIHZvaWQg
ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CisgICAgYm9vbCBpc0VtcHR5KCk7CisgICAgYm9vbCBp
c0FkZGVkTm9kZUluT3JkZXIoTm9kZSopOworICAgIGJvb2wgaXNSZW1vdmVkTm9kZUluT3JkZXIo
Tm9kZSopOworCisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworCisgICAgVmVjdG9yPFJlZlB0
cjxOb2RlPiA+IG1fcmVtb3ZlZE5vZGVzOworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBtX2Fk
ZGVkTm9kZXM7CisgICAgUmVmUHRyPE5vZGU+IG1fcHJldmlvdXNTaWJsaW5nOworICAgIFJlZlB0
cjxOb2RlPiBtX25leHRTaWJsaW5nOworICAgIE5vZGUqIG1fbGFzdEFkZGVkOworCisgICAgT3du
UHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiBtX29ic2VydmVyczsKK307CisKIGNs
YXNzIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENo
aWxkTGlzdE11dGF0aW9uU2NvcGUpOwogcHVibGljOgogICAgIGV4cGxpY2l0IENoaWxkTGlzdE11
dGF0aW9uU2NvcGUoTm9kZSogdGFyZ2V0KQotICAgICAgICA6IG1fdGFyZ2V0KHRhcmdldC0+ZG9j
dW1lbnQoKS0+aGFzTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoTXV0YXRpb25PYnNlcnZlcjo6Q2hp
bGRMaXN0KSA/IHRhcmdldCA6IDApCiAgICAgewotICAgICAgICBpZiAobV90YXJnZXQpCi0gICAg
ICAgICAgICBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5zdGFuY2UoKS0+aW5jcmVtZW50
U2NvcGluZ0xldmVsKG1fdGFyZ2V0KTsKLSAgICB9Ci0KLSAgICB+Q2hpbGRMaXN0TXV0YXRpb25T
Y29wZSgpCi0gICAgewotICAgICAgICBpZiAobV90YXJnZXQpCi0gICAgICAgICAgICBNdXRhdGlv
bkFjY3VtdWxhdGlvblJvdXRlcjo6aW5zdGFuY2UoKS0+ZGVjcmVtZW50U2NvcGluZ0xldmVsKG1f
dGFyZ2V0KTsKKyAgICAgICAgaWYgKHRhcmdldC0+ZG9jdW1lbnQoKS0+aGFzTXV0YXRpb25PYnNl
cnZlcnNPZlR5cGUoTXV0YXRpb25PYnNlcnZlcjo6Q2hpbGRMaXN0KSkKKyAgICAgICAgICAgIG1f
YWNjdW11bGF0b3IgPSBNdXRhdGlvbkFjY3VtdWxhdG9yOjpnZXRPckNyZWF0ZSh0YXJnZXQpOwog
ICAgIH0KIAogICAgIHZvaWQgY2hpbGRBZGRlZChOb2RlKiBjaGlsZCkKICAgICB7Ci0gICAgICAg
IGlmIChtX3RhcmdldCkKLSAgICAgICAgICAgIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpp
bnN0YW5jZSgpLT5jaGlsZEFkZGVkKG1fdGFyZ2V0LCBjaGlsZCk7CisgICAgICAgIGlmIChtX2Fj
Y3VtdWxhdG9yICYmIG1fYWNjdW11bGF0b3ItPmhhc09ic2VydmVycygpKQorICAgICAgICAgICAg
bV9hY2N1bXVsYXRvci0+Y2hpbGRBZGRlZChjaGlsZCk7CiAgICAgfQogCiAgICAgdm9pZCB3aWxs
UmVtb3ZlQ2hpbGQoTm9kZSogY2hpbGQpCiAgICAgewotICAgICAgICBpZiAobV90YXJnZXQpCi0g
ICAgICAgICAgICBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5zdGFuY2UoKS0+d2lsbFJl
bW92ZUNoaWxkKG1fdGFyZ2V0LCBjaGlsZCk7CisgICAgICAgIGlmIChtX2FjY3VtdWxhdG9yICYm
IG1fYWNjdW11bGF0b3ItPmhhc09ic2VydmVycygpKQorICAgICAgICAgICAgbV9hY2N1bXVsYXRv
ci0+d2lsbFJlbW92ZUNoaWxkKGNoaWxkKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgY2xhc3Mg
TXV0YXRpb25BY2N1bXVsYXRvcjsKLQotICAgIGNsYXNzIE11dGF0aW9uQWNjdW11bGF0aW9uUm91
dGVyIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTXV0YXRpb25BY2N1bXVsYXRpb25S
b3V0ZXIpOwotICAgIHB1YmxpYzoKLSAgICAgICAgfk11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
KCk7Ci0KLSAgICAgICAgc3RhdGljIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKiBpbnN0YW5j
ZSgpOwotCi0gICAgICAgIHZvaWQgaW5jcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqKTsKLSAgICAg
ICAgdm9pZCBkZWNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSopOwotCi0gICAgICAgIHZvaWQgY2hp
bGRBZGRlZChOb2RlKiB0YXJnZXQsIE5vZGUqIGNoaWxkKTsKLSAgICAgICAgdm9pZCB3aWxsUmVt
b3ZlQ2hpbGQoTm9kZSogdGFyZ2V0LCBOb2RlKiBjaGlsZCk7Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcigpOwotICAgICAgICBzdGF0aWMgdm9pZCBp
bml0aWFsaXplKCk7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4g
U2NvcGluZ0xldmVsTWFwOwotICAgICAgICBTY29waW5nTGV2ZWxNYXAgbV9zY29waW5nTGV2ZWxz
OwotICAgICAgICBIYXNoTWFwPE5vZGUqLCBPd25QdHI8TXV0YXRpb25BY2N1bXVsYXRvcj4gPiBt
X2FjY3VtdWxhdGlvbnM7Ci0KLSAgICAgICAgc3RhdGljIE11dGF0aW9uQWNjdW11bGF0aW9uUm91
dGVyKiBzX2luc3RhbmNlOwotICAgIH07Ci0KLSAgICBOb2RlKiBtX3RhcmdldDsKKyAgICBSZWZQ
dHI8TXV0YXRpb25BY2N1bXVsYXRvcj4gbV9hY2N1bXVsYXRvcjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggNjQxYzBiODkw
YjJhZDcxMzMxMTgyZjNhNmEwMjI1MzhmYTNhNzM1NS4uY2FmNGFjOTM5ODUxNmVkYjVjZmJlMDRj
MzYzMWFmZjQzNTMyOGMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTMw
LDcgKzMwLDYgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgotI2luY2x1ZGUgIkNo
aWxkTGlzdE11dGF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJET01TZXR0YWJsZVRva2VuTGlzdC5o
IgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165226</attachid>
            <date>2012-09-21 16:49:19 -0700</date>
            <delta_ts>2012-09-21 17:30:27 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-97352-20120921164843.patch</filename>
            <type>text/plain</type>
            <size>17535</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjlmYjczNTExMmRhYWUx
ZjQ0MmQ0MmMzMzllZjFkMjUwYThhNDk4ZC4uMmMzNzA0MjU4ZGY0Y2E4NTJlZjAyYWU4ZGNkN2U0
YWMyYTUxMDViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA5LTIxICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IGFuZCBvcHRp
bWl6ZSBDaGlsZExpc3RNdXRhdGlvblNjb3BlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NzM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2Ug
Tml3YS4KKworICAgICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIGlzIG9uZSBvZiB0aGUgbW9z
dCBjb21wbGljYXRlZCBiaXRzIG9mCisgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIgaW1wbGVtZW50
YXRpb24uIFRoaXMgcGF0Y2ggYWltcyB0byBzaW1wbGlmeSBpdCBmb3IKKyAgICAgICAgY2xhcml0
eSBhbmQgaW1wcm92ZSBpdHMgcGVyZm9ybWFuY2UgKG1vc3RseSBieSBqdXN0IGRvaW5nIGxlc3Mp
LgorCisgICAgICAgIFRoZSBiaWcgY2hhbmdlIGlzIHRvIHJlbW92ZSB0aGUgTXV0YXRpb25BY2N1
bXVsYXRvclJvdXRlciBjbGFzcywKKyAgICAgICAgcmVwbGFjaW5nIGl0IHdpdGggbGlmZXRpbWUt
bWFuYWdlbWVudCBsb2dpYyBpbiBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yCisgICAgICAg
IENoaWxkTGlzdE11dGF0aW9uU2NvcGUgaXMgZXhwZWN0ZWQgdG8gY2FsbCBnZXRPckNyZWF0ZSgp
IGluCisgICAgICAgIGl0cyBjb25zdHJ1Y3RvciwgYW5kIGVhY2ggc2NvcGUgaG9sZHMgYSBSZWZQ
dHIgdG8gdGhlIGFjY3VtdWxhdG9yLgorICAgICAgICBXaGVuIHRoZSBsYXN0IHNjb3BlIGhvbGRp
bmcgc3VjaCBhIFJlZlB0ciBpcyBkZXN0cm95ZWQsCisgICAgICAgIENoaWxkTGlzdE11dGF0aW9u
QWNjdW11bGF0b3IncyBkZXN0cnVjdG9yIGVucXVldWVzIHRoZSBhY2N1bXVsYXRlZCByZWNvcmQu
CisKKyAgICAgICAgVGhpcyBncmVhdGx5IHJlZHVjZXMgdGhlIG51bWJlciBvZiBsaW5lcyBvZiBj
b2RlLCBhbmQgY29uZGVuc2VzCisgICAgICAgIHR3byBIYXNoTWFwcyBpbnRvIG9uZS4gSXQgYWxz
byByZWR1Y2VzIGhhc2ggbG9va3Vwcywgd2hpY2ggbm93CisgICAgICAgIG9jY3VyIG9ubHkgb24g
c2NvcGUgY3JlYXRpb24gYW5kIHdoZW4gdGhlIHJlZmNvdW50IGZvciBhIGdpdmVuCisgICAgICAg
IGFjY3VtdWxhdG9yIHJlYWNoZXMgMCAocHJldmlvdXNseSwgZWFjaCBjaGlsZEFkZGVkIGFuZCB3
aWxsUmVtb3ZlQ2hpbGQKKyAgICAgICAgY2FsbCBjb3VsZCByZXN1bHQgaW4gdHdvIGhhc2ggbG9v
a3VwcyBlYWNoKS4KKworICAgICAgICBUaGVyZSBhcmUgc29tZSBtaW5vciBjaGFuZ2VzIGFzIHdl
bGw6IHRoZSBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yOjpjbGVhcigpCisgICAgICAgIG1l
dGhvZCBpcyBnb25lLCBhcyBpdCB3YXMgZG9pbmcgbW9yZSB3b3JrIHRoYW4gbmVjZXNzYXJ5Owor
ICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMIGlzIG5vdyB1c2VkIGluc3RlYWQgb2YgaGFuZC1y
b2xsZWQgc3RhdGljLW1hbmFnZW1lbnQKKyAgICAgICAgY29kZTsgQ2hpbGRMaXN0TXV0YXRpb25B
Y2N1bXVsYXRvcjo6bV9sYXN0QWRkZWQgaXMgbm8gbG9uZ2VyIGEgUmVmUHRyLCBzaW5jZSBpdAor
ICAgICAgICBhbHdheXMgcG9pbnRzIGF0IGEgTm9kZSB0aGF0J3MgYWxyZWFkeSBiZWluZyByZWYn
ZCBieSB0aGUgYWNjdW11bGF0b3IuCisgICAgICAgIEFsc28gdmFyaW91cyBtaW5vciBzeW50YWN0
aWMgY2xlYW51cHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZp
b3IuCisKKyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphY2N1bXVsYXRvck1hcCk6IFJlZHVjZWQgdHdvIG1hcHMgdG8gb25lLCBhbmQg
bWFuYWdlIGl0cyBsaWZldGltZSB3aXRoIERFRklORV9TVEFUSUNfTE9DQUwuCisgICAgICAgIChX
ZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yOjpDaGlsZExpc3RNdXRhdGlvbkFj
Y3VtdWxhdG9yKTogUmVtb3ZlIHVubmVjZXNzYXJ5IGNhbGwgdG8gY2xlYXIoKSAod2hpY2ggaXRz
ZWxmIGhhcyBiZWVuIHJlbW92ZWQpLgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRp
b25BY2N1bXVsYXRvcjo6fkNoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IpOiBFbnF1ZXVlIHJl
Y29yZCBpZiBub3QgZW1wdHkgYXQgZGVzdHJ1Y3Rpb24sIGFuZCBoYXZlIHRoZSBhY2N1bXVsYXRv
cgorICAgICAgICByZW1vdmUgaXRzZWxmIGZyb20gdGhlIG1hcC4KKyAgICAgICAgKFdlYkNvcmU6
OkNoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3I6OmdldE9yQ3JlYXRlKTogUmVwbGFjZXMgaGFs
ZiBvZiBNdXRhdGlvbkFjY3VtdWxhdG9yUm91dGVyJ3Mgam9iLgorICAgICAgICAoV2ViQ29yZTo6
Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRBZGRlZCk6IE1pbm9yIFJlZlB0ciB1
c2FnZSBpbXByb3ZlbWVudHMuCisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvbkFj
Y3VtdWxhdG9yOjppc1JlbW92ZWROb2RlSW5PcmRlcik6IFNpbXBsaWZ5IFJlZlB0ciBzeW50YXgu
CisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yOjp3aWxsUmVt
b3ZlQ2hpbGQpOiBNaW5vciBSZWZQdHIgdXNhZ2UgaW1wcm92ZW1lbnRzLgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6ZW5xdWV1ZU11dGF0aW9uUmVjb3Jk
KTogUmVwbGFjZSBjYWxsIHRvIGNsZWFyKCkgd2l0aCBjbGVhcmluZyBtX2xhc3RBZGRlZCwKKyAg
ICAgICAgc2luY2UgaXQncyB0aGUgb25seSBiaXQgbm90IGNsZWFyZWQgYnkgdGhlIE11dGF0aW9u
UmVjb3JkIGNyZWF0aW9uIGNhbGwuIEFsc28gcmVtb3ZlCisgICAgICAgIGlzRW1wdHkgY2hlY2sg
YW5kIHJlcGxhY2Ugd2l0aCBhc3NlcnRzIG5vdyB0aGF0IGl0J3MgYSBwcml2YXRlIG1ldGhvZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3I6OmlzRW1wdHkp
OiBBZGRlZCBtb3JlIGFzc2VydGlvbnMgYWJvdXQgZW1wdGluZXNzLgorICAgICAgICAqIGRvbS9D
aGlsZExpc3RNdXRhdGlvblNjb3BlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENo
aWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IpOiBFeHRyYWN0IHRoZSBpbm5lciBjbGFzcyB0byBt
YWtlIGV2ZXJ5dGhpbmcgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjpDaGlsZExp
c3RNdXRhdGlvblNjb3BlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlKTogU3RvcmUgbV9hY2N1bXVs
YXRvciByYXRoZXIgdGhhbiBtX3RhcmdldC4KKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTGlzdE11
dGF0aW9uU2NvcGU6On5DaGlsZExpc3RNdXRhdGlvblNjb3BlKTogZGl0dG8KKyAgICAgICAgKFdl
YkNvcmU6OkNoaWxkTGlzdE11dGF0aW9uU2NvcGU6OmNoaWxkQWRkZWQpOiBkaXR0bworICAgICAg
ICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6d2lsbFJlbW92ZUNoaWxkKTogZGl0
dG8KKyAgICAgICAgKENoaWxkTGlzdE11dGF0aW9uU2NvcGUpOgorICAgICAgICAqIGh0bWwvSFRN
TEVsZW1lbnQuY3BwOiBSZW1vdmUgdW51c2VkIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAjaW5j
bHVkZS4KKwogMjAxMi0wOS0xOSAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAg
IFtCbGFja0JlcnJ5XSBSZW1vdmUgY3VzdG9tIHBhaW50aW5nIGNvZGUgZm9yIHNlYXJjaENhbmNl
bApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCmluZGV4
IGY0YTJkYTA0YWI2MTU4MTNmODY0YWUxMzU2ZjRlYWE0ZGIwYmZlNDkuLmJkZmYyMDk0NGRiMTgw
YTM3YWQ0YjUwYmUyNjQ0ODkyNzY0MDUyZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hp
bGRMaXN0TXV0YXRpb25TY29wZS5jcHAKQEAgLTQyLDYwICs0Miw1NCBAQAogI2luY2x1ZGUgIlN0
YXRpY05vZGVMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLS8vIE11dGF0aW9uQWNjdW11bGF0b3IgZXhwZWN0cyB0aGF0IGFsbCByZW1vdmFs
cyBmcm9tIGEgcGFyZW50IHRha2UgcGxhY2UgaW4gb3JkZXIKLS8vIGFuZCBwcmVjZWRlIGFueSBh
ZGRpdGlvbnMuIElmIHRoaXMgaXMgdmlvbGF0ZWQgKGkuZS4gYmVjYXVzZSBvZiBjb2RlIGNoYW5n
ZXMgZWxzZXdoZXJlCi0vLyBpbiBXZWJDb3JlKSBpdCB3aWxsIGxpa2VseSByZXN1bHQgaW4gYm90
aCAoYSkgQVNTRVJUaW9ucyBmYWlsaW5nLCBhbmQgKGIpIG11dGF0aW9uIHJlY29yZHMKLS8vIGJl
aW5nIGVucXVldWVkIGZvciBkZWxpdmVyeSBiZWZvcmUgdGhlIG91dGVyLW1vc3Qgc2NvcGUgY2xv
c2VzLgotY2xhc3MgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvciB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTXV0YXRpb25BY2N1bXVsYXRvcik7Ci1wdWJsaWM6
Ci0gICAgTXV0YXRpb25BY2N1bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzT3duUHRyPE11
dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiBvYnNlcnZlcnMpOwotICAgIH5NdXRhdGlvbkFj
Y3VtdWxhdG9yKCk7Ci0KLSAgICB2b2lkIGNoaWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPik7Ci0g
ICAgdm9pZCB3aWxsUmVtb3ZlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7Ci0gICAgdm9pZCBlbnF1
ZXVlTXV0YXRpb25SZWNvcmQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAg
Ym9vbCBpc0VtcHR5KCk7Ci0gICAgYm9vbCBpc0FkZGVkTm9kZUluT3JkZXIoTm9kZSopOwotICAg
IGJvb2wgaXNSZW1vdmVkTm9kZUluT3JkZXIoTm9kZSopOwotICAgIFJlZlB0cjxOb2RlPiBtX3Rh
cmdldDsKLQotICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBtX3JlbW92ZWROb2RlczsKLSAgICBW
ZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9hZGRlZE5vZGVzOwotICAgIFJlZlB0cjxOb2RlPiBtX3By
ZXZpb3VzU2libGluZzsKLSAgICBSZWZQdHI8Tm9kZT4gbV9uZXh0U2libGluZzsKLSAgICBSZWZQ
dHI8Tm9kZT4gbV9sYXN0QWRkZWQ7Ci0KLSAgICBPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXA+IG1fb2JzZXJ2ZXJzOwotfTsKLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0
YXRpb25BY2N1bXVsYXRvcjo6TXV0YXRpb25BY2N1bXVsYXRvcihQYXNzUmVmUHRyPE5vZGU+IHRh
cmdldCwgUGFzc093blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4gb2JzZXJ2ZXJz
KQordHlwZWRlZiBIYXNoTWFwPE5vZGUqLCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKj4g
QWNjdW11bGF0b3JNYXA7CitzdGF0aWMgQWNjdW11bGF0b3JNYXAmIGFjY3VtdWxhdG9yTWFwKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEFjY3VtdWxhdG9yTWFwLCBtYXAsICgpKTsKKyAg
ICByZXR1cm4gbWFwOworfQorCitDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yOjpDaGlsZExp
c3RNdXRhdGlvbkFjY3VtdWxhdG9yKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBQYXNzT3duUHRy
PE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiBvYnNlcnZlcnMpCiAgICAgOiBtX3Rhcmdl
dCh0YXJnZXQpCisgICAgLCBtX2xhc3RBZGRlZCgwKQogICAgICwgbV9vYnNlcnZlcnMob2JzZXJ2
ZXJzKQogewotICAgIGNsZWFyKCk7CiB9CiAKLUNoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0
aW9uQWNjdW11bGF0b3I6On5NdXRhdGlvbkFjY3VtdWxhdG9yKCkKK0NoaWxkTGlzdE11dGF0aW9u
QWNjdW11bGF0b3I6On5DaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKCkKIHsKLSAgICBBU1NF
UlQoaXNFbXB0eSgpKTsKKyAgICBpZiAoIWlzRW1wdHkoKSkKKyAgICAgICAgZW5xdWV1ZU11dGF0
aW9uUmVjb3JkKCk7CisgICAgYWNjdW11bGF0b3JNYXAoKS5yZW1vdmUobV90YXJnZXQuZ2V0KCkp
OwogfQogCi1pbmxpbmUgYm9vbCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3Vt
dWxhdG9yOjppc0FkZGVkTm9kZUluT3JkZXIoTm9kZSogY2hpbGQpCitQYXNzUmVmUHRyPENoaWxk
TGlzdE11dGF0aW9uQWNjdW11bGF0b3I+IENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3I6Omdl
dE9yQ3JlYXRlKE5vZGUqIHRhcmdldCkKK3sKKyAgICBBY2N1bXVsYXRvck1hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IGFjY3VtdWxhdG9yTWFwKCkuYWRkKHRhcmdldCwgMCk7CisgICAgUmVmUHRyPENo
aWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3I+IGFjY3VtdWxhdG9yOworICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCisgICAgICAgIGFjY3VtdWxhdG9yID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgZWxzZSB7CisgICAgICAgIGFjY3VtdWxhdG9yID0gYWRvcHRSZWYobmV3IENoaWxk
TGlzdE11dGF0aW9uQWNjdW11bGF0b3IodGFyZ2V0LCBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RH
cm91cDo6Y3JlYXRlRm9yQ2hpbGRMaXN0TXV0YXRpb24odGFyZ2V0KSkpOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IGFjY3VtdWxhdG9yLmdldCgpOworICAgIH0KKyAgICByZXR1
cm4gYWNjdW11bGF0b3IucmVsZWFzZSgpOworfQorCitpbmxpbmUgYm9vbCBDaGlsZExpc3RNdXRh
dGlvbkFjY3VtdWxhdG9yOjppc0FkZGVkTm9kZUluT3JkZXIoTm9kZSogY2hpbGQpCiB7CiAgICAg
cmV0dXJuIGlzRW1wdHkoKSB8fCAobV9sYXN0QWRkZWQgPT0gY2hpbGQtPnByZXZpb3VzU2libGlu
ZygpICYmIG1fbmV4dFNpYmxpbmcgPT0gY2hpbGQtPm5leHRTaWJsaW5nKCkpOwogfQogCi12b2lk
IENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmNoaWxkQWRkZWQo
UGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCkKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRpb25BY2N1bXVs
YXRvcjo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxkKQogewogICAgIFJlZlB0
cjxOb2RlPiBjaGlsZCA9IHBycENoaWxkOwogCisgICAgQVNTRVJUKGhhc09ic2VydmVycygpKTsK
ICAgICBBU1NFUlQoaXNBZGRlZE5vZGVJbk9yZGVyKGNoaWxkLmdldCgpKSk7CiAgICAgaWYgKCFp
c0FkZGVkTm9kZUluT3JkZXIoY2hpbGQuZ2V0KCkpKQogICAgICAgICBlbnF1ZXVlTXV0YXRpb25S
ZWNvcmQoKTsKQEAgLTEwNSwyMSArOTksMjEgQEAgdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3Bl
OjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpjaGlsZEFkZGVkKFBhc3NSZWZQdHI8Tm9kZT4gcHIKICAg
ICAgICAgbV9uZXh0U2libGluZyA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgIH0KIAotICAg
IG1fYWRkZWROb2Rlcy5hcHBlbmQoY2hpbGQpOwotICAgIG1fbGFzdEFkZGVkID0gY2hpbGQ7Cisg
ICAgbV9sYXN0QWRkZWQgPSBjaGlsZC5nZXQoKTsKKyAgICBtX2FkZGVkTm9kZXMuYXBwZW5kKGNo
aWxkLnJlbGVhc2UoKSk7CiB9CiAKLWlubGluZSBib29sIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6
Ok11dGF0aW9uQWNjdW11bGF0b3I6OmlzUmVtb3ZlZE5vZGVJbk9yZGVyKE5vZGUqIGNoaWxkKQor
aW5saW5lIGJvb2wgQ2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6aXNSZW1vdmVkTm9kZUlu
T3JkZXIoTm9kZSogY2hpbGQpCiB7Ci0gICAgcmV0dXJuIGlzRW1wdHkoKSB8fCBtX25leHRTaWJs
aW5nLmdldCgpID09IGNoaWxkOworICAgIHJldHVybiBpc0VtcHR5KCkgfHwgbV9uZXh0U2libGlu
ZyA9PSBjaGlsZDsKIH0KIAotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFj
Y3VtdWxhdG9yOjp3aWxsUmVtb3ZlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCkKK3Zv
aWQgQ2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcjo6d2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQ
dHI8Tm9kZT4gcHJwQ2hpbGQpCiB7CiAgICAgUmVmUHRyPE5vZGU+IGNoaWxkID0gcHJwQ2hpbGQ7
CiAKKyAgICBBU1NFUlQoaGFzT2JzZXJ2ZXJzKCkpOwogICAgIEFTU0VSVChtX2FkZGVkTm9kZXMu
aXNFbXB0eSgpICYmIGlzUmVtb3ZlZE5vZGVJbk9yZGVyKGNoaWxkLmdldCgpKSk7Ci0KICAgICBp
ZiAoIW1fYWRkZWROb2Rlcy5pc0VtcHR5KCkgfHwgIWlzUmVtb3ZlZE5vZGVJbk9yZGVyKGNoaWxk
LmdldCgpKSkKICAgICAgICAgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CiAKQEAgLTEzMCwxMTQg
KzEyNCwzMyBAQCB2b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0
b3I6OndpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZAogICAgIH0gZWxzZQogICAgICAgICBt
X25leHRTaWJsaW5nID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAKLSAgICBtX3JlbW92ZWROb2Rl
cy5hcHBlbmQoY2hpbGQpOworICAgIG1fcmVtb3ZlZE5vZGVzLmFwcGVuZChjaGlsZC5yZWxlYXNl
KCkpOwogfQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0
b3I6OmVucXVldWVNdXRhdGlvblJlY29yZCgpCit2b2lkIENoaWxkTGlzdE11dGF0aW9uQWNjdW11
bGF0b3I6OmVucXVldWVNdXRhdGlvblJlY29yZCgpCiB7Ci0gICAgaWYgKGlzRW1wdHkoKSkgewot
ICAgICAgICBjbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZl
cnMtPmVucXVldWVNdXRhdGlvblJlY29yZChNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hpbGRMaXN0
KAotICAgICAgICAgICAgbV90YXJnZXQsIFN0YXRpY05vZGVMaXN0OjphZG9wdChtX2FkZGVkTm9k
ZXMpLCBTdGF0aWNOb2RlTGlzdDo6YWRvcHQobV9yZW1vdmVkTm9kZXMpLCBtX3ByZXZpb3VzU2li
bGluZy5yZWxlYXNlKCksIG1fbmV4dFNpYmxpbmcucmVsZWFzZSgpKSk7Ci0gICAgY2xlYXIoKTsK
LX0KKyAgICBBU1NFUlQoaGFzT2JzZXJ2ZXJzKCkpOworICAgIEFTU0VSVCghaXNFbXB0eSgpKTsK
IAotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpjbGVh
cigpCi17Ci0gICAgaWYgKCFtX3JlbW92ZWROb2Rlcy5pc0VtcHR5KCkpCi0gICAgICAgIG1fcmVt
b3ZlZE5vZGVzLmNsZWFyKCk7Ci0gICAgaWYgKCFtX2FkZGVkTm9kZXMuaXNFbXB0eSgpKQotICAg
ICAgICBtX2FkZGVkTm9kZXMuY2xlYXIoKTsKLSAgICBtX3ByZXZpb3VzU2libGluZyA9IDA7Ci0g
ICAgbV9uZXh0U2libGluZyA9IDA7CisgICAgUmVmUHRyPE5vZGVMaXN0PiBhZGRlZE5vZGVzID0g
U3RhdGljTm9kZUxpc3Q6OmFkb3B0KG1fYWRkZWROb2Rlcyk7CisgICAgUmVmUHRyPE5vZGVMaXN0
PiByZW1vdmVkTm9kZXMgPSBTdGF0aWNOb2RlTGlzdDo6YWRvcHQobV9yZW1vdmVkTm9kZXMpOwor
ICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gcmVjb3JkID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0
ZUNoaWxkTGlzdChtX3RhcmdldCwgYWRkZWROb2Rlcy5yZWxlYXNlKCksIHJlbW92ZWROb2Rlcy5y
ZWxlYXNlKCksIG1fcHJldmlvdXNTaWJsaW5nLnJlbGVhc2UoKSwgbV9uZXh0U2libGluZy5yZWxl
YXNlKCkpOworICAgIG1fb2JzZXJ2ZXJzLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQocmVjb3JkLnJl
bGVhc2UoKSk7CiAgICAgbV9sYXN0QWRkZWQgPSAwOworICAgIEFTU0VSVChpc0VtcHR5KCkpOwog
fQogCi1ib29sIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6Omlz
RW1wdHkoKQotewotICAgIHJldHVybiBtX3JlbW92ZWROb2Rlcy5pc0VtcHR5KCkgJiYgbV9hZGRl
ZE5vZGVzLmlzRW1wdHkoKTsKLX0KLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25B
Y2N1bXVsYXRpb25Sb3V0ZXIqIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11
bGF0aW9uUm91dGVyOjpzX2luc3RhbmNlID0gMDsKLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6
TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKCkK
LXsKLX0KLQotQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0
ZXI6On5NdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcigpCi17Ci0gICAgQVNTRVJUKG1fc2NvcGlu
Z0xldmVscy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX2FjY3VtdWxhdGlvbnMuaXNFbXB0eSgp
KTsKLX0KLQotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlv
blJvdXRlcjo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFzX2luc3RhbmNlKTsKLSAgICBz
X2luc3RhbmNlID0gYWRvcHRQdHIobmV3IENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9u
QWNjdW11bGF0aW9uUm91dGVyKS5sZWFrUHRyKCk7Ci19Ci0KLQotQ2hpbGRMaXN0TXV0YXRpb25T
Y29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIqIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6
Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbnN0YW5jZSgpCi17Ci0gICAgaWYgKCFzX2lu
c3RhbmNlKQotICAgICAgICBpbml0aWFsaXplKCk7Ci0KLSAgICByZXR1cm4gc19pbnN0YW5jZTsK
LX0KLQotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJv
dXRlcjo6Y2hpbGRBZGRlZChOb2RlKiB0YXJnZXQsIE5vZGUqIGNoaWxkKQotewotICAgIEhhc2hN
YXA8Tm9kZSosIE93blB0cjxDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxh
dG9yPiA+OjppdGVyYXRvciBpdGVyID0gbV9hY2N1bXVsYXRpb25zLmZpbmQodGFyZ2V0KTsKLSAg
ICBBU1NFUlQoaXRlciAhPSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkpOwotICAgIGlmIChpdGVyID09
IG1fYWNjdW11bGF0aW9ucy5lbmQoKSB8fCAhaXRlci0+c2Vjb25kKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpdGVyLT5zZWNvbmQtPmNoaWxkQWRkZWQoY2hpbGQpOwotfQotCi12b2lkIENoaWxk
TGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjp3aWxsUmVtb3Zl
Q2hpbGQoTm9kZSogdGFyZ2V0LCBOb2RlKiBjaGlsZCkKLXsKLSAgICBIYXNoTWFwPE5vZGUqLCBP
d25QdHI8Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcj4gPjo6aXRl
cmF0b3IgaXRlciA9IG1fYWNjdW11bGF0aW9ucy5maW5kKHRhcmdldCk7Ci0gICAgQVNTRVJUKGl0
ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpKTsKLSAgICBpZiAoaXRlciA9PSBtX2FjY3VtdWxh
dGlvbnMuZW5kKCkgfHwgIWl0ZXItPnNlY29uZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXRl
ci0+c2Vjb25kLT53aWxsUmVtb3ZlQ2hpbGQoY2hpbGQpOwotfQotCi12b2lkIENoaWxkTGlzdE11
dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbmNyZW1lbnRTY29waW5n
TGV2ZWwoTm9kZSogdGFyZ2V0KQorYm9vbCBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yOjpp
c0VtcHR5KCkKIHsKLSAgICBTY29waW5nTGV2ZWxNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3Nj
b3BpbmdMZXZlbHMuYWRkKHRhcmdldCwgMSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkg
ewotICAgICAgICArKyhyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiBv
YnNlcnZlcnMgPSBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDo6Y3JlYXRlRm9yQ2hpbGRM
aXN0TXV0YXRpb24odGFyZ2V0KSkKLSAgICAgICAgbV9hY2N1bXVsYXRpb25zLnNldCh0YXJnZXQs
IGFkb3B0UHRyKG5ldyBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9y
KHRhcmdldCwgb2JzZXJ2ZXJzLnJlbGVhc2UoKSkpKTsKKyAgICBib29sIHJlc3VsdCA9IG1fcmVt
b3ZlZE5vZGVzLmlzRW1wdHkoKSAmJiBtX2FkZGVkTm9kZXMuaXNFbXB0eSgpOwogI2lmbmRlZiBO
REVCVUcKLSAgICBlbHNlCi0gICAgICAgIG1fYWNjdW11bGF0aW9ucy5zZXQodGFyZ2V0LCBudWxs
cHRyKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghbV9wcmV2aW91c1NpYmxp
bmcpOworICAgICAgICBBU1NFUlQoIW1fbmV4dFNpYmxpbmcpOworICAgICAgICBBU1NFUlQoIW1f
bGFzdEFkZGVkKTsKKyAgICB9CiAjZW5kaWYKLX0KLQotdm9pZCBDaGlsZExpc3RNdXRhdGlvblNj
b3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6ZGVjcmVtZW50U2NvcGluZ0xldmVsKE5v
ZGUqIHRhcmdldCkKLXsKLSAgICBTY29waW5nTGV2ZWxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nj
b3BpbmdMZXZlbHMuZmluZCh0YXJnZXQpOwotICAgIEFTU0VSVChpdGVyICE9IG1fc2NvcGluZ0xl
dmVscy5lbmQoKSk7Ci0KLSAgICAtLShpdGVyLT5zZWNvbmQpOwotICAgIGlmIChpdGVyLT5zZWNv
bmQgPiAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Njb3BpbmdMZXZlbHMucmVtb3ZlKGl0
ZXIpOwotCi0gICAgT3duUHRyPE11dGF0aW9uQWNjdW11bGF0b3I+IHJlY29yZChtX2FjY3VtdWxh
dGlvbnMudGFrZSh0YXJnZXQpKTsKLSAgICBpZiAocmVjb3JkKQotICAgICAgICByZWNvcmQtPmVu
cXVldWVNdXRhdGlvblJlY29yZCgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RN
dXRhdGlvblNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5oCmluZGV4IGUwNjI0ZWY1ZGIzYzgzYTdjYjdkYzI5MTYzYjQzNWI0ZGI5MDJlNmMuLjAwNTUx
OWE1YjUyMzlhN2VlMTE5ZmRlMjcxNWNlYjIxZWY4YWIzMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuaApAQCAtMzksNjUgKzM5LDcwIEBACiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cDsKKworLy8g
Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvciBpcyBub3QgbWVhbnQgdG8gYmUgdXNlZCBkaXJl
Y3RseTsgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBpcyB0aGUgcHVibGljIGludGVyZmFjZS4KKy8v
CisvLyBDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yIGV4cGVjdHMgdGhhdCBhbGwgcmVtb3Zh
bHMgZnJvbSBhIHBhcmVudCB0YWtlIHBsYWNlIGluIG9yZGVyCisvLyBhbmQgcHJlY2VkZSBhbnkg
YWRkaXRpb25zLiBJZiB0aGlzIGlzIHZpb2xhdGVkIChpLmUuIGJlY2F1c2Ugb2YgY29kZSBjaGFu
Z2VzIGVsc2V3aGVyZQorLy8gaW4gV2ViQ29yZSkgaXQgd2lsbCBsaWtlbHkgcmVzdWx0IGluIGJv
dGggKGEpIEFTU0VSVGlvbnMgZmFpbGluZywgYW5kIChiKSBtdXRhdGlvbiByZWNvcmRzCisvLyBi
ZWluZyBlbnF1ZXVlZCBmb3IgZGVsaXZlcnkgYmVmb3JlIHRoZSBvdXRlci1tb3N0IHNjb3BlIGNs
b3Nlcy4KK2NsYXNzIENoaWxkTGlzdE11dGF0aW9uQWNjdW11bGF0b3IgOiBwdWJsaWMgUmVmQ291
bnRlZDxDaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2hpbGRMaXN0TXV0YXRpb25BY2N1bXVsYXRvcj4gZ2V0T3JDcmVhdGUoTm9k
ZSopOworICAgIH5DaGlsZExpc3RNdXRhdGlvbkFjY3VtdWxhdG9yKCk7CisKKyAgICB2b2lkIGNo
aWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCB3aWxsUmVtb3ZlQ2hpbGQoUGFz
c1JlZlB0cjxOb2RlPik7CisKKyAgICBib29sIGhhc09ic2VydmVycygpIGNvbnN0IHsgcmV0dXJu
IG1fb2JzZXJ2ZXJzOyB9CisKK3ByaXZhdGU6CisgICAgQ2hpbGRMaXN0TXV0YXRpb25BY2N1bXVs
YXRvcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVz
dEdyb3VwPik7CisKKyAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZCgpOworICAgIGJvb2wg
aXNFbXB0eSgpOworICAgIGJvb2wgaXNBZGRlZE5vZGVJbk9yZGVyKE5vZGUqKTsKKyAgICBib29s
IGlzUmVtb3ZlZE5vZGVJbk9yZGVyKE5vZGUqKTsKKworICAgIFJlZlB0cjxOb2RlPiBtX3Rhcmdl
dDsKKworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBtX3JlbW92ZWROb2RlczsKKyAgICBWZWN0
b3I8UmVmUHRyPE5vZGU+ID4gbV9hZGRlZE5vZGVzOworICAgIFJlZlB0cjxOb2RlPiBtX3ByZXZp
b3VzU2libGluZzsKKyAgICBSZWZQdHI8Tm9kZT4gbV9uZXh0U2libGluZzsKKyAgICBOb2RlKiBt
X2xhc3RBZGRlZDsKKworICAgIE93blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4g
bV9vYnNlcnZlcnM7Cit9OworCiBjbGFzcyBDaGlsZExpc3RNdXRhdGlvblNjb3BlIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDaGlsZExpc3RNdXRhdGlvblNjb3BlKTsKIHB1YmxpYzoKICAg
ICBleHBsaWNpdCBDaGlsZExpc3RNdXRhdGlvblNjb3BlKE5vZGUqIHRhcmdldCkKLSAgICAgICAg
OiBtX3RhcmdldCh0YXJnZXQtPmRvY3VtZW50KCktPmhhc011dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBl
KE11dGF0aW9uT2JzZXJ2ZXI6OkNoaWxkTGlzdCkgPyB0YXJnZXQgOiAwKQogICAgIHsKLSAgICAg
ICAgaWYgKG1fdGFyZ2V0KQotICAgICAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6
Omluc3RhbmNlKCktPmluY3JlbWVudFNjb3BpbmdMZXZlbChtX3RhcmdldCk7Ci0gICAgfQotCi0g
ICAgfkNoaWxkTGlzdE11dGF0aW9uU2NvcGUoKQotICAgIHsKLSAgICAgICAgaWYgKG1fdGFyZ2V0
KQotICAgICAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPmRl
Y3JlbWVudFNjb3BpbmdMZXZlbChtX3RhcmdldCk7CisgICAgICAgIGlmICh0YXJnZXQtPmRvY3Vt
ZW50KCktPmhhc011dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKE11dGF0aW9uT2JzZXJ2ZXI6OkNoaWxk
TGlzdCkpCisgICAgICAgICAgICBtX2FjY3VtdWxhdG9yID0gQ2hpbGRMaXN0TXV0YXRpb25BY2N1
bXVsYXRvcjo6Z2V0T3JDcmVhdGUodGFyZ2V0KTsKICAgICB9CiAKICAgICB2b2lkIGNoaWxkQWRk
ZWQoTm9kZSogY2hpbGQpCiAgICAgewotICAgICAgICBpZiAobV90YXJnZXQpCi0gICAgICAgICAg
ICBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5zdGFuY2UoKS0+Y2hpbGRBZGRlZChtX3Rh
cmdldCwgY2hpbGQpOworICAgICAgICBpZiAobV9hY2N1bXVsYXRvciAmJiBtX2FjY3VtdWxhdG9y
LT5oYXNPYnNlcnZlcnMoKSkKKyAgICAgICAgICAgIG1fYWNjdW11bGF0b3ItPmNoaWxkQWRkZWQo
Y2hpbGQpOwogICAgIH0KIAogICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKE5vZGUqIGNoaWxkKQog
ICAgIHsKLSAgICAgICAgaWYgKG1fdGFyZ2V0KQotICAgICAgICAgICAgTXV0YXRpb25BY2N1bXVs
YXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPndpbGxSZW1vdmVDaGlsZChtX3RhcmdldCwgY2hpbGQp
OworICAgICAgICBpZiAobV9hY2N1bXVsYXRvciAmJiBtX2FjY3VtdWxhdG9yLT5oYXNPYnNlcnZl
cnMoKSkKKyAgICAgICAgICAgIG1fYWNjdW11bGF0b3ItPndpbGxSZW1vdmVDaGlsZChjaGlsZCk7
CiAgICAgfQogCiBwcml2YXRlOgotICAgIGNsYXNzIE11dGF0aW9uQWNjdW11bGF0b3I7Ci0KLSAg
ICBjbGFzcyBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciB7Ci0gICAgICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyKTsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIH5NdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcigpOwotCi0gICAgICAgIHN0YXRpYyBNdXRh
dGlvbkFjY3VtdWxhdGlvblJvdXRlciogaW5zdGFuY2UoKTsKLQotICAgICAgICB2b2lkIGluY3Jl
bWVudFNjb3BpbmdMZXZlbChOb2RlKik7Ci0gICAgICAgIHZvaWQgZGVjcmVtZW50U2NvcGluZ0xl
dmVsKE5vZGUqKTsKLQotICAgICAgICB2b2lkIGNoaWxkQWRkZWQoTm9kZSogdGFyZ2V0LCBOb2Rl
KiBjaGlsZCk7Ci0gICAgICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKE5vZGUqIHRhcmdldCwgTm9k
ZSogY2hpbGQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRpb25S
b3V0ZXIoKTsKLSAgICAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotCi0gICAgICAgIHR5
cGVkZWYgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IFNjb3BpbmdMZXZlbE1hcDsKLSAgICAgICAg
U2NvcGluZ0xldmVsTWFwIG1fc2NvcGluZ0xldmVsczsKLSAgICAgICAgSGFzaE1hcDxOb2RlKiwg
T3duUHRyPE11dGF0aW9uQWNjdW11bGF0b3I+ID4gbV9hY2N1bXVsYXRpb25zOwotCi0gICAgICAg
IHN0YXRpYyBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciogc19pbnN0YW5jZTsKLSAgICB9Owot
Ci0gICAgTm9kZSogbV90YXJnZXQ7CisgICAgUmVmUHRyPENoaWxkTGlzdE11dGF0aW9uQWNjdW11
bGF0b3I+IG1fYWNjdW11bGF0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IDY0MWMwYjg5MGIyYWQ3MTMzMTE4MmYzYTZh
MDIyNTM4ZmEzYTczNTUuLmNhZjRhYzkzOTg1MTZlZGI1Y2ZiZTA0YzM2MzFhZmY0MzUzMjhjM2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5j
bHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKLSNpbmNsdWRlICJDaGlsZExpc3RNdXRhdGlvblNj
b3BlLmgiCiAjaW5jbHVkZSAiRE9NU2V0dGFibGVUb2tlbkxpc3QuaCIKICNpbmNsdWRlICJEb2N1
bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIK
</data>

          </attachment>
      

    </bug>

</bugzilla>