<?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>106679</bug_id>
          
          <creation_ts>2013-01-11 10:53:47 -0800</creation_ts>
          <short_desc>Move functions from NodeRareData to ElementRareData and other classes</short_desc>
          <delta_ts>2013-01-15 13:49:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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>
          <dependson>106714</dependson>
          <blocked>106850</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>adamk</cc>
    
    <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>esprehn</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>philn</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>805414</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-11 10:53:47 -0800</bug_when>
    <thetext>Make NodeRareData simpler to prepare to fix bugs 79740 and 106586.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805437</commentid>
    <comment_count>1</comment_count>
      <attachid>182374</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-11 11:11:43 -0800</bug_when>
    <thetext>Created attachment 182374
refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805453</commentid>
    <comment_count>2</comment_count>
      <attachid>182374</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-11 11:29:07 -0800</bug_when>
    <thetext>Comment on attachment 182374
refactoring

Attachment 182374 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15804458</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805461</commentid>
    <comment_count>3</comment_count>
      <attachid>182383</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-11 11:33:05 -0800</bug_when>
    <thetext>Created attachment 182383
Fixed micro data build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805616</commentid>
    <comment_count>4</comment_count>
      <attachid>182383</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-11 14:21:14 -0800</bug_when>
    <thetext>Comment on attachment 182383
Fixed micro data build

Attachment 182383 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15832003

New failing tests:
platform/mac/accessibility/progressbar.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805678</commentid>
    <comment_count>5</comment_count>
      <attachid>182383</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-11 15:24:28 -0800</bug_when>
    <thetext>Comment on attachment 182383
Fixed micro data build

Attachment 182383 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15822030

New failing tests:
platform/mac/accessibility/progressbar.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805835</commentid>
    <comment_count>6</comment_count>
      <attachid>182383</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-11 22:59:19 -0800</bug_when>
    <thetext>Comment on attachment 182383
Fixed micro data build

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

Gorgeous. :)

I think the ChangeLog is a bit terse on why you do some changes.
Some comments bellow:

&gt; Source/WebCore/dom/Element.cpp:237
&gt; +void Element::setTabIndexExplicitly(int tabIndex)

m_tabIndex type is short.

&gt; Source/WebCore/dom/ElementRareData.h:51
&gt; +    
&gt; +    short tabIndex() const { return m_tabIndex; }
&gt; +    void setTabIndexExplicitly(short index) { m_tabIndex = index; m_tabIndexWasSetExplicitly = true; }
&gt; +    bool tabIndexSetExplicitly() const { return m_tabIndexWasSetExplicitly; }
&gt; +    void clearTabIndexExplicitly() { m_tabIndex = 0; m_tabIndexWasSetExplicitly = false; }

I am not sure why you did not move both attribute from NodeRareData.h to ElementRareData.h.

Is it because the structure is already completely packed?
If so, it would be nice to say so in the ChangeLog.

&gt; Source/WebCore/dom/Node.cpp:2195
&gt; -    return hasRareData() ? rareData()-&gt;mutationObserverRegistry() : 0;
&gt; +    if (!hasRareData())
&gt; +        return 0;
&gt; +    NodeMutationObserverData* data = rareData()-&gt;mutationObserverData();
&gt; +    if (!data)
&gt; +        return 0;
&gt; +    return &amp;data-&gt;registry;

I don&apos;t get the reason for this change. This is essentially shifting some responsibilities from NodeRareData to Node. I don&apos;t really see the benefit (something about the why in the ChangeLog would be nice).

&gt; Source/WebCore/dom/Node.cpp:2205
&gt; -    return hasRareData() ? rareData()-&gt;transientMutationObserverRegistry() : 0;
&gt; +    if (!hasRareData())
&gt; +        return 0;
&gt; +    NodeMutationObserverData* data = rareData()-&gt;mutationObserverData();
&gt; +    if (!data)
&gt; +        return 0;
&gt; +    return &amp;data-&gt;transientRegistry;

ditto.

&gt; Source/WebCore/dom/NodeRareData.h:229
&gt; +struct NodeMutationObserverData {

No WTF_MAKE_FAST_ALLOCATED?

&gt; Source/WebCore/dom/NodeRareData.h:237
&gt; +class NodeMicroDataTokenLists {

Ditto.

&gt; Source/WebCore/dom/NodeRareData.h:252
&gt; +        if (!m_itemProp)
&gt; +            m_itemProp = DOMSettableTokenList::create();
&gt; +        m_itemProp-&gt;setValue(value);

itemProp()-&gt;setValue(value)?

&gt; Source/WebCore/dom/NodeRareData.h:266
&gt; +        if (!m_itemRef)
&gt; +            m_itemRef = DOMSettableTokenList::create();
&gt; +        m_itemRef-&gt;setValue(value);

itemRef()-&gt;setValue(value)?

&gt; Source/WebCore/dom/NodeRareData.h:280
&gt; +        if (!m_itemType)
&gt; +            m_itemType = DOMSettableTokenList::create();
&gt; +        m_itemType-&gt;setValue(value);

etc :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805840</commentid>
    <comment_count>7</comment_count>
      <attachid>182383</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-11 23:37:54 -0800</bug_when>
    <thetext>Comment on attachment 182383
Fixed micro data build

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

&gt;&gt; Source/WebCore/dom/ElementRareData.h:51
&gt;&gt; +    void clearTabIndexExplicitly() { m_tabIndex = 0; m_tabIndexWasSetExplicitly = false; }
&gt; 
&gt; I am not sure why you did not move both attribute from NodeRareData.h to ElementRareData.h.
&gt; 
&gt; Is it because the structure is already completely packed?
&gt; If so, it would be nice to say so in the ChangeLog.

That&apos;s because of WebVTT stuff but that has been refactored in the bug 106714 so I can upload a new patch that moves all bit fields from NodeRareData to ElementRareData.

&gt;&gt; Source/WebCore/dom/Node.cpp:2195
&gt;&gt; +    return &amp;data-&gt;registry;
&gt; 
&gt; I don&apos;t get the reason for this change. This is essentially shifting some responsibilities from NodeRareData to Node. I don&apos;t really see the benefit (something about the why in the ChangeLog would be nice).

This isn&apos;t about moving responsibilities from NodeRareData to Node. It&apos;s about isolating details of NodeMutationObserverData from NodeRareData.
I&apos;m going to write a follow up patch, which will move most of this code and related code into NodeMutationObserverData.
That&apos;ll allow us to detect when NodeMutationObserverData is no longer needed, which allows us to remove NodeRareData.
I&apos;ll clarify this in a new change log.

&gt;&gt; Source/WebCore/dom/NodeRareData.h:229
&gt;&gt; +struct NodeMutationObserverData {
&gt; 
&gt; No WTF_MAKE_FAST_ALLOCATED?

Oops, I need WTF_MAKE_FAST_ALLOCATED and WTF_MAKE_NONCOPYABLE.

&gt;&gt; Source/WebCore/dom/NodeRareData.h:237
&gt;&gt; +class NodeMicroDataTokenLists {
&gt; 
&gt; Ditto.

Will do.

&gt;&gt; Source/WebCore/dom/NodeRareData.h:252
&gt;&gt; +        m_itemProp-&gt;setValue(value);
&gt; 
&gt; itemProp()-&gt;setValue(value)?

That&apos;s a good point. Will do.

At some point, we&apos;ll need to move more code into this class so that we can detect when the object is no longer needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806634</commentid>
    <comment_count>8</comment_count>
      <attachid>182629</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-14 14:34:34 -0800</bug_when>
    <thetext>Created attachment 182629
Addressed Ben&apos;s comments; merged to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806659</commentid>
    <comment_count>9</comment_count>
      <attachid>182629</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-14 14:56:19 -0800</bug_when>
    <thetext>Comment on attachment 182629
Addressed Ben&apos;s comments; merged to ToT

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

&gt; Source/WebCore/dom/Element.cpp:237
&gt; +void Element::setTabIndexExplicitly(int tabIndex)

int -&gt; short

&gt; Source/WebCore/dom/NodeRareData.cpp:43
&gt;  struct SameSizeAsNodeRareData {
&gt;      void* m_pointer[4];
&gt; -    unsigned m_indicesAndBitfields[2];
&gt; -
&gt;  #if ENABLE(MICRODATA)

It would be nice to have a similar compile assertion for ElementRareData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806666</commentid>
    <comment_count>10</comment_count>
      <attachid>182629</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-14 15:00:39 -0800</bug_when>
    <thetext>Comment on attachment 182629
Addressed Ben&apos;s comments; merged to ToT

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

&gt;&gt; Source/WebCore/dom/NodeRareData.cpp:43
&gt;&gt;  #if ENABLE(MICRODATA)
&gt; 
&gt; It would be nice to have a similar compile assertion for ElementRareData.

Yeah, I&apos;m doing that in a follow up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806668</commentid>
    <comment_count>11</comment_count>
      <attachid>182629</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-14 15:03:31 -0800</bug_when>
    <thetext>Comment on attachment 182629
Addressed Ben&apos;s comments; merged to ToT

Attachment 182629 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15872628</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806713</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-14 15:58:57 -0800</bug_when>
    <thetext>Committed r139681: &lt;http://trac.webkit.org/changeset/139681&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806783</commentid>
    <comment_count>13</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-14 17:00:56 -0800</bug_when>
    <thetext>After this patch, it seems build fail on efl port.


/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:269:26: error: ISO C++ forbids declaration of ‘DOMSettableTokenList’ with no type [-fpermissive]
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:269:30: error: declaration of ‘int WebCore::NodeMicroDataTokenLists::DOMSettableTokenList()’ [-fpermissive]
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/html/DOMSettableTokenList.h:38:7: error: changes meaning of ‘DOMSettableTokenList’ from ‘class WebCore::DOMSettableTokenList’ [-fpermissive]
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:271:40: error: type/value mismatch at argument 1 in template parameter list for ‘template&lt;class T&gt; class WTF::RefPtr’
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:271:40: error:   expected a type, got ‘WebCore::NodeMicroDataTokenLists::DOMSettableTokenList’
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:272:40: error: type/value mismatch at argument 1 in template parameter list for ‘template&lt;class T&gt; class WTF::RefPtr’
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:272:40: error:   expected a type, got ‘WebCore::NodeMicroDataTokenLists::DOMSettableTokenList’
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:273:40: error: type/value mismatch at argument 1 in template parameter list for ‘template&lt;class T&gt; class WTF::RefPtr’
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:273:40: error:   expected a type, got ‘WebCore::NodeMicroDataTokenLists::DOMSettableTokenList’
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h: In static member function ‘static WTF::PassOwnPtr&lt;WebCore::NodeMicroDataTokenLists&gt; WebCore::NodeMicroDataTokenLists::create()’:
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:245:79: error: no matching function for call to ‘WebCore::NodeMicroDataTokenLists::NodeMicroDataTokenLists()’
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:245:79: note: candidate is:
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:243:5: note: WebCore::NodeMicroDataTokenLists::NodeMicroDataTokenLists(const WebCore::NodeMicroDataTokenLists&amp;)
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:243:5: note:   candidate expects 1 argument, 0 provided
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:243:5: note:   candidate expects 1 argument, 0 provided
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h: In member function ‘WebCore::DOMSettableTokenList* WebCore::NodeMicroDataTokenLists::itemProp() const’:
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:250:55: error: cannot convert ‘WTF::PassRefPtr&lt;WebCore::DOMSettableTokenList&gt;’ to ‘int’ in assignment
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:251:27: error: request for member ‘get’ in ‘((const WebCore::NodeMicroDataTokenLists*)this)-&gt;WebCore::NodeMicroDataTokenLists::m_itemProp’, w
hich is of non-class type ‘int’
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h: In member function ‘WebCore::DOMSettableTokenList* WebCore::NodeMicroDataTokenLists::itemRef() const’:
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:257:54: error: cannot convert ‘WTF::PassRefPtr&lt;WebCore::DOMSettableTokenList&gt;’ to ‘int’ in assignment
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:258:26: error: request for member ‘get’ in ‘((const WebCore::NodeMicroDataTokenLists*)this)-&gt;WebCore::NodeMicroDataTokenLists::m_itemRef’, wh
ich is of non-class type ‘int’
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h: In member function ‘WebCore::DOMSettableTokenList* WebCore::NodeMicroDataTokenLists::itemType() const’:
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:264:55: error: cannot convert ‘WTF::PassRefPtr&lt;WebCore::DOMSettableTokenList&gt;’ to ‘int’ in assignment
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:265:27: error: request for member ‘get’ in ‘((const WebCore::NodeMicroDataTokenLists*)this)-&gt;WebCore::NodeMicroDataTokenLists::m_itemType’, w
hich is of non-class type ‘int’
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h: In member function ‘int WebCore::NodeMicroDataTokenLists::DOMSettableTokenList()’:
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:269:30: error: no return statement in function returning non-void [-Werror=return-type]
In file included from /media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/ShadowRoot.cpp:43:0:
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:269:26: error: ISO C++ forbids declaration of ‘DOMSettableTokenList’ with no type [-fpermissive]
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:269:30: error: declaration of ‘int WebCore::NodeMicroDataTokenLists::DOMSettableTokenList()’ [-fpermissive]
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/html/DOMSettableTokenList.h:38:7: error: changes meaning of ‘DOMSettableTokenList’ from ‘class WebCore::DOMSettableTokenList’ [-fpermissive]
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:271:40: error: type/value mismatch at argument 1 in template parameter list for ‘template&lt;class T&gt; class WTF::RefPtr’
/media/WDDisk/workspace/WebKit/WebKit/Source/WebCore/dom/NodeRareData.h:271:40: error:   expected a type, got ‘WebCore::NodeMicroDataTokenLists::DOMSettableTokenList’</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806797</commentid>
    <comment_count>14</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-14 17:12:07 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; After this patch, it seems build fail on efl port.

+ http://trac.webkit.org/changeset/139690</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182374</attachid>
            <date>2013-01-11 11:11:43 -0800</date>
            <delta_ts>2013-01-11 11:33:02 -0800</delta_ts>
            <desc>refactoring</desc>
            <filename>bug-106679-20130111110847.patch</filename>
            <type>text/plain</type>
            <size>17800</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDEzLTAxLTExICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgZnVuY3Rpb25zIGZyb20g
Tm9kZVJhcmVEYXRhIHRvIEVsZW1lbnRSYXJlRGF0YSBhbmQgb3RoZXIgY2xhc3NlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgdGFiIGluZGV4
IHJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gTm9kZVJhcmVEYXRhIHRvIEVsZW1lbnRSYXJlRGF0YSBz
aW5jZSBvbmx5CisgICAgICAgIEhUTUxFbGVtZW50IHVzZXMgdGhlbSwgYW5kIG1vdmVkIHJlbGF0
ZWQgZnVuY3Rpb25zIG9uIE5vZGUgdG8gRWxlbWVudCBhY2NvcmRpbmdseS4KKworICAgICAgICBB
bHNvIHJlcGxhY2VkIHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSBhbmQgZW5zdXJl
VHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5CisgICAgICAgIGJ5IGVuc3VyZU11dGF0
aW9uT2JzZXJ2ZXJEYXRhLCBhbmQgbW92ZWQgbWljcm8tZGF0YSByZWxhdGVkIG1lbWJlciBmdW5j
dGlvbnMgaW50bworICAgICAgICBOb2RlTWljcm9EYXRhVG9rZW5MaXN0cywgYW5kIG1vdmVkIE5v
ZGVNdXRhdGlvbk9ic2VydmVyRGF0YSBhbmQgTm9kZU1pY3JvRGF0YVRva2VuTGlzdHMKKyAgICAg
ICAgb3V0IG9mIE5vZGVSYXJlRGF0YSBhcyB0aGV5J3JlIHVzZWQgb3V0c2lkZSBvZiBOb2RlUmFy
ZURhdGEgbm93LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcmUgYWRkZWQgc2luY2UgdGhlcmUg
c2hvdWxkIGJlIG5vIGJlaGF2aW9yIGNoYW5nZXMuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbGVhclRhYkluZGV4RXhwbGljaXRseUlm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFRhYkluZGV4RXhwbGljaXRs
eSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp0YWJJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgor
ICAgICAgICAoRWxlbWVudCk6CisgICAgICAgICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAg
ICAgICAoRWxlbWVudFJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0
YTo6dGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpzZXRUYWJJ
bmRleEV4cGxpY2l0bHkpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjp0YWJJ
bmRleFNldEV4cGxpY2l0bHkpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpj
bGVhclRhYkluZGV4RXhwbGljaXRseSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6dGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c3Vw
cG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjptdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dHJhbnNpZW50TXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyTXV0YXRpb25PYnNl
cnZlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlclRyYW5zaWVudE11dGF0aW9u
T2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXRlbVByb3ApOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6c2V0SXRlbVByb3ApOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXRl
bVJlZik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRJdGVtUmVmKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6Oml0ZW1UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldEl0ZW1U
eXBlKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICog
ZG9tL05vZGVSYXJlRGF0YS5oOgorICAgICAgICAoTm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YTo6Y3JlYXRlKToKKyAg
ICAgICAgKE5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVN
aWNyb0RhdGFUb2tlbkxpc3RzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZU1pY3Jv
RGF0YVRva2VuTGlzdHM6Oml0ZW1Qcm9wKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVNaWNyb0Rh
dGFUb2tlbkxpc3RzOjpzZXRJdGVtUHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTWljcm9E
YXRhVG9rZW5MaXN0czo6aXRlbVJlZik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTWljcm9EYXRh
VG9rZW5MaXN0czo6c2V0SXRlbVJlZik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTWljcm9EYXRh
VG9rZW5MaXN0czo6aXRlbVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZU1pY3JvRGF0YVRv
a2VuTGlzdHM6OnNldEl0ZW1UeXBlKToKKyAgICAgICAgKE5vZGVSYXJlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlUmFyZURhdGE6Om11dGF0aW9uT2JzZXJ2ZXJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjplbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKToK
KyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisKIDIwMTMtMDEtMTEgIFhpYW56aHUgV2FuZyAgPHdh
bmd4aWFuemh1QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3Ig
c2hvdWxkIGxldCBTY3JvbGxpbmdDb29yZGluYXRvciB1cGRhdGUgbWFpbiB0aHJlYWQgc2Nyb2xs
aW5nIHJlYXNvbnMgYWZ0ZXIgY2hhbmdlIG9mIGxheWVycwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAkocmV2aXNpb24gMTM4OTUzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDI3IEBAIFBhc3NPd25QdHI8Tm9kZVJhcmVE
YXRhPiBFbGVtZW50OjpjcmVhdGUKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEVsZW1lbnRSYXJl
RGF0YSgpKTsKIH0KIAordm9pZCBFbGVtZW50OjpjbGVhclRhYkluZGV4RXhwbGljaXRseUlmTmVl
ZGVkKCkKK3sKKyAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgZWxlbWVudFJhcmVEYXRh
KCktPmNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5KCk7Cit9CisKK3ZvaWQgRWxlbWVudDo6c2V0VGFi
SW5kZXhFeHBsaWNpdGx5KGludCB0YWJJbmRleCkKK3sKKyAgICBlbnN1cmVFbGVtZW50UmFyZURh
dGEoKS0+c2V0VGFiSW5kZXhFeHBsaWNpdGx5KHRhYkluZGV4KTsKK30KKworYm9vbCBFbGVtZW50
OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSAmJiBl
bGVtZW50UmFyZURhdGEoKS0+dGFiSW5kZXhTZXRFeHBsaWNpdGx5KCk7Cit9CisKK3Nob3J0IEVs
ZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IGVs
ZW1lbnRSYXJlRGF0YSgpLT50YWJJbmRleCgpIDogMDsKK30KKwogREVGSU5FX1ZJUlRVQUxfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKEVsZW1lbnQsIGJsdXIpOwogREVGSU5FX1ZJUlRVQUxfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKEVsZW1lbnQsIGVycm9yKTsKIERFRklORV9WSVJUVUFMX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihFbGVtZW50LCBmb2N1cyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmgJKHJldmlzaW9uIDEzODk1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwMiw2ICs1MDIsMTEgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRSZWdpc3RlckFzTmFtZWRJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVnaXN0ZXJBc0V4dHJhTmFtZWRJdGVtKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHZvaWQgY2xlYXJUYWJJbmRleEV4cGxpY2l0bHlJ
Zk5lZWRlZCgpOyAgICAKKyAgICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShpbnQpOworICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0IE9WRVJSSURFOworCiAgICAgUGFzc1JlZlB0cjxIVE1M
Q29sbGVjdGlvbj4gZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oQ29sbGVjdGlvblR5cGUpOwog
ICAgIEhUTUxDb2xsZWN0aW9uKiBjYWNoZWRIVE1MQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDEzODk1
MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNiArNDQsMTEgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNldENvbXB1dGVkU3R5
bGUoKTsKICAgICB2b2lkIHJlc2V0RHluYW1pY1Jlc3R5bGVPYnNlcnZhdGlvbnMoKTsKKyAgICAK
KyAgICBzaG9ydCB0YWJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFiSW5kZXg7IH0KKyAgICB2
b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShzaG9ydCBpbmRleCkgeyBtX3RhYkluZGV4ID0gaW5k
ZXg7IG1fdGFiSW5kZXhXYXNTZXRFeHBsaWNpdGx5ID0gdHJ1ZTsgfQorICAgIGJvb2wgdGFiSW5k
ZXhTZXRFeHBsaWNpdGx5KCkgY29uc3QgeyByZXR1cm4gbV90YWJJbmRleFdhc1NldEV4cGxpY2l0
bHk7IH0KKyAgICB2b2lkIGNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5KCkgeyBtX3RhYkluZGV4ID0g
MDsgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkgPSBmYWxzZTsgfQogCiAgICAgYm9vbCBuZWVk
c0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCgpIGNvbnN0IHsgcmV0dXJuIG1f
bmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2g7IH0KICAgICB2b2lkIHNl
dE5lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKGJvb2wgbmVlZHMpIHsg
bV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA9IG5lZWRzOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMzg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5MiwxNyArNDkyLDcgQEAgSFRNTElucHV0
RWxlbWVudCogTm9kZTo6dG9JbnB1dEVsZW1lbnQoKQogCiBzaG9ydCBOb2RlOjp0YWJJbmRleCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT50YWJJbmRl
eCgpIDogMDsKLX0KLSAgICAKLXZvaWQgTm9kZTo6c2V0VGFiSW5kZXhFeHBsaWNpdGx5KHNob3J0
IGkpCi17Ci0gICAgZW5zdXJlUmFyZURhdGEoKS0+c2V0VGFiSW5kZXhFeHBsaWNpdGx5KGkpOwot
fQotCi12b2lkIE5vZGU6OmNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5KCkKLXsKLSAgICBlbnN1cmVS
YXJlRGF0YSgpLT5jbGVhclRhYkluZGV4RXhwbGljaXRseSgpOworICAgIHJldHVybiAwOwogfQog
CiBTdHJpbmcgTm9kZTo6bm9kZVZhbHVlKCkgY29uc3QKQEAgLTg2Myw3ICs4NTMsNyBAQCB2b2lk
IE5vZGU6OmxhenlBdHRhY2goU2hvdWxkU2V0QXR0YWNoZWQgCiAKIGJvb2wgTm9kZTo6c3VwcG9y
dHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgJiYgcmFyZURhdGEo
KS0+dGFiSW5kZXhTZXRFeHBsaWNpdGx5KCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogICAgIAog
Ym9vbCBOb2RlOjppc0ZvY3VzYWJsZSgpIGNvbnN0CkBAIC0yMTk3LDEyICsyMTg3LDIyIEBAIHZv
aWQgTm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEoKQogCiBWZWN0b3I8T3duUHRyPE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4qIE5vZGU6Om11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgp
CiB7Ci0gICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT5tdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cnkoKSA6IDA7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBOb2RlTXV0YXRpb25PYnNlcnZlckRhdGEqIGRhdGEgPSByYXJlRGF0YSgpLT5t
dXRhdGlvbk9ic2VydmVyRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuICZkYXRhLT5yZWdpc3RyeTsKIH0KIAogSGFzaFNldDxNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uKj4qIE5vZGU6OnRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eSgpCiB7Ci0gICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT50cmFuc2llbnRN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSA6IDA7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBOb2RlTXV0YXRpb25PYnNlcnZlckRhdGEqIGRhdGEgPSBy
YXJlRGF0YSgpLT5tdXRhdGlvbk9ic2VydmVyRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuICZkYXRhLT50cmFuc2llbnRSZWdpc3RyeTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgUmVnaXN0cnk+CkBAIC0yMjM1LDE3ICsyMjM1LDE3IEBAIHZvaWQg
Tm9kZTo6Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXIKIHZvaWQgTm9kZTo6cmVnaXN0ZXJN
dXRhdGlvbk9ic2VydmVyKE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyLCBNdXRhdGlvbk9ic2Vy
dmVyT3B0aW9ucyBvcHRpb25zLCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGF0dHJpYnV0
ZUZpbHRlcikKIHsKICAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKiByZWdpc3RyYXRp
b24gPSAwOwotICAgIFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4g
PiogcmVnaXN0cnkgPSBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnkoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdHJ5LT5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAocmVnaXN0cnktPmF0KGkpLT5vYnNlcnZlcigpID09IG9ic2VydmVy
KSB7Ci0gICAgICAgICAgICByZWdpc3RyYXRpb24gPSByZWdpc3RyeS0+YXQoaSkuZ2V0KCk7Cisg
ICAgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+JiByZWdpc3Ry
eSA9IGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKCktPnJlZ2lz
dHJ5OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0cnkuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKHJlZ2lzdHJ5W2ldLT5vYnNlcnZlcigpID09IG9ic2VydmVyKSB7CisgICAg
ICAgICAgICByZWdpc3RyYXRpb24gPSByZWdpc3RyeVtpXS5nZXQoKTsKICAgICAgICAgICAgIHJl
Z2lzdHJhdGlvbi0+cmVzZXRPYnNlcnZhdGlvbihvcHRpb25zLCBhdHRyaWJ1dGVGaWx0ZXIpOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFyZWdpc3RyYXRpb24pIHsKLSAgICAgICAgcmVn
aXN0cnktPmFwcGVuZChNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpjcmVhdGUob2JzZXJ2
ZXIsIHRoaXMsIG9wdGlvbnMsIGF0dHJpYnV0ZUZpbHRlcikpOwotICAgICAgICByZWdpc3RyYXRp
b24gPSByZWdpc3RyeS0+bGFzdCgpLmdldCgpOworICAgICAgICByZWdpc3RyeS5hcHBlbmQoTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6Y3JlYXRlKG9ic2VydmVyLCB0aGlzLCBvcHRpb25z
LCBhdHRyaWJ1dGVGaWx0ZXIpKTsKKyAgICAgICAgcmVnaXN0cmF0aW9uID0gcmVnaXN0cnkubGFz
dCgpLmdldCgpOwogICAgIH0KIAogICAgIGRvY3VtZW50KCktPmFkZE11dGF0aW9uT2JzZXJ2ZXJU
eXBlcyhyZWdpc3RyYXRpb24tPm11dGF0aW9uVHlwZXMoKSk7CkBAIC0yMjY4LDcgKzIyNjgsNyBA
QCB2b2lkIE5vZGU6OnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKE11CiAKIHZvaWQgTm9kZTo6
cmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24qIHJlZ2lzdHJhdGlvbikKIHsKLSAgICBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVUcmFu
c2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKS0+YWRkKHJlZ2lzdHJhdGlvbik7CisgICAg
ZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKS0+dHJhbnNpZW50
UmVnaXN0cnkuYWRkKHJlZ2lzdHJhdGlvbik7CiB9CiAKIHZvaWQgTm9kZTo6dW5yZWdpc3RlclRy
YW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIoTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiogcmVn
aXN0cmF0aW9uKQpAQCAtMjUyMywzMiArMjUyMywzMiBAQCBib29sIE5vZGU6OndpbGxSZXNwb25k
VG9Ub3VjaEV2ZW50cygpCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKIERPTVNldHRhYmxlVG9rZW5M
aXN0KiBOb2RlOjppdGVtUHJvcCgpCiB7Ci0gICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPml0
ZW1Qcm9wKCk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU1pY3JvRGF0YVRv
a2VuTGlzdHMoKS0+aXRlbVByb3AoKTsKIH0KIAogdm9pZCBOb2RlOjpzZXRJdGVtUHJvcChjb25z
dCBTdHJpbmcmIHZhbHVlKQogewotICAgIGVuc3VyZVJhcmVEYXRhKCktPnNldEl0ZW1Qcm9wKHZh
bHVlKTsKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCkt
PnNldEl0ZW1Qcm9wKHZhbHVlKTsKIH0KIAogRE9NU2V0dGFibGVUb2tlbkxpc3QqIE5vZGU6Oml0
ZW1SZWYoKQogewotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5pdGVtUmVmKCk7CisgICAg
cmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU1pY3JvRGF0YVRva2VuTGlzdHMoKS0+aXRl
bVJlZigpOwogfQogCiB2b2lkIE5vZGU6OnNldEl0ZW1SZWYoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
IHsKLSAgICBlbnN1cmVSYXJlRGF0YSgpLT5zZXRJdGVtUmVmKHZhbHVlKTsKKyAgICBlbnN1cmVS
YXJlRGF0YSgpLT5lbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPnNldEl0ZW1SZWYodmFsdWUp
OwogfQogCiBET01TZXR0YWJsZVRva2VuTGlzdCogTm9kZTo6aXRlbVR5cGUoKQogewotICAgIHJl
dHVybiBlbnN1cmVSYXJlRGF0YSgpLT5pdGVtVHlwZSgpOworICAgIHJldHVybiBlbnN1cmVSYXJl
RGF0YSgpLT5lbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPml0ZW1UeXBlKCk7CiB9CiAKIHZv
aWQgTm9kZTo6c2V0SXRlbVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBlbnN1cmVS
YXJlRGF0YSgpLT5zZXRJdGVtVHlwZSh2YWx1ZSk7CisgICAgZW5zdXJlUmFyZURhdGEoKS0+ZW5z
dXJlTWljcm9EYXRhVG9rZW5MaXN0cygpLT5zZXRJdGVtVHlwZSh2YWx1ZSk7CiB9CiAKIFBhc3NS
ZWZQdHI8UHJvcGVydHlOb2RlTGlzdD4gTm9kZTo6cHJvcGVydHlOb2RlTGlzdChjb25zdCBTdHJp
bmcmIG5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDEzODk1MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0OCw5ICs3NDgsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50KiBv
bGREb2N1bWVudCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmli
dXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0IHsgfQotICAgIHZvaWQgc2V0VGFiSW5k
ZXhFeHBsaWNpdGx5KHNob3J0KTsKLSAgICB2b2lkIGNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5KCk7
Ci0gICAgCisKICAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhI
YXNSYXJlRGF0YUZsYWcpOyB9CiAKICAgICBOb2RlUmFyZURhdGEqIHJhcmVEYXRhKCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCShyZXZpc2lvbiAxMzg5NTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNiwy
NiArMjI2LDY5IEBAIHByaXZhdGU6CiAgICAgVGFnTm9kZUxpc3RDYWNoZU5TIG1fdGFnTm9kZUxp
c3RDYWNoZU5TOwogfTsKIAotY2xhc3MgTm9kZVJhcmVEYXRhIDogcHVibGljIE5vZGVSYXJlRGF0
YUJhc2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5vZGVSYXJlRGF0YSk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworc3RydWN0IE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSB7CisgICAg
VmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+IHJlZ2lzdHJ5Owor
ICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+IHRyYW5zaWVudFJlZ2lz
dHJ5OwogCi0gICAgc3RydWN0IE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSB7Ci0gICAgICAgIFZl
Y3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gPiBtX3JlZ2lzdHJ5Owot
ICAgICAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiBtX3RyYW5zaWVu
dFJlZ2lzdHJ5OwotCi0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vZGVNdXRhdGlvbk9ic2Vy
dmVyRGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IE5vZGVNdXRhdGlvbk9ic2Vy
dmVyRGF0YSk7IH0KLSAgICB9OworICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vZGVNdXRhdGlvbk9i
c2VydmVyRGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IE5vZGVNdXRhdGlvbk9i
c2VydmVyRGF0YSk7IH0KK307CiAKICNpZiBFTkFCTEUoTUlDUk9EQVRBKQotICAgIHN0cnVjdCBO
b2RlTWljcm9EYXRhVG9rZW5MaXN0cyB7Ci0gICAgICAgIFJlZlB0cjxET01TZXR0YWJsZVRva2Vu
TGlzdD4gbV9pdGVtUHJvcDsKLSAgICAgICAgUmVmUHRyPERPTVNldHRhYmxlVG9rZW5MaXN0PiBt
X2l0ZW1SZWY7Ci0gICAgICAgIFJlZlB0cjxET01TZXR0YWJsZVRva2VuTGlzdD4gbV9pdGVtVHlw
ZTsKK2NsYXNzIE5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxOb2RlTWljcm9EYXRhVG9rZW5MaXN0cz4gY3JlYXRlKCkgeyByZXR1cm4gYWRv
cHRQdHIobmV3IE5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzKTsgfQorCisgICAgRE9NU2V0dGFibGVU
b2tlbkxpc3QqIGl0ZW1Qcm9wKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9pdGVtUHJv
cCkKKyAgICAgICAgICAgIG1faXRlbVByb3AgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRl
KCk7CisgICAgICAgIHJldHVybiBtX2l0ZW1Qcm9wLmdldCgpOworICAgIH0KKworICAgIHZvaWQg
c2V0SXRlbVByb3AoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9p
dGVtUHJvcCkKKyAgICAgICAgICAgIG1faXRlbVByb3AgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6
Y3JlYXRlKCk7CisgICAgICAgIG1faXRlbVByb3AtPnNldFZhbHVlKHZhbHVlKTsKKyAgICB9Cisg
ICAgCisgICAgRE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1SZWYoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2l0ZW1SZWYpCisgICAgICAgICAgICBtX2l0ZW1SZWYgPSBET01TZXR0YWJs
ZVRva2VuTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBtX2l0ZW1SZWYuZ2V0KCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0SXRlbVJlZihjb25zdCBTdHJpbmcmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2l0ZW1SZWYpCisgICAgICAgICAgICBtX2l0ZW1SZWYgPSBET01T
ZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIG1faXRlbVJlZi0+c2V0VmFsdWUo
dmFsdWUpOworICAgIH0KKyAgICAKKyAgICBET01TZXR0YWJsZVRva2VuTGlzdCogaXRlbVR5cGUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2l0ZW1UeXBlKQorICAgICAgICAgICAgbV9p
dGVtVHlwZSA9IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJu
IG1faXRlbVR5cGUuZ2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SXRlbVR5cGUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9pdGVtVHlwZSkKKyAgICAg
ICAgICAgIG1faXRlbVR5cGUgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CisgICAg
ICAgIG1faXRlbVR5cGUtPnNldFZhbHVlKHZhbHVlKTsKKyAgICB9CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NPd25QdHI8Tm9kZU1pY3JvRGF0YVRva2VuTGlzdHM+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UHRyKG5ldyBOb2RlTWljcm9EYXRhVG9rZW5MaXN0cyk7IH0KLSAgICB9OworcHJpdmF0ZToK
KyAgICBSZWZQdHI8RE9NU2V0dGFibGVUb2tlbkxpc3Q+IG1faXRlbVByb3A7CisgICAgUmVmUHRy
PERPTVNldHRhYmxlVG9rZW5MaXN0PiBtX2l0ZW1SZWY7CisgICAgUmVmUHRyPERPTVNldHRhYmxl
VG9rZW5MaXN0PiBtX2l0ZW1UeXBlOworfTsKICNlbmRpZgogCitjbGFzcyBOb2RlUmFyZURhdGEg
OiBwdWJsaWMgTm9kZVJhcmVEYXRhQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9k
ZVJhcmVEYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6ICAgIAogICAgIE5v
ZGVSYXJlRGF0YSgpCiAgICAgICAgIDogbV90YWJJbmRleCgwKQpAQCAtMjkwLDI1ICszMzMsMTIg
QEAgcHVibGljOiAgICAKICAgICAgICAgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOwogICAgIH0K
IAotICAgIHNob3J0IHRhYkluZGV4KCkgY29uc3QgeyByZXR1cm4gbV90YWJJbmRleDsgfQotICAg
IHZvaWQgc2V0VGFiSW5kZXhFeHBsaWNpdGx5KHNob3J0IGluZGV4KSB7IG1fdGFiSW5kZXggPSBp
bmRleDsgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkgPSB0cnVlOyB9Ci0gICAgYm9vbCB0YWJJ
bmRleFNldEV4cGxpY2l0bHkoKSBjb25zdCB7IHJldHVybiBtX3RhYkluZGV4V2FzU2V0RXhwbGlj
aXRseTsgfQotICAgIHZvaWQgY2xlYXJUYWJJbmRleEV4cGxpY2l0bHkoKSB7IG1fdGFiSW5kZXgg
PSAwOyBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRseSA9IGZhbHNlOyB9Ci0KLSAgICBWZWN0b3I8
T3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4qIG11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyeSgpIHsgcmV0dXJuIG1fbXV0YXRpb25PYnNlcnZlckRhdGEgPyAmbV9tdXRhdGlvbk9i
c2VydmVyRGF0YS0+bV9yZWdpc3RyeSA6IDA7IH0KLSAgICBWZWN0b3I8T3duUHRyPE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4qIGVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgp
Ci0gICAgewotICAgICAgICBpZiAoIW1fbXV0YXRpb25PYnNlcnZlckRhdGEpCi0gICAgICAgICAg
ICBtX211dGF0aW9uT2JzZXJ2ZXJEYXRhID0gTm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhOjpjcmVh
dGUoKTsKLSAgICAgICAgcmV0dXJuICZtX211dGF0aW9uT2JzZXJ2ZXJEYXRhLT5tX3JlZ2lzdHJ5
OwotICAgIH0KLQotICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KiB0
cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSB7IHJldHVybiBtX211dGF0aW9uT2Jz
ZXJ2ZXJEYXRhID8gJm1fbXV0YXRpb25PYnNlcnZlckRhdGEtPm1fdHJhbnNpZW50UmVnaXN0cnkg
OiAwOyB9Ci0gICAgSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIGVuc3Vy
ZVRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpCisgICAgTm9kZU11dGF0aW9uT2Jz
ZXJ2ZXJEYXRhKiBtdXRhdGlvbk9ic2VydmVyRGF0YSgpIHsgcmV0dXJuIG1fbXV0YXRpb25PYnNl
cnZlckRhdGEuZ2V0KCk7IH0KKyAgICBOb2RlTXV0YXRpb25PYnNlcnZlckRhdGEqIGVuc3VyZU11
dGF0aW9uT2JzZXJ2ZXJEYXRhKCkKICAgICB7CiAgICAgICAgIGlmICghbV9tdXRhdGlvbk9ic2Vy
dmVyRGF0YSkKICAgICAgICAgICAgIG1fbXV0YXRpb25PYnNlcnZlckRhdGEgPSBOb2RlTXV0YXRp
b25PYnNlcnZlckRhdGE6OmNyZWF0ZSgpOwotICAgICAgICByZXR1cm4gJm1fbXV0YXRpb25PYnNl
cnZlckRhdGEtPm1fdHJhbnNpZW50UmVnaXN0cnk7CisgICAgICAgIHJldHVybiBtX211dGF0aW9u
T2JzZXJ2ZXJEYXRhLmdldCgpOwogICAgIH0KIAogI2lmIEVOQUJMRShNSUNST0RBVEEpCkBAIC0z
MTgsNTQgKzM0OCw2IEBAIHB1YmxpYzogICAgCiAgICAgICAgICAgICBtX21pY3JvRGF0YVRva2Vu
TGlzdHMgPSBOb2RlTWljcm9EYXRhVG9rZW5MaXN0czo6Y3JlYXRlKCk7CiAgICAgICAgIHJldHVy
biBtX21pY3JvRGF0YVRva2VuTGlzdHMuZ2V0KCk7CiAgICAgfQotCi0gICAgRE9NU2V0dGFibGVU
b2tlbkxpc3QqIGl0ZW1Qcm9wKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghZW5zdXJlTWlj
cm9EYXRhVG9rZW5MaXN0cygpLT5tX2l0ZW1Qcm9wKQotICAgICAgICAgICAgbV9taWNyb0RhdGFU
b2tlbkxpc3RzLT5tX2l0ZW1Qcm9wID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwot
Ci0gICAgICAgIHJldHVybiBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVByb3AuZ2V0KCk7
Ci0gICAgfQotCi0gICAgdm9pZCBzZXRJdGVtUHJvcChjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgaWYgKCFlbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPm1faXRlbVByb3Ap
Ci0gICAgICAgICAgICBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVByb3AgPSBET01TZXR0
YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgbV9taWNyb0RhdGFUb2tlbkxpc3Rz
LT5tX2l0ZW1Qcm9wLT5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgfQotCi0gICAgRE9NU2V0dGFibGVU
b2tlbkxpc3QqIGl0ZW1SZWYoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFlbnN1cmVNaWNy
b0RhdGFUb2tlbkxpc3RzKCktPm1faXRlbVJlZikKLSAgICAgICAgICAgIG1fbWljcm9EYXRhVG9r
ZW5MaXN0cy0+bV9pdGVtUmVmID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwotCi0g
ICAgICAgIHJldHVybiBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVJlZi5nZXQoKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHNldEl0ZW1SZWYoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmICghZW5zdXJlTWljcm9EYXRhVG9rZW5MaXN0cygpLT5tX2l0ZW1SZWYpCi0gICAg
ICAgICAgICBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVJlZiA9IERPTVNldHRhYmxlVG9r
ZW5MaXN0OjpjcmVhdGUoKTsKLQotICAgICAgICBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRl
bVJlZi0+c2V0VmFsdWUodmFsdWUpOwotICAgIH0KLQotICAgIERPTVNldHRhYmxlVG9rZW5MaXN0
KiBpdGVtVHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIWVuc3VyZU1pY3JvRGF0YVRv
a2VuTGlzdHMoKS0+bV9pdGVtVHlwZSkKLSAgICAgICAgICAgIG1fbWljcm9EYXRhVG9rZW5MaXN0
cy0+bV9pdGVtVHlwZSA9IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUoKTsKLQotICAgICAg
ICByZXR1cm4gbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1UeXBlLmdldCgpOwotICAgIH0K
LQotICAgIHZvaWQgc2V0SXRlbVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGlmICghZW5zdXJlTWljcm9EYXRhVG9rZW5MaXN0cygpLT5tX2l0ZW1UeXBlKQotICAgICAg
ICAgICAgbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1UeXBlID0gRE9NU2V0dGFibGVUb2tl
bkxpc3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgIG1fbWljcm9EYXRhVG9rZW5MaXN0cy0+bV9pdGVt
VHlwZS0+c2V0VmFsdWUodmFsdWUpOwotICAgIH0KICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lk
IHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzg5NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3
IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFEKICAgICBlbHNlIGlm
IChuYW1lID09IHRhYmluZGV4QXR0cikgewogICAgICAgICBpbnQgdGFiaW5kZXggPSAwOwogICAg
ICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2xlYXJUYWJJbmRleEV4cGxp
Y2l0bHkoKTsKKyAgICAgICAgICAgIGNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5SWZOZWVkZWQoKTsK
ICAgICAgICAgZWxzZSBpZiAocGFyc2VIVE1MSW50ZWdlcih2YWx1ZSwgdGFiaW5kZXgpKSB7CiAg
ICAgICAgICAgICAvLyBDbGFtcCB0YWJpbmRleCB0byB0aGUgcmFuZ2Ugb2YgJ3Nob3J0JyB0byBt
YXRjaCBGaXJlZm94J3MgYmVoYXZpb3IuCiAgICAgICAgICAgICBzZXRUYWJJbmRleEV4cGxpY2l0
bHkobWF4KHN0YXRpY19jYXN0PGludD4oc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigp
KSwgbWluKHRhYmluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8c2hv
cnQ+OjptYXgoKSkpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182383</attachid>
            <date>2013-01-11 11:33:05 -0800</date>
            <delta_ts>2013-01-14 14:34:30 -0800</delta_ts>
            <desc>Fixed micro data build</desc>
            <filename>bug-106679-20130111113007.patch</filename>
            <type>text/plain</type>
            <size>17824</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzOTQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDEzLTAxLTExICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgZnVuY3Rpb25zIGZyb20g
Tm9kZVJhcmVEYXRhIHRvIEVsZW1lbnRSYXJlRGF0YSBhbmQgb3RoZXIgY2xhc3NlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgdGFiIGluZGV4
IHJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gTm9kZVJhcmVEYXRhIHRvIEVsZW1lbnRSYXJlRGF0YSBz
aW5jZSBvbmx5CisgICAgICAgIEhUTUxFbGVtZW50IHVzZXMgdGhlbSwgYW5kIG1vdmVkIHJlbGF0
ZWQgZnVuY3Rpb25zIG9uIE5vZGUgdG8gRWxlbWVudCBhY2NvcmRpbmdseS4KKworICAgICAgICBB
bHNvIHJlcGxhY2VkIHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSBhbmQgZW5zdXJl
VHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5CisgICAgICAgIGJ5IGVuc3VyZU11dGF0
aW9uT2JzZXJ2ZXJEYXRhLCBhbmQgbW92ZWQgbWljcm8tZGF0YSByZWxhdGVkIG1lbWJlciBmdW5j
dGlvbnMgaW50bworICAgICAgICBOb2RlTWljcm9EYXRhVG9rZW5MaXN0cywgYW5kIG1vdmVkIE5v
ZGVNdXRhdGlvbk9ic2VydmVyRGF0YSBhbmQgTm9kZU1pY3JvRGF0YVRva2VuTGlzdHMKKyAgICAg
ICAgb3V0IG9mIE5vZGVSYXJlRGF0YSBhcyB0aGV5J3JlIHVzZWQgb3V0c2lkZSBvZiBOb2RlUmFy
ZURhdGEgbm93LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcmUgYWRkZWQgc2luY2UgdGhlcmUg
c2hvdWxkIGJlIG5vIGJlaGF2aW9yIGNoYW5nZXMuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbGVhclRhYkluZGV4RXhwbGljaXRseUlm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFRhYkluZGV4RXhwbGljaXRs
eSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp0YWJJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgor
ICAgICAgICAoRWxlbWVudCk6CisgICAgICAgICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAg
ICAgICAoRWxlbWVudFJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0
YTo6dGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpzZXRUYWJJ
bmRleEV4cGxpY2l0bHkpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjp0YWJJ
bmRleFNldEV4cGxpY2l0bHkpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpj
bGVhclRhYkluZGV4RXhwbGljaXRseSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6dGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c3Vw
cG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjptdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dHJhbnNpZW50TXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyTXV0YXRpb25PYnNl
cnZlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlclRyYW5zaWVudE11dGF0aW9u
T2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXRlbVByb3ApOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6c2V0SXRlbVByb3ApOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXRl
bVJlZik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRJdGVtUmVmKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6Oml0ZW1UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldEl0ZW1U
eXBlKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICog
ZG9tL05vZGVSYXJlRGF0YS5oOgorICAgICAgICAoTm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YTo6Y3JlYXRlKToKKyAg
ICAgICAgKE5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVN
aWNyb0RhdGFUb2tlbkxpc3RzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZU1pY3Jv
RGF0YVRva2VuTGlzdHM6Oml0ZW1Qcm9wKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVNaWNyb0Rh
dGFUb2tlbkxpc3RzOjpzZXRJdGVtUHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTWljcm9E
YXRhVG9rZW5MaXN0czo6aXRlbVJlZik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTWljcm9EYXRh
VG9rZW5MaXN0czo6c2V0SXRlbVJlZik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTWljcm9EYXRh
VG9rZW5MaXN0czo6aXRlbVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZU1pY3JvRGF0YVRv
a2VuTGlzdHM6OnNldEl0ZW1UeXBlKToKKyAgICAgICAgKE5vZGVSYXJlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlUmFyZURhdGE6Om11dGF0aW9uT2JzZXJ2ZXJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjplbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKToK
KyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisKIDIwMTMtMDEtMTEgIFhpYW56aHUgV2FuZyAgPHdh
bmd4aWFuemh1QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3Ig
c2hvdWxkIGxldCBTY3JvbGxpbmdDb29yZGluYXRvciB1cGRhdGUgbWFpbiB0aHJlYWQgc2Nyb2xs
aW5nIHJlYXNvbnMgYWZ0ZXIgY2hhbmdlIG9mIGxheWVycwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAkocmV2aXNpb24gMTM4OTUzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDI3IEBAIFBhc3NPd25QdHI8Tm9kZVJhcmVE
YXRhPiBFbGVtZW50OjpjcmVhdGUKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEVsZW1lbnRSYXJl
RGF0YSgpKTsKIH0KIAordm9pZCBFbGVtZW50OjpjbGVhclRhYkluZGV4RXhwbGljaXRseUlmTmVl
ZGVkKCkKK3sKKyAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgZWxlbWVudFJhcmVEYXRh
KCktPmNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5KCk7Cit9CisKK3ZvaWQgRWxlbWVudDo6c2V0VGFi
SW5kZXhFeHBsaWNpdGx5KGludCB0YWJJbmRleCkKK3sKKyAgICBlbnN1cmVFbGVtZW50UmFyZURh
dGEoKS0+c2V0VGFiSW5kZXhFeHBsaWNpdGx5KHRhYkluZGV4KTsKK30KKworYm9vbCBFbGVtZW50
OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSAmJiBl
bGVtZW50UmFyZURhdGEoKS0+dGFiSW5kZXhTZXRFeHBsaWNpdGx5KCk7Cit9CisKK3Nob3J0IEVs
ZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IGVs
ZW1lbnRSYXJlRGF0YSgpLT50YWJJbmRleCgpIDogMDsKK30KKwogREVGSU5FX1ZJUlRVQUxfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKEVsZW1lbnQsIGJsdXIpOwogREVGSU5FX1ZJUlRVQUxfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKEVsZW1lbnQsIGVycm9yKTsKIERFRklORV9WSVJUVUFMX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihFbGVtZW50LCBmb2N1cyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmgJKHJldmlzaW9uIDEzODk1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwMiw2ICs1MDIsMTEgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRSZWdpc3RlckFzTmFtZWRJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVnaXN0ZXJBc0V4dHJhTmFtZWRJdGVtKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHZvaWQgY2xlYXJUYWJJbmRleEV4cGxpY2l0bHlJ
Zk5lZWRlZCgpOyAgICAKKyAgICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShpbnQpOworICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0IE9WRVJSSURFOworCiAgICAgUGFzc1JlZlB0cjxIVE1M
Q29sbGVjdGlvbj4gZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oQ29sbGVjdGlvblR5cGUpOwog
ICAgIEhUTUxDb2xsZWN0aW9uKiBjYWNoZWRIVE1MQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDEzODk1
MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNiArNDQsMTEgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNldENvbXB1dGVkU3R5
bGUoKTsKICAgICB2b2lkIHJlc2V0RHluYW1pY1Jlc3R5bGVPYnNlcnZhdGlvbnMoKTsKKyAgICAK
KyAgICBzaG9ydCB0YWJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFiSW5kZXg7IH0KKyAgICB2
b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShzaG9ydCBpbmRleCkgeyBtX3RhYkluZGV4ID0gaW5k
ZXg7IG1fdGFiSW5kZXhXYXNTZXRFeHBsaWNpdGx5ID0gdHJ1ZTsgfQorICAgIGJvb2wgdGFiSW5k
ZXhTZXRFeHBsaWNpdGx5KCkgY29uc3QgeyByZXR1cm4gbV90YWJJbmRleFdhc1NldEV4cGxpY2l0
bHk7IH0KKyAgICB2b2lkIGNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5KCkgeyBtX3RhYkluZGV4ID0g
MDsgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkgPSBmYWxzZTsgfQogCiAgICAgYm9vbCBuZWVk
c0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCgpIGNvbnN0IHsgcmV0dXJuIG1f
bmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2g7IH0KICAgICB2b2lkIHNl
dE5lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKGJvb2wgbmVlZHMpIHsg
bV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA9IG5lZWRzOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMzg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5MiwxNyArNDkyLDcgQEAgSFRNTElucHV0
RWxlbWVudCogTm9kZTo6dG9JbnB1dEVsZW1lbnQoKQogCiBzaG9ydCBOb2RlOjp0YWJJbmRleCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT50YWJJbmRl
eCgpIDogMDsKLX0KLSAgICAKLXZvaWQgTm9kZTo6c2V0VGFiSW5kZXhFeHBsaWNpdGx5KHNob3J0
IGkpCi17Ci0gICAgZW5zdXJlUmFyZURhdGEoKS0+c2V0VGFiSW5kZXhFeHBsaWNpdGx5KGkpOwot
fQotCi12b2lkIE5vZGU6OmNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5KCkKLXsKLSAgICBlbnN1cmVS
YXJlRGF0YSgpLT5jbGVhclRhYkluZGV4RXhwbGljaXRseSgpOworICAgIHJldHVybiAwOwogfQog
CiBTdHJpbmcgTm9kZTo6bm9kZVZhbHVlKCkgY29uc3QKQEAgLTg2Myw3ICs4NTMsNyBAQCB2b2lk
IE5vZGU6OmxhenlBdHRhY2goU2hvdWxkU2V0QXR0YWNoZWQgCiAKIGJvb2wgTm9kZTo6c3VwcG9y
dHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgJiYgcmFyZURhdGEo
KS0+dGFiSW5kZXhTZXRFeHBsaWNpdGx5KCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogICAgIAog
Ym9vbCBOb2RlOjppc0ZvY3VzYWJsZSgpIGNvbnN0CkBAIC0yMTk3LDEyICsyMTg3LDIyIEBAIHZv
aWQgTm9kZTo6Y2xlYXJFdmVudFRhcmdldERhdGEoKQogCiBWZWN0b3I8T3duUHRyPE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4qIE5vZGU6Om11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgp
CiB7Ci0gICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT5tdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cnkoKSA6IDA7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBOb2RlTXV0YXRpb25PYnNlcnZlckRhdGEqIGRhdGEgPSByYXJlRGF0YSgpLT5t
dXRhdGlvbk9ic2VydmVyRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuICZkYXRhLT5yZWdpc3RyeTsKIH0KIAogSGFzaFNldDxNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uKj4qIE5vZGU6OnRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eSgpCiB7Ci0gICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT50cmFuc2llbnRN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSA6IDA7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBOb2RlTXV0YXRpb25PYnNlcnZlckRhdGEqIGRhdGEgPSBy
YXJlRGF0YSgpLT5tdXRhdGlvbk9ic2VydmVyRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuICZkYXRhLT50cmFuc2llbnRSZWdpc3RyeTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgUmVnaXN0cnk+CkBAIC0yMjM1LDE3ICsyMjM1LDE3IEBAIHZvaWQg
Tm9kZTo6Z2V0UmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXIKIHZvaWQgTm9kZTo6cmVnaXN0ZXJN
dXRhdGlvbk9ic2VydmVyKE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyLCBNdXRhdGlvbk9ic2Vy
dmVyT3B0aW9ucyBvcHRpb25zLCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIGF0dHJpYnV0
ZUZpbHRlcikKIHsKICAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKiByZWdpc3RyYXRp
b24gPSAwOwotICAgIFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4g
PiogcmVnaXN0cnkgPSBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnkoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdHJ5LT5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAocmVnaXN0cnktPmF0KGkpLT5vYnNlcnZlcigpID09IG9ic2VydmVy
KSB7Ci0gICAgICAgICAgICByZWdpc3RyYXRpb24gPSByZWdpc3RyeS0+YXQoaSkuZ2V0KCk7Cisg
ICAgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+JiByZWdpc3Ry
eSA9IGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKCktPnJlZ2lz
dHJ5OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0cnkuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKHJlZ2lzdHJ5W2ldLT5vYnNlcnZlcigpID09IG9ic2VydmVyKSB7CisgICAg
ICAgICAgICByZWdpc3RyYXRpb24gPSByZWdpc3RyeVtpXS5nZXQoKTsKICAgICAgICAgICAgIHJl
Z2lzdHJhdGlvbi0+cmVzZXRPYnNlcnZhdGlvbihvcHRpb25zLCBhdHRyaWJ1dGVGaWx0ZXIpOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFyZWdpc3RyYXRpb24pIHsKLSAgICAgICAgcmVn
aXN0cnktPmFwcGVuZChNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpjcmVhdGUob2JzZXJ2
ZXIsIHRoaXMsIG9wdGlvbnMsIGF0dHJpYnV0ZUZpbHRlcikpOwotICAgICAgICByZWdpc3RyYXRp
b24gPSByZWdpc3RyeS0+bGFzdCgpLmdldCgpOworICAgICAgICByZWdpc3RyeS5hcHBlbmQoTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6Y3JlYXRlKG9ic2VydmVyLCB0aGlzLCBvcHRpb25z
LCBhdHRyaWJ1dGVGaWx0ZXIpKTsKKyAgICAgICAgcmVnaXN0cmF0aW9uID0gcmVnaXN0cnkubGFz
dCgpLmdldCgpOwogICAgIH0KIAogICAgIGRvY3VtZW50KCktPmFkZE11dGF0aW9uT2JzZXJ2ZXJU
eXBlcyhyZWdpc3RyYXRpb24tPm11dGF0aW9uVHlwZXMoKSk7CkBAIC0yMjY4LDcgKzIyNjgsNyBA
QCB2b2lkIE5vZGU6OnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKE11CiAKIHZvaWQgTm9kZTo6
cmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24qIHJlZ2lzdHJhdGlvbikKIHsKLSAgICBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVUcmFu
c2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKS0+YWRkKHJlZ2lzdHJhdGlvbik7CisgICAg
ZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKS0+dHJhbnNpZW50
UmVnaXN0cnkuYWRkKHJlZ2lzdHJhdGlvbik7CiB9CiAKIHZvaWQgTm9kZTo6dW5yZWdpc3RlclRy
YW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIoTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiogcmVn
aXN0cmF0aW9uKQpAQCAtMjUyMywzMiArMjUyMywzMiBAQCBib29sIE5vZGU6OndpbGxSZXNwb25k
VG9Ub3VjaEV2ZW50cygpCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKIERPTVNldHRhYmxlVG9rZW5M
aXN0KiBOb2RlOjppdGVtUHJvcCgpCiB7Ci0gICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPml0
ZW1Qcm9wKCk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU1pY3JvRGF0YVRv
a2VuTGlzdHMoKS0+aXRlbVByb3AoKTsKIH0KIAogdm9pZCBOb2RlOjpzZXRJdGVtUHJvcChjb25z
dCBTdHJpbmcmIHZhbHVlKQogewotICAgIGVuc3VyZVJhcmVEYXRhKCktPnNldEl0ZW1Qcm9wKHZh
bHVlKTsKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCkt
PnNldEl0ZW1Qcm9wKHZhbHVlKTsKIH0KIAogRE9NU2V0dGFibGVUb2tlbkxpc3QqIE5vZGU6Oml0
ZW1SZWYoKQogewotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5pdGVtUmVmKCk7CisgICAg
cmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU1pY3JvRGF0YVRva2VuTGlzdHMoKS0+aXRl
bVJlZigpOwogfQogCiB2b2lkIE5vZGU6OnNldEl0ZW1SZWYoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
IHsKLSAgICBlbnN1cmVSYXJlRGF0YSgpLT5zZXRJdGVtUmVmKHZhbHVlKTsKKyAgICBlbnN1cmVS
YXJlRGF0YSgpLT5lbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPnNldEl0ZW1SZWYodmFsdWUp
OwogfQogCiBET01TZXR0YWJsZVRva2VuTGlzdCogTm9kZTo6aXRlbVR5cGUoKQogewotICAgIHJl
dHVybiBlbnN1cmVSYXJlRGF0YSgpLT5pdGVtVHlwZSgpOworICAgIHJldHVybiBlbnN1cmVSYXJl
RGF0YSgpLT5lbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPml0ZW1UeXBlKCk7CiB9CiAKIHZv
aWQgTm9kZTo6c2V0SXRlbVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBlbnN1cmVS
YXJlRGF0YSgpLT5zZXRJdGVtVHlwZSh2YWx1ZSk7CisgICAgZW5zdXJlUmFyZURhdGEoKS0+ZW5z
dXJlTWljcm9EYXRhVG9rZW5MaXN0cygpLT5zZXRJdGVtVHlwZSh2YWx1ZSk7CiB9CiAKIFBhc3NS
ZWZQdHI8UHJvcGVydHlOb2RlTGlzdD4gTm9kZTo6cHJvcGVydHlOb2RlTGlzdChjb25zdCBTdHJp
bmcmIG5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDEzODk1MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0OCw5ICs3NDgsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50KiBv
bGREb2N1bWVudCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmli
dXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0IHsgfQotICAgIHZvaWQgc2V0VGFiSW5k
ZXhFeHBsaWNpdGx5KHNob3J0KTsKLSAgICB2b2lkIGNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5KCk7
Ci0gICAgCisKICAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhI
YXNSYXJlRGF0YUZsYWcpOyB9CiAKICAgICBOb2RlUmFyZURhdGEqIHJhcmVEYXRhKCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCShyZXZpc2lvbiAxMzg5NTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNiwy
NiArMjI2LDY5IEBAIHByaXZhdGU6CiAgICAgVGFnTm9kZUxpc3RDYWNoZU5TIG1fdGFnTm9kZUxp
c3RDYWNoZU5TOwogfTsKIAotY2xhc3MgTm9kZVJhcmVEYXRhIDogcHVibGljIE5vZGVSYXJlRGF0
YUJhc2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5vZGVSYXJlRGF0YSk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworc3RydWN0IE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSB7CisgICAg
VmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+IHJlZ2lzdHJ5Owor
ICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+IHRyYW5zaWVudFJlZ2lz
dHJ5OwogCi0gICAgc3RydWN0IE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSB7Ci0gICAgICAgIFZl
Y3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gPiBtX3JlZ2lzdHJ5Owot
ICAgICAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiBtX3RyYW5zaWVu
dFJlZ2lzdHJ5OwotCi0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vZGVNdXRhdGlvbk9ic2Vy
dmVyRGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IE5vZGVNdXRhdGlvbk9ic2Vy
dmVyRGF0YSk7IH0KLSAgICB9OworICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vZGVNdXRhdGlvbk9i
c2VydmVyRGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IE5vZGVNdXRhdGlvbk9i
c2VydmVyRGF0YSk7IH0KK307CiAKICNpZiBFTkFCTEUoTUlDUk9EQVRBKQotICAgIHN0cnVjdCBO
b2RlTWljcm9EYXRhVG9rZW5MaXN0cyB7Ci0gICAgICAgIFJlZlB0cjxET01TZXR0YWJsZVRva2Vu
TGlzdD4gbV9pdGVtUHJvcDsKLSAgICAgICAgUmVmUHRyPERPTVNldHRhYmxlVG9rZW5MaXN0PiBt
X2l0ZW1SZWY7Ci0gICAgICAgIFJlZlB0cjxET01TZXR0YWJsZVRva2VuTGlzdD4gbV9pdGVtVHlw
ZTsKK2NsYXNzIE5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxOb2RlTWljcm9EYXRhVG9rZW5MaXN0cz4gY3JlYXRlKCkgeyByZXR1cm4gYWRv
cHRQdHIobmV3IE5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzKTsgfQorCisgICAgRE9NU2V0dGFibGVU
b2tlbkxpc3QqIGl0ZW1Qcm9wKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9pdGVtUHJv
cCkKKyAgICAgICAgICAgIG1faXRlbVByb3AgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRl
KCk7CisgICAgICAgIHJldHVybiBtX2l0ZW1Qcm9wLmdldCgpOworICAgIH0KKworICAgIHZvaWQg
c2V0SXRlbVByb3AoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9p
dGVtUHJvcCkKKyAgICAgICAgICAgIG1faXRlbVByb3AgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6
Y3JlYXRlKCk7CisgICAgICAgIG1faXRlbVByb3AtPnNldFZhbHVlKHZhbHVlKTsKKyAgICB9Cisg
ICAgCisgICAgRE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1SZWYoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2l0ZW1SZWYpCisgICAgICAgICAgICBtX2l0ZW1SZWYgPSBET01TZXR0YWJs
ZVRva2VuTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBtX2l0ZW1SZWYuZ2V0KCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0SXRlbVJlZihjb25zdCBTdHJpbmcmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2l0ZW1SZWYpCisgICAgICAgICAgICBtX2l0ZW1SZWYgPSBET01T
ZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIG1faXRlbVJlZi0+c2V0VmFsdWUo
dmFsdWUpOworICAgIH0KKyAgICAKKyAgICBET01TZXR0YWJsZVRva2VuTGlzdCogaXRlbVR5cGUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2l0ZW1UeXBlKQorICAgICAgICAgICAgbV9p
dGVtVHlwZSA9IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJu
IG1faXRlbVR5cGUuZ2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SXRlbVR5cGUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9pdGVtVHlwZSkKKyAgICAg
ICAgICAgIG1faXRlbVR5cGUgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CisgICAg
ICAgIG1faXRlbVR5cGUtPnNldFZhbHVlKHZhbHVlKTsKKyAgICB9CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NPd25QdHI8Tm9kZU1pY3JvRGF0YVRva2VuTGlzdHM+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UHRyKG5ldyBOb2RlTWljcm9EYXRhVG9rZW5MaXN0cyk7IH0KLSAgICB9OworcHJpdmF0ZToK
KyAgICBtdXRhYmxlIFJlZlB0cjxET01TZXR0YWJsZVRva2VuTGlzdD4gbV9pdGVtUHJvcDsKKyAg
ICBtdXRhYmxlIFJlZlB0cjxET01TZXR0YWJsZVRva2VuTGlzdD4gbV9pdGVtUmVmOworICAgIG11
dGFibGUgUmVmUHRyPERPTVNldHRhYmxlVG9rZW5MaXN0PiBtX2l0ZW1UeXBlOworfTsKICNlbmRp
ZgogCitjbGFzcyBOb2RlUmFyZURhdGEgOiBwdWJsaWMgTm9kZVJhcmVEYXRhQmFzZSB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTm9kZVJhcmVEYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6ICAgIAogICAgIE5vZGVSYXJlRGF0YSgpCiAgICAgICAgIDogbV90YWJJbmRl
eCgwKQpAQCAtMjkwLDI1ICszMzMsMTIgQEAgcHVibGljOiAgICAKICAgICAgICAgcmV0dXJuIG1f
bm9kZUxpc3RzLmdldCgpOwogICAgIH0KIAotICAgIHNob3J0IHRhYkluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV90YWJJbmRleDsgfQotICAgIHZvaWQgc2V0VGFiSW5kZXhFeHBsaWNpdGx5KHNob3J0
IGluZGV4KSB7IG1fdGFiSW5kZXggPSBpbmRleDsgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkg
PSB0cnVlOyB9Ci0gICAgYm9vbCB0YWJJbmRleFNldEV4cGxpY2l0bHkoKSBjb25zdCB7IHJldHVy
biBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRseTsgfQotICAgIHZvaWQgY2xlYXJUYWJJbmRleEV4
cGxpY2l0bHkoKSB7IG1fdGFiSW5kZXggPSAwOyBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRseSA9
IGZhbHNlOyB9Ci0KLSAgICBWZWN0b3I8T3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b24+ID4qIG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpIHsgcmV0dXJuIG1fbXV0YXRpb25PYnNl
cnZlckRhdGEgPyAmbV9tdXRhdGlvbk9ic2VydmVyRGF0YS0+bV9yZWdpc3RyeSA6IDA7IH0KLSAg
ICBWZWN0b3I8T3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4qIGVuc3VyZU11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpCi0gICAgewotICAgICAgICBpZiAoIW1fbXV0YXRpb25P
YnNlcnZlckRhdGEpCi0gICAgICAgICAgICBtX211dGF0aW9uT2JzZXJ2ZXJEYXRhID0gTm9kZU11
dGF0aW9uT2JzZXJ2ZXJEYXRhOjpjcmVhdGUoKTsKLSAgICAgICAgcmV0dXJuICZtX211dGF0aW9u
T2JzZXJ2ZXJEYXRhLT5tX3JlZ2lzdHJ5OwotICAgIH0KLQotICAgIEhhc2hTZXQ8TXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbio+KiB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnko
KSB7IHJldHVybiBtX211dGF0aW9uT2JzZXJ2ZXJEYXRhID8gJm1fbXV0YXRpb25PYnNlcnZlckRh
dGEtPm1fdHJhbnNpZW50UmVnaXN0cnkgOiAwOyB9Ci0gICAgSGFzaFNldDxNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uKj4qIGVuc3VyZVRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eSgpCisgICAgTm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKiBtdXRhdGlvbk9ic2VydmVyRGF0YSgp
IHsgcmV0dXJuIG1fbXV0YXRpb25PYnNlcnZlckRhdGEuZ2V0KCk7IH0KKyAgICBOb2RlTXV0YXRp
b25PYnNlcnZlckRhdGEqIGVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkKICAgICB7CiAgICAg
ICAgIGlmICghbV9tdXRhdGlvbk9ic2VydmVyRGF0YSkKICAgICAgICAgICAgIG1fbXV0YXRpb25P
YnNlcnZlckRhdGEgPSBOb2RlTXV0YXRpb25PYnNlcnZlckRhdGE6OmNyZWF0ZSgpOwotICAgICAg
ICByZXR1cm4gJm1fbXV0YXRpb25PYnNlcnZlckRhdGEtPm1fdHJhbnNpZW50UmVnaXN0cnk7Cisg
ICAgICAgIHJldHVybiBtX211dGF0aW9uT2JzZXJ2ZXJEYXRhLmdldCgpOwogICAgIH0KIAogI2lm
IEVOQUJMRShNSUNST0RBVEEpCkBAIC0zMTgsNTQgKzM0OCw2IEBAIHB1YmxpYzogICAgCiAgICAg
ICAgICAgICBtX21pY3JvRGF0YVRva2VuTGlzdHMgPSBOb2RlTWljcm9EYXRhVG9rZW5MaXN0czo6
Y3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBtX21pY3JvRGF0YVRva2VuTGlzdHMuZ2V0KCk7CiAg
ICAgfQotCi0gICAgRE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1Qcm9wKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmICghZW5zdXJlTWljcm9EYXRhVG9rZW5MaXN0cygpLT5tX2l0ZW1Qcm9wKQot
ICAgICAgICAgICAgbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1Qcm9wID0gRE9NU2V0dGFi
bGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgIHJldHVybiBtX21pY3JvRGF0YVRva2Vu
TGlzdHMtPm1faXRlbVByb3AuZ2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRJdGVtUHJvcChj
b25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCFlbnN1cmVNaWNyb0RhdGFU
b2tlbkxpc3RzKCktPm1faXRlbVByb3ApCi0gICAgICAgICAgICBtX21pY3JvRGF0YVRva2VuTGlz
dHMtPm1faXRlbVByb3AgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICAg
ICAgbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1Qcm9wLT5zZXRWYWx1ZSh2YWx1ZSk7Ci0g
ICAgfQotCi0gICAgRE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1SZWYoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKCFlbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPm1faXRlbVJlZikKLSAg
ICAgICAgICAgIG1fbWljcm9EYXRhVG9rZW5MaXN0cy0+bV9pdGVtUmVmID0gRE9NU2V0dGFibGVU
b2tlbkxpc3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgIHJldHVybiBtX21pY3JvRGF0YVRva2VuTGlz
dHMtPm1faXRlbVJlZi5nZXQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEl0ZW1SZWYoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghZW5zdXJlTWljcm9EYXRhVG9rZW5M
aXN0cygpLT5tX2l0ZW1SZWYpCi0gICAgICAgICAgICBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1f
aXRlbVJlZiA9IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUoKTsKLQotICAgICAgICBtX21p
Y3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVJlZi0+c2V0VmFsdWUodmFsdWUpOwotICAgIH0KLQot
ICAgIERPTVNldHRhYmxlVG9rZW5MaXN0KiBpdGVtVHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpZiAoIWVuc3VyZU1pY3JvRGF0YVRva2VuTGlzdHMoKS0+bV9pdGVtVHlwZSkKLSAgICAgICAg
ICAgIG1fbWljcm9EYXRhVG9rZW5MaXN0cy0+bV9pdGVtVHlwZSA9IERPTVNldHRhYmxlVG9rZW5M
aXN0OjpjcmVhdGUoKTsKLQotICAgICAgICByZXR1cm4gbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5t
X2l0ZW1UeXBlLmdldCgpOwotICAgIH0KLQotICAgIHZvaWQgc2V0SXRlbVR5cGUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghZW5zdXJlTWljcm9EYXRhVG9rZW5MaXN0
cygpLT5tX2l0ZW1UeXBlKQotICAgICAgICAgICAgbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0
ZW1UeXBlID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgIG1fbWlj
cm9EYXRhVG9rZW5MaXN0cy0+bV9pdGVtVHlwZS0+c2V0VmFsdWUodmFsdWUpOwotICAgIH0KICNl
bmRpZgogCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdElu
Zm8qKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxMzg5NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKGNvbnN0IFEKICAgICBlbHNlIGlmIChuYW1lID09IHRhYmluZGV4QXR0cikgewogICAgICAg
ICBpbnQgdGFiaW5kZXggPSAwOwogICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgY2xlYXJUYWJJbmRleEV4cGxpY2l0bHkoKTsKKyAgICAgICAgICAgIGNsZWFyVGFiSW5k
ZXhFeHBsaWNpdGx5SWZOZWVkZWQoKTsKICAgICAgICAgZWxzZSBpZiAocGFyc2VIVE1MSW50ZWdl
cih2YWx1ZSwgdGFiaW5kZXgpKSB7CiAgICAgICAgICAgICAvLyBDbGFtcCB0YWJpbmRleCB0byB0
aGUgcmFuZ2Ugb2YgJ3Nob3J0JyB0byBtYXRjaCBGaXJlZm94J3MgYmVoYXZpb3IuCiAgICAgICAg
ICAgICBzZXRUYWJJbmRleEV4cGxpY2l0bHkobWF4KHN0YXRpY19jYXN0PGludD4oc3RkOjpudW1l
cmljX2xpbWl0czxzaG9ydD46Om1pbigpKSwgbWluKHRhYmluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+
KHN0ZDo6bnVtZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKSkpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182629</attachid>
            <date>2013-01-14 14:34:34 -0800</date>
            <delta_ts>2013-01-14 15:03:31 -0800</delta_ts>
            <desc>Addressed Ben&apos;s comments; merged to ToT</desc>
            <filename>bug-106679-20130114143134.patch</filename>
            <type>text/plain</type>
            <size>23013</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzOTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDEzLTAxLTExICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgZnVuY3Rpb25zIGZyb20g
Tm9kZVJhcmVEYXRhIHRvIEVsZW1lbnRSYXJlRGF0YSBhbmQgb3RoZXIgY2xhc3NlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgdGFiIGluZGV4
IHJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gTm9kZVJhcmVEYXRhIHRvIEVsZW1lbnRSYXJlRGF0YSBz
aW5jZSBvbmx5CisgICAgICAgIEhUTUxFbGVtZW50IHVzZXMgdGhlbSwgYW5kIG1vdmVkIHJlbGF0
ZWQgZnVuY3Rpb25zIG9uIE5vZGUgdG8gRWxlbWVudCBhY2NvcmRpbmdseS4KKworICAgICAgICBB
bHNvIHJlcGxhY2VkIHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSBhbmQgZW5zdXJl
VHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5CisgICAgICAgIGJ5IGVuc3VyZU11dGF0
aW9uT2JzZXJ2ZXJEYXRhLCBhbmQgbW92ZWQgbWljcm8tZGF0YSByZWxhdGVkIG1lbWJlciBmdW5j
dGlvbnMgaW50bworICAgICAgICBOb2RlTWljcm9EYXRhVG9rZW5MaXN0cywgYW5kIG1vdmVkIE5v
ZGVNdXRhdGlvbk9ic2VydmVyRGF0YSBhbmQgTm9kZU1pY3JvRGF0YVRva2VuTGlzdHMKKyAgICAg
ICAgb3V0IG9mIE5vZGVSYXJlRGF0YSBhcyB0aGV5J3JlIHVzZWQgb3V0c2lkZSBvZiBOb2RlUmFy
ZURhdGEgbm93LgorCisgICAgICAgIFRoZSBpbnRlbnRpb24gaXMgdG8gbW92ZSBtb3JlIGNvZGUg
aW50byBOb2RlTXV0YXRpb25PYnNlcnZlckRhdGEgYW5kIE5vZGVNaWNyb0RhdGFUb2tlbkxpc3Rz
CisgICAgICAgIGluIHRoZSBmb2xsb3cgdXAgcGF0Y2hlcyBzbyB0aGF0IHRoZXkgY2FuIGRldGVj
dCB0aGUgcmVtb3ZhYmlsaXR5IG9mIE5vZGVSYXJlRGF0YS4KKworICAgICAgICBObyBuZXcgdGVz
dHMgYXJlIGFkZGVkIHNpbmNlIHRoZXJlIHNob3VsZCBiZSBubyBiZWhhdmlvciBjaGFuZ2VzLgor
CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
Y2xlYXJUYWJJbmRleEV4cGxpY2l0bHlJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpzZXRUYWJJbmRleEV4cGxpY2l0bHkpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
dGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c3VwcG9ydHNGb2N1cyk6Cisg
ICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKEVsZW1lbnQpOgorICAgICAgICAqIGRv
bS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKEVsZW1lbnRSYXJlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50UmFyZURhdGE6OnRhYkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnRSYXJlRGF0YTo6c2V0VGFiSW5kZXhFeHBsaWNpdGx5KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnRSYXJlRGF0YTo6dGFiSW5kZXhTZXRFeHBsaWNpdGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6Y2xlYXJUYWJJbmRleEV4cGxpY2l0bHkpOgorICAgICAg
ICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnRhYkluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6bXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OnRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpyZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
cmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6Oml0ZW1Qcm9wKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldEl0ZW1Qcm9wKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6Oml0ZW1SZWYpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
c2V0SXRlbVJlZik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppdGVtVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjpzZXRJdGVtVHlwZSk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAg
ICAgICAgKE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKE5v
ZGVNdXRhdGlvbk9ic2VydmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTXV0YXRpb25P
YnNlcnZlckRhdGE6OmNyZWF0ZSk6CisgICAgICAgIChOb2RlTWljcm9EYXRhVG9rZW5MaXN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlTWljcm9EYXRhVG9rZW5MaXN0czo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzOjppdGVtUHJvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlTWljcm9EYXRhVG9rZW5MaXN0czo6aXRlbVJlZik6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlTWljcm9EYXRhVG9rZW5MaXN0czo6aXRlbVR5cGUpOgorICAgICAgICAo
Tm9kZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6bXV0YXRpb25P
YnNlcnZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjplbnN1cmVNdXRh
dGlvbk9ic2VydmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6OmVuc3Vy
ZU1pY3JvRGF0YVRva2VuTGlzdHMpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKwogMjAxMy0w
MS0xNCAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0No
cm9taXVtXSBNb3ZlIEF1ZGlvRGVzdGluYXRpb25DaHJvbWl1bSBpbnRvIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzOTY1NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDYgKzIyOCwyNyBAQCBQYXNz
T3duUHRyPE5vZGVSYXJlRGF0YT4gRWxlbWVudDo6Y3JlYXRlCiAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBFbGVtZW50UmFyZURhdGEoKSk7CiB9CiAKK3ZvaWQgRWxlbWVudDo6Y2xlYXJUYWJJbmRl
eEV4cGxpY2l0bHlJZk5lZWRlZCgpCit7CisgICAgaWYgKGhhc1JhcmVEYXRhKCkpCisgICAgICAg
IGVsZW1lbnRSYXJlRGF0YSgpLT5jbGVhclRhYkluZGV4RXhwbGljaXRseSgpOworfQorCit2b2lk
IEVsZW1lbnQ6OnNldFRhYkluZGV4RXhwbGljaXRseShpbnQgdGFiSW5kZXgpCit7CisgICAgZW5z
dXJlRWxlbWVudFJhcmVEYXRhKCktPnNldFRhYkluZGV4RXhwbGljaXRseSh0YWJJbmRleCk7Cit9
CisKK2Jvb2wgRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhh
c1JhcmVEYXRhKCkgJiYgZWxlbWVudFJhcmVEYXRhKCktPnRhYkluZGV4U2V0RXhwbGljaXRseSgp
OworfQorCitzaG9ydCBFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhh
c1JhcmVEYXRhKCkgPyBlbGVtZW50UmFyZURhdGEoKS0+dGFiSW5kZXgoKSA6IDA7Cit9CisKIERF
RklORV9WSVJUVUFMX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihFbGVtZW50LCBibHVyKTsKIERF
RklORV9WSVJUVUFMX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihFbGVtZW50LCBlcnJvcik7CiBE
RUZJTkVfVklSVFVBTF9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoRWxlbWVudCwgZm9jdXMpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAxMzk2NTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTUsNiArNTE1LDExIEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVnaXN0ZXJBc05hbWVkSXRlbSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlZ2lzdGVyQXNFeHRy
YU5hbWVkSXRlbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICB2b2lkIGNsZWFyVGFi
SW5kZXhFeHBsaWNpdGx5SWZOZWVkZWQoKTsgICAgCisgICAgdm9pZCBzZXRUYWJJbmRleEV4cGxp
Y2l0bHkoaW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdCBPVkVSUklERTsKKwogICAg
IFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKENv
bGxlY3Rpb25UeXBlKTsKICAgICBIVE1MQ29sbGVjdGlvbiogY2FjaGVkSFRNTENvbGxlY3Rpb24o
Q29sbGVjdGlvblR5cGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5o
CShyZXZpc2lvbiAxMzk2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
cmVzZXRDb21wdXRlZFN0eWxlKCk7CiAgICAgdm9pZCByZXNldER5bmFtaWNSZXN0eWxlT2JzZXJ2
YXRpb25zKCk7CisgICAgCisgICAgc2hvcnQgdGFiSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3Rh
YkluZGV4OyB9CisgICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQgaW5kZXgpIHsg
bV90YWJJbmRleCA9IGluZGV4OyBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRseSA9IHRydWU7IH0K
KyAgICBib29sIHRhYkluZGV4U2V0RXhwbGljaXRseSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFiSW5k
ZXhXYXNTZXRFeHBsaWNpdGx5OyB9CisgICAgdm9pZCBjbGVhclRhYkluZGV4RXhwbGljaXRseSgp
IHsgbV90YWJJbmRleCA9IDA7IG1fdGFiSW5kZXhXYXNTZXRFeHBsaWNpdGx5ID0gZmFsc2U7IH0K
IAogICAgIGJvb2wgbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2goKSBj
b25zdCB7IHJldHVybiBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNo
OyB9CiAgICAgdm9pZCBzZXROZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFj
aChib29sIG5lZWRzKSB7IG1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRh
Y2ggPSBuZWVkczsgfQpAQCAtMTI0LDcgKzEyOSwzNiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJp
dmF0ZToKLSAgICAvLyBNYW55IGZpZWxkcyBhcmUgaW4gTm9kZVJhcmVEYXRhIGZvciBiZXR0ZXIg
cGFja2luZy4KKyAgICBzaG9ydCBtX3RhYkluZGV4OworICAgIHVuc2lnbmVkIHNob3J0IG1fY2hp
bGRJbmRleDsKKyAgICB1bnNpZ25lZCBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRseSA6IDE7Cisg
ICAgdW5zaWduZWQgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA6
IDE7CisgICAgdW5zaWduZWQgbV9zdHlsZUFmZmVjdGVkQnlFbXB0eSA6IDE7CisgICAgdW5zaWdu
ZWQgbV9pc0luQ2FudmFzU3VidHJlZSA6IDE7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQor
ICAgIHVuc2lnbmVkIG1fY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCA6IDE7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoRElBTE9HX0VMRU1FTlQpCisgICAgdW5zaWduZWQgbV9pc0luVG9wTGF5ZXIgOiAx
OworI2VuZGlmCisjaWYgRU5BQkxFKFNWRykKKyAgICB1bnNpZ25lZCBtX2hhc1BlbmRpbmdSZXNv
dXJjZXMgOiAxOworI2VuZGlmCisgICAgdW5zaWduZWQgbV9jaGlsZHJlbkFmZmVjdGVkQnlIb3Zl
ciA6IDE7CisgICAgdW5zaWduZWQgbV9jaGlsZHJlbkFmZmVjdGVkQnlBY3RpdmUgOiAxOworICAg
IHVuc2lnbmVkIG1fY2hpbGRyZW5BZmZlY3RlZEJ5RHJhZyA6IDE7CisgICAgLy8gQml0cyBmb3Ig
ZHluYW1pYyBjaGlsZCBtYXRjaGluZy4KKyAgICAvLyBXZSBvcHRpbWl6ZSBmb3IgOmZpcnN0LWNo
aWxkIGFuZCA6bGFzdC1jaGlsZC4gVGhlIG90aGVyIHBvc2l0aW9uYWwgY2hpbGQgc2VsZWN0b3Jz
IGxpa2UgbnRoLWNoaWxkIG9yCisgICAgLy8gKi1jaGlsZC1vZi10eXBlLCB3ZSB3aWxsIGp1c3Qg
Z2l2ZSB1cCBhbmQgcmUtZXZhbHVhdGUgd2hlbmV2ZXIgY2hpbGRyZW4gY2hhbmdlIGF0IGFsbC4K
KyAgICB1bnNpZ25lZCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcyA6IDE7Cisg
ICAgdW5zaWduZWQgbV9jaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcyA6IDE7CisgICAg
dW5zaWduZWQgbV9jaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzIDogMTsKKyAg
ICB1bnNpZ25lZCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMgOiAx
OworICAgIHVuc2lnbmVkIG1fY2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVs
ZXMgOiAxOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICB1bnNpZ25lZCBtX3dlYlZUVE5v
ZGVUeXBlIDogMjsgLy8gV2ViVlRUTm9kZVR5cGUKKyNlbmRpZgorCiAgICAgTGF5b3V0U2l6ZSBt
X21pbmltdW1TaXplRm9yUmVzaXppbmc7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX2NvbXB1
dGVkU3R5bGU7CiAKQEAgLTE0OCw3ICsxODIsMzMgQEAgaW5saW5lIEludFNpemUgZGVmYXVsdE1p
bmltdW1TaXplRm9yUmVzaQogfQogCiBpbmxpbmUgRWxlbWVudFJhcmVEYXRhOjpFbGVtZW50UmFy
ZURhdGEoKQotICAgIDogbV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nKGRlZmF1bHRNaW5pbXVtU2l6
ZUZvclJlc2l6aW5nKCkpCisgICAgOiBtX3RhYkluZGV4KDApCisgICAgLCBtX2NoaWxkSW5kZXgo
MCkKKyAgICAsIG1fdGFiSW5kZXhXYXNTZXRFeHBsaWNpdGx5KGZhbHNlKQorICAgICwgbV9uZWVk
c0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaChmYWxzZSkKKyAgICAsIG1fc3R5
bGVBZmZlY3RlZEJ5RW1wdHkoZmFsc2UpCisgICAgLCBtX2lzSW5DYW52YXNTdWJ0cmVlKGZhbHNl
KQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAsIG1fY29udGFpbnNGdWxsU2NyZWVu
RWxlbWVudChmYWxzZSkKKyNlbmRpZgorI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKKyAgICAs
IG1faXNJblRvcExheWVyKGZhbHNlKQorI2VuZGlmCisjaWYgRU5BQkxFKFNWRykKKyAgICAsIG1f
aGFzUGVuZGluZ1Jlc291cmNlcyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9jaGlsZHJlbkFmZmVj
dGVkQnlIb3ZlcihmYWxzZSkKKyAgICAsIG1fY2hpbGRyZW5BZmZlY3RlZEJ5QWN0aXZlKGZhbHNl
KQorICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlEcmFnKGZhbHNlKQorICAgICwgbV9jaGlsZHJl
bkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoZmFsc2UpCisgICAgLCBtX2NoaWxkcmVuQWZmZWN0
ZWRCeUxhc3RDaGlsZFJ1bGVzKGZhbHNlKQorICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlEaXJl
Y3RBZGphY2VudFJ1bGVzKGZhbHNlKQorICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJk
UG9zaXRpb25hbFJ1bGVzKGZhbHNlKQorICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2Fy
ZFBvc2l0aW9uYWxSdWxlcyhmYWxzZSkKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgLCBt
X3dlYlZUVE5vZGVUeXBlKFdlYlZUVE5vZGVUeXBlTm9uZSkKKyNlbmRpZgorICAgICwgbV9taW5p
bXVtU2l6ZUZvclJlc2l6aW5nKGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkpCiB7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDEzOTY1NikKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDE3ICs0OTIsNyBAQCBIVE1M
SW5wdXRFbGVtZW50KiBOb2RlOjp0b0lucHV0RWxlbWVudCgpCiAKIHNob3J0IE5vZGU6OnRhYklu
ZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhKCktPnRh
YkluZGV4KCkgOiAwOwotfQotICAgIAotdm9pZCBOb2RlOjpzZXRUYWJJbmRleEV4cGxpY2l0bHko
c2hvcnQgaSkKLXsKLSAgICBlbnN1cmVSYXJlRGF0YSgpLT5zZXRUYWJJbmRleEV4cGxpY2l0bHko
aSk7Ci19Ci0KLXZvaWQgTm9kZTo6Y2xlYXJUYWJJbmRleEV4cGxpY2l0bHkoKQotewotICAgIGVu
c3VyZVJhcmVEYXRhKCktPmNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5KCk7CisgICAgcmV0dXJuIDA7
CiB9CiAKIFN0cmluZyBOb2RlOjpub2RlVmFsdWUoKSBjb25zdApAQCAtODYzLDcgKzg1Myw3IEBA
IHZvaWQgTm9kZTo6bGF6eUF0dGFjaChTaG91bGRTZXRBdHRhY2hlZCAKIAogYm9vbCBOb2RlOjpz
dXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzUmFyZURhdGEoKSAmJiByYXJl
RGF0YSgpLT50YWJJbmRleFNldEV4cGxpY2l0bHkoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAg
ICAgCiBib29sIE5vZGU6OmlzRm9jdXNhYmxlKCkgY29uc3QKQEAgLTIxOTIsMTIgKzIxODIsMjIg
QEAgdm9pZCBOb2RlOjpjbGVhckV2ZW50VGFyZ2V0RGF0YSgpCiAKIFZlY3RvcjxPd25QdHI8TXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gPiogTm9kZTo6bXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJ5KCkKIHsKLSAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhKCktPm11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyeSgpIDogMDsKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSogZGF0YSA9IHJhcmVEYXRh
KCktPm11dGF0aW9uT2JzZXJ2ZXJEYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gJmRhdGEtPnJlZ2lzdHJ5OwogfQogCiBIYXNoU2V0PE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogTm9kZTo6dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5KCkKIHsKLSAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhKCktPnRyYW5z
aWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpIDogMDsKKyAgICBpZiAoIWhhc1JhcmVEYXRh
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSogZGF0
YSA9IHJhcmVEYXRhKCktPm11dGF0aW9uT2JzZXJ2ZXJEYXRhKCk7CisgICAgaWYgKCFkYXRhKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gJmRhdGEtPnRyYW5zaWVudFJlZ2lzdHJ5Owog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSZWdpc3RyeT4KQEAgLTIyMzAsMTcgKzIyMzAsMTcgQEAg
dm9pZCBOb2RlOjpnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcgogdm9pZCBOb2RlOjpyZWdp
c3Rlck11dGF0aW9uT2JzZXJ2ZXIoTXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIsIE11dGF0aW9u
T2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgYXR0
cmlidXRlRmlsdGVyKQogewogICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qIHJlZ2lz
dHJhdGlvbiA9IDA7Ci0gICAgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uPiA+KiByZWdpc3RyeSA9IGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyeSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0cnktPnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChyZWdpc3RyeS0+YXQoaSktPm9ic2VydmVyKCkgPT0gb2Jz
ZXJ2ZXIpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhdGlvbiA9IHJlZ2lzdHJ5LT5hdChpKS5nZXQo
KTsKKyAgICBWZWN0b3I8T3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4mIHJl
Z2lzdHJ5ID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKS0+
cmVnaXN0cnk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RyeS5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAocmVnaXN0cnlbaV0tPm9ic2VydmVyKCkgPT0gb2JzZXJ2ZXIpIHsK
KyAgICAgICAgICAgIHJlZ2lzdHJhdGlvbiA9IHJlZ2lzdHJ5W2ldLmdldCgpOwogICAgICAgICAg
ICAgcmVnaXN0cmF0aW9uLT5yZXNldE9ic2VydmF0aW9uKG9wdGlvbnMsIGF0dHJpYnV0ZUZpbHRl
cik7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXJlZ2lzdHJhdGlvbikgewotICAgICAg
ICByZWdpc3RyeS0+YXBwZW5kKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OmNyZWF0ZShv
YnNlcnZlciwgdGhpcywgb3B0aW9ucywgYXR0cmlidXRlRmlsdGVyKSk7Ci0gICAgICAgIHJlZ2lz
dHJhdGlvbiA9IHJlZ2lzdHJ5LT5sYXN0KCkuZ2V0KCk7CisgICAgICAgIHJlZ2lzdHJ5LmFwcGVu
ZChNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpjcmVhdGUob2JzZXJ2ZXIsIHRoaXMsIG9w
dGlvbnMsIGF0dHJpYnV0ZUZpbHRlcikpOworICAgICAgICByZWdpc3RyYXRpb24gPSByZWdpc3Ry
eS5sYXN0KCkuZ2V0KCk7CiAgICAgfQogCiAgICAgZG9jdW1lbnQoKS0+YWRkTXV0YXRpb25PYnNl
cnZlclR5cGVzKHJlZ2lzdHJhdGlvbi0+bXV0YXRpb25UeXBlcygpKTsKQEAgLTIyNjMsNyArMjI2
Myw3IEBAIHZvaWQgTm9kZTo6dW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoTXUKIAogdm9pZCBO
b2RlOjpyZWdpc3RlclRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIoTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbiogcmVnaXN0cmF0aW9uKQogewotICAgIGVuc3VyZVJhcmVEYXRhKCktPmVuc3Vy
ZVRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpLT5hZGQocmVnaXN0cmF0aW9uKTsK
KyAgICBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVNdXRhdGlvbk9ic2VydmVyRGF0YSgpLT50cmFu
c2llbnRSZWdpc3RyeS5hZGQocmVnaXN0cmF0aW9uKTsKIH0KIAogdm9pZCBOb2RlOjp1bnJlZ2lz
dGVyVHJhbnNpZW50TXV0YXRpb25PYnNlcnZlcihNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
KiByZWdpc3RyYXRpb24pCkBAIC0yNTE4LDMyICsyNTE4LDMyIEBAIGJvb2wgTm9kZTo6d2lsbFJl
c3BvbmRUb1RvdWNoRXZlbnRzKCkKICNpZiBFTkFCTEUoTUlDUk9EQVRBKQogRE9NU2V0dGFibGVU
b2tlbkxpc3QqIE5vZGU6Oml0ZW1Qcm9wKCkKIHsKLSAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEo
KS0+aXRlbVByb3AoKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTWljcm9E
YXRhVG9rZW5MaXN0cygpLT5pdGVtUHJvcCgpOwogfQogCiB2b2lkIE5vZGU6OnNldEl0ZW1Qcm9w
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgZW5zdXJlUmFyZURhdGEoKS0+c2V0SXRlbVBy
b3AodmFsdWUpOworICAgIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU1pY3JvRGF0YVRva2VuTGlz
dHMoKS0+aXRlbVByb3AoKS0+c2V0VmFsdWUodmFsdWUpOwogfQogCiBET01TZXR0YWJsZVRva2Vu
TGlzdCogTm9kZTo6aXRlbVJlZigpCiB7Ci0gICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPml0
ZW1SZWYoKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTWljcm9EYXRhVG9r
ZW5MaXN0cygpLT5pdGVtUmVmKCk7CiB9CiAKIHZvaWQgTm9kZTo6c2V0SXRlbVJlZihjb25zdCBT
dHJpbmcmIHZhbHVlKQogewotICAgIGVuc3VyZVJhcmVEYXRhKCktPnNldEl0ZW1SZWYodmFsdWUp
OworICAgIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU1pY3JvRGF0YVRva2VuTGlzdHMoKS0+aXRl
bVJlZigpLT5zZXRWYWx1ZSh2YWx1ZSk7CiB9CiAKIERPTVNldHRhYmxlVG9rZW5MaXN0KiBOb2Rl
OjppdGVtVHlwZSgpCiB7Ci0gICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPml0ZW1UeXBlKCk7
CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU1pY3JvRGF0YVRva2VuTGlzdHMo
KS0+aXRlbVR5cGUoKTsKIH0KIAogdm9pZCBOb2RlOjpzZXRJdGVtVHlwZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogewotICAgIGVuc3VyZVJhcmVEYXRhKCktPnNldEl0ZW1UeXBlKHZhbHVlKTsKKyAg
ICBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPml0ZW1UeXBl
KCktPnNldFZhbHVlKHZhbHVlKTsKIH0KIAogUGFzc1JlZlB0cjxQcm9wZXJ0eU5vZGVMaXN0PiBO
b2RlOjpwcm9wZXJ0eU5vZGVMaXN0KGNvbnN0IFN0cmluZyYgbmFtZSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aAkocmV2aXNpb24gMTM5NjU2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzQ4LDkgKzc0OCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KTsKICAgICAKICAgICB2
aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+
JikgY29uc3QgeyB9Ci0gICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQpOwotICAg
IHZvaWQgY2xlYXJUYWJJbmRleEV4cGxpY2l0bHkoKTsKLSAgICAKKwogICAgIGJvb2wgaGFzUmFy
ZURhdGEoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKEhhc1JhcmVEYXRhRmxhZyk7IH0KIAogICAg
IE5vZGVSYXJlRGF0YSogcmFyZURhdGEoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
UmFyZURhdGEuY3BwCShyZXZpc2lvbiAxMzk2NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0cnVjdCBTYW1lU2l6ZUFzTm9kZVJhcmVEYXRhIHsKICAgICB2b2lkKiBt
X3BvaW50ZXJbNF07Ci0gICAgdW5zaWduZWQgbV9pbmRpY2VzQW5kQml0ZmllbGRzWzJdOwotCiAj
aWYgRU5BQkxFKE1JQ1JPREFUQSkKICAgICB2b2lkKiBtX21pY3JvRGF0YTsKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2aXNpb24gMTM5NjU2KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNjEgKzIy
Niw2MSBAQCBwcml2YXRlOgogICAgIFRhZ05vZGVMaXN0Q2FjaGVOUyBtX3RhZ05vZGVMaXN0Q2Fj
aGVOUzsKIH07CiAKLWNsYXNzIE5vZGVSYXJlRGF0YSA6IHB1YmxpYyBOb2RlUmFyZURhdGFCYXNl
IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOb2RlUmFyZURhdGEpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK2NsYXNzIE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uPiA+IHJlZ2lzdHJ5OworICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbio+IHRyYW5zaWVudFJlZ2lzdHJ5OwogCi0gICAgc3RydWN0IE5vZGVNdXRhdGlvbk9i
c2VydmVyRGF0YSB7Ci0gICAgICAgIFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbj4gPiBtX3JlZ2lzdHJ5OwotICAgICAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24qPiBtX3RyYW5zaWVudFJlZ2lzdHJ5OworICAgIHN0YXRpYyBQYXNzT3duUHRy
PE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3
IE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSk7IH0KIAotICAgICAgICBzdGF0aWMgUGFzc093blB0
cjxOb2RlTXV0YXRpb25PYnNlcnZlckRhdGE+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5l
dyBOb2RlTXV0YXRpb25PYnNlcnZlckRhdGEpOyB9Ci0gICAgfTsKK3ByaXZhdGU6CisgICAgTm9k
ZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkgeyB9Cit9OwogCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkK
LSAgICBzdHJ1Y3QgTm9kZU1pY3JvRGF0YVRva2VuTGlzdHMgewotICAgICAgICBSZWZQdHI8RE9N
U2V0dGFibGVUb2tlbkxpc3Q+IG1faXRlbVByb3A7Ci0gICAgICAgIFJlZlB0cjxET01TZXR0YWJs
ZVRva2VuTGlzdD4gbV9pdGVtUmVmOwotICAgICAgICBSZWZQdHI8RE9NU2V0dGFibGVUb2tlbkxp
c3Q+IG1faXRlbVR5cGU7CitjbGFzcyBOb2RlTWljcm9EYXRhVG9rZW5MaXN0cyB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoTm9kZU1pY3JvRGF0YVRva2VuTGlzdHMpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxOb2RlTWljcm9EYXRh
VG9rZW5MaXN0cz4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IE5vZGVNaWNyb0RhdGFU
b2tlbkxpc3RzKTsgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vZGVNaWNyb0RhdGFU
b2tlbkxpc3RzPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTm9kZU1pY3JvRGF0YVRv
a2VuTGlzdHMpOyB9Ci0gICAgfTsKLSNlbmRpZgorICAgIERPTVNldHRhYmxlVG9rZW5MaXN0KiBp
dGVtUHJvcCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1faXRlbVByb3ApCisgICAgICAg
ICAgICBtX2l0ZW1Qcm9wID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOworICAgICAg
ICByZXR1cm4gbV9pdGVtUHJvcC5nZXQoKTsKKyAgICB9CiAKLXB1YmxpYzogICAgCi0gICAgTm9k
ZVJhcmVEYXRhKCkKLSAgICAgICAgOiBtX3RhYkluZGV4KDApCi0gICAgICAgICwgbV9jaGlsZElu
ZGV4KDApCi0gICAgICAgICwgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkoZmFsc2UpCi0gICAg
ICAgICwgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaChmYWxzZSkK
LSAgICAgICAgLCBtX3N0eWxlQWZmZWN0ZWRCeUVtcHR5KGZhbHNlKQotICAgICAgICAsIG1faXNJ
bkNhbnZhc1N1YnRyZWUoZmFsc2UpCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgICAg
ICAsIG1fY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudChmYWxzZSkKLSNlbmRpZgotI2lmIEVOQUJM
RShESUFMT0dfRUxFTUVOVCkKLSAgICAgICAgLCBtX2lzSW5Ub3BMYXllcihmYWxzZSkKLSNlbmRp
ZgotI2lmIEVOQUJMRShTVkcpCi0gICAgICAgICwgbV9oYXNQZW5kaW5nUmVzb3VyY2VzKGZhbHNl
KQotI2VuZGlmCi0gICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlIb3ZlcihmYWxzZSkKLSAg
ICAgICAgLCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUFjdGl2ZShmYWxzZSkKLSAgICAgICAgLCBtX2No
aWxkcmVuQWZmZWN0ZWRCeURyYWcoZmFsc2UpCi0gICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVk
QnlGaXJzdENoaWxkUnVsZXMoZmFsc2UpCi0gICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlM
YXN0Q2hpbGRSdWxlcyhmYWxzZSkKLSAgICAgICAgLCBtX2NoaWxkcmVuQWZmZWN0ZWRCeURpcmVj
dEFkamFjZW50UnVsZXMoZmFsc2UpCi0gICAgICAgICwgbV9jaGlsZHJlbkFmZmVjdGVkQnlGb3J3
YXJkUG9zaXRpb25hbFJ1bGVzKGZhbHNlKQotICAgICAgICAsIG1fY2hpbGRyZW5BZmZlY3RlZEJ5
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoZmFsc2UpCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQot
ICAgICAgICAsIG1fd2ViVlRUTm9kZVR5cGUoV2ViVlRUTm9kZVR5cGVOb25lKQotI2VuZGlmCisg
ICAgRE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1SZWYoKSBjb25zdAogICAgIHsKKyAgICAgICAg
aWYgKCFtX2l0ZW1SZWYpCisgICAgICAgICAgICBtX2l0ZW1SZWYgPSBET01TZXR0YWJsZVRva2Vu
TGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBtX2l0ZW1SZWYuZ2V0KCk7CiAgICAgfQog
Ci0gICAgdmlydHVhbCB+Tm9kZVJhcmVEYXRhKCkKKyAgICBET01TZXR0YWJsZVRva2VuTGlzdCog
aXRlbVR5cGUoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKCFtX2l0ZW1UeXBlKQorICAgICAg
ICAgICAgbV9pdGVtVHlwZSA9IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgcmV0dXJuIG1faXRlbVR5cGUuZ2V0KCk7CiAgICAgfQogCitwcml2YXRlOgorICAgIG11dGFi
bGUgUmVmUHRyPERPTVNldHRhYmxlVG9rZW5MaXN0PiBtX2l0ZW1Qcm9wOworICAgIG11dGFibGUg
UmVmUHRyPERPTVNldHRhYmxlVG9rZW5MaXN0PiBtX2l0ZW1SZWY7CisgICAgbXV0YWJsZSBSZWZQ
dHI8RE9NU2V0dGFibGVUb2tlbkxpc3Q+IG1faXRlbVR5cGU7Cit9OworI2VuZGlmCisKK2NsYXNz
IE5vZGVSYXJlRGF0YSA6IHB1YmxpYyBOb2RlUmFyZURhdGFCYXNlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShOb2RlUmFyZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzogICAgCisgICAgTm9kZVJhcmVEYXRhKCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgfk5vZGVS
YXJlRGF0YSgpCisgICAgeyB9CisKICAgICB2b2lkIGNsZWFyTm9kZUxpc3RzKCkgeyBtX25vZGVM
aXN0cy5jbGVhcigpOyB9CiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cygpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOyB9CiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIGVu
c3VyZU5vZGVMaXN0cygpCkBAIC0yOTAsMjUgKzI5MCwxMiBAQCBwdWJsaWM6ICAgIAogICAgICAg
ICByZXR1cm4gbV9ub2RlTGlzdHMuZ2V0KCk7CiAgICAgfQogCi0gICAgc2hvcnQgdGFiSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX3RhYkluZGV4OyB9Ci0gICAgdm9pZCBzZXRUYWJJbmRleEV4cGxp
Y2l0bHkoc2hvcnQgaW5kZXgpIHsgbV90YWJJbmRleCA9IGluZGV4OyBtX3RhYkluZGV4V2FzU2V0
RXhwbGljaXRseSA9IHRydWU7IH0KLSAgICBib29sIHRhYkluZGV4U2V0RXhwbGljaXRseSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFiSW5kZXhXYXNTZXRFeHBsaWNpdGx5OyB9Ci0gICAgdm9pZCBjbGVh
clRhYkluZGV4RXhwbGljaXRseSgpIHsgbV90YWJJbmRleCA9IDA7IG1fdGFiSW5kZXhXYXNTZXRF
eHBsaWNpdGx5ID0gZmFsc2U7IH0KLQotICAgIFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJhdGlvbj4gPiogbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgeyByZXR1cm4gbV9t
dXRhdGlvbk9ic2VydmVyRGF0YSA/ICZtX211dGF0aW9uT2JzZXJ2ZXJEYXRhLT5tX3JlZ2lzdHJ5
IDogMDsgfQotICAgIFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4g
PiogZW5zdXJlTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkKLSAgICB7Ci0gICAgICAgIGlmICgh
bV9tdXRhdGlvbk9ic2VydmVyRGF0YSkKLSAgICAgICAgICAgIG1fbXV0YXRpb25PYnNlcnZlckRh
dGEgPSBOb2RlTXV0YXRpb25PYnNlcnZlckRhdGE6OmNyZWF0ZSgpOwotICAgICAgICByZXR1cm4g
Jm1fbXV0YXRpb25PYnNlcnZlckRhdGEtPm1fcmVnaXN0cnk7Ci0gICAgfQotCi0gICAgSGFzaFNl
dDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyeSgpIHsgcmV0dXJuIG1fbXV0YXRpb25PYnNlcnZlckRhdGEgPyAmbV9tdXRhdGlv
bk9ic2VydmVyRGF0YS0+bV90cmFuc2llbnRSZWdpc3RyeSA6IDA7IH0KLSAgICBIYXNoU2V0PE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogZW5zdXJlVHJhbnNpZW50TXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJ5KCkKKyAgICBOb2RlTXV0YXRpb25PYnNlcnZlckRhdGEqIG11dGF0aW9uT2Jz
ZXJ2ZXJEYXRhKCkgeyByZXR1cm4gbV9tdXRhdGlvbk9ic2VydmVyRGF0YS5nZXQoKTsgfQorICAg
IE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSogZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKQog
ICAgIHsKICAgICAgICAgaWYgKCFtX211dGF0aW9uT2JzZXJ2ZXJEYXRhKQogICAgICAgICAgICAg
bV9tdXRhdGlvbk9ic2VydmVyRGF0YSA9IE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YTo6Y3JlYXRl
KCk7Ci0gICAgICAgIHJldHVybiAmbV9tdXRhdGlvbk9ic2VydmVyRGF0YS0+bV90cmFuc2llbnRS
ZWdpc3RyeTsKKyAgICAgICAgcmV0dXJuIG1fbXV0YXRpb25PYnNlcnZlckRhdGEuZ2V0KCk7CiAg
ICAgfQogCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKQEAgLTMxOCw4OSArMzA1LDEwIEBAIHB1Ymxp
YzogICAgCiAgICAgICAgICAgICBtX21pY3JvRGF0YVRva2VuTGlzdHMgPSBOb2RlTWljcm9EYXRh
VG9rZW5MaXN0czo6Y3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBtX21pY3JvRGF0YVRva2VuTGlz
dHMuZ2V0KCk7CiAgICAgfQotCi0gICAgRE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1Qcm9wKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghZW5zdXJlTWljcm9EYXRhVG9rZW5MaXN0cygpLT5t
X2l0ZW1Qcm9wKQotICAgICAgICAgICAgbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1Qcm9w
ID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgIHJldHVybiBtX21p
Y3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVByb3AuZ2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRJdGVtUHJvcChjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCFlbnN1
cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPm1faXRlbVByb3ApCi0gICAgICAgICAgICBtX21pY3Jv
RGF0YVRva2VuTGlzdHMtPm1faXRlbVByb3AgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRl
KCk7Ci0KLSAgICAgICAgbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1Qcm9wLT5zZXRWYWx1
ZSh2YWx1ZSk7Ci0gICAgfQotCi0gICAgRE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1SZWYoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKCFlbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPm1f
aXRlbVJlZikKLSAgICAgICAgICAgIG1fbWljcm9EYXRhVG9rZW5MaXN0cy0+bV9pdGVtUmVmID0g
RE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwotCi0gICAgICAgIHJldHVybiBtX21pY3Jv
RGF0YVRva2VuTGlzdHMtPm1faXRlbVJlZi5nZXQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEl0
ZW1SZWYoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghZW5zdXJlTWlj
cm9EYXRhVG9rZW5MaXN0cygpLT5tX2l0ZW1SZWYpCi0gICAgICAgICAgICBtX21pY3JvRGF0YVRv
a2VuTGlzdHMtPm1faXRlbVJlZiA9IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUoKTsKLQot
ICAgICAgICBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVJlZi0+c2V0VmFsdWUodmFsdWUp
OwotICAgIH0KLQotICAgIERPTVNldHRhYmxlVG9rZW5MaXN0KiBpdGVtVHlwZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBpZiAoIWVuc3VyZU1pY3JvRGF0YVRva2VuTGlzdHMoKS0+bV9pdGVtVHlw
ZSkKLSAgICAgICAgICAgIG1fbWljcm9EYXRhVG9rZW5MaXN0cy0+bV9pdGVtVHlwZSA9IERPTVNl
dHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUoKTsKLQotICAgICAgICByZXR1cm4gbV9taWNyb0RhdGFU
b2tlbkxpc3RzLT5tX2l0ZW1UeXBlLmdldCgpOwotICAgIH0KLQotICAgIHZvaWQgc2V0SXRlbVR5
cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghZW5zdXJlTWljcm9E
YXRhVG9rZW5MaXN0cygpLT5tX2l0ZW1UeXBlKQotICAgICAgICAgICAgbV9taWNyb0RhdGFUb2tl
bkxpc3RzLT5tX2l0ZW1UeXBlID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwotCi0g
ICAgICAgIG1fbWljcm9EYXRhVG9rZW5MaXN0cy0+bV9pdGVtVHlwZS0+c2V0VmFsdWUodmFsdWUp
OwotICAgIH0KICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAotcHJvdGVjdGVkOgotICAgIHNob3J0IG1fdGFiSW5k
ZXg7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9jaGlsZEluZGV4OwotICAgIHVuc2lnbmVkIG1fdGFi
SW5kZXhXYXNTZXRFeHBsaWNpdGx5IDogMTsKLSAgICB1bnNpZ25lZCBtX25lZWRzRm9jdXNBcHBl
YXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoIDogMTsKLSAgICB1bnNpZ25lZCBtX3N0eWxlQWZm
ZWN0ZWRCeUVtcHR5IDogMTsKLSAgICB1bnNpZ25lZCBtX2lzSW5DYW52YXNTdWJ0cmVlIDogMTsK
LSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgdW5zaWduZWQgbV9jb250YWluc0Z1bGxT
Y3JlZW5FbGVtZW50IDogMTsKLSNlbmRpZgotI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKLSAg
ICB1bnNpZ25lZCBtX2lzSW5Ub3BMYXllciA6IDE7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU1ZHKQot
ICAgIHVuc2lnbmVkIG1faGFzUGVuZGluZ1Jlc291cmNlcyA6IDE7Ci0jZW5kaWYKLSAgICB1bnNp
Z25lZCBtX2NoaWxkcmVuQWZmZWN0ZWRCeUhvdmVyIDogMTsKLSAgICB1bnNpZ25lZCBtX2NoaWxk
cmVuQWZmZWN0ZWRCeUFjdGl2ZSA6IDE7Ci0gICAgdW5zaWduZWQgbV9jaGlsZHJlbkFmZmVjdGVk
QnlEcmFnIDogMTsKLSAgICAvLyBCaXRzIGZvciBkeW5hbWljIGNoaWxkIG1hdGNoaW5nLgotICAg
IC8vIFdlIG9wdGltaXplIGZvciA6Zmlyc3QtY2hpbGQgYW5kIDpsYXN0LWNoaWxkLiBUaGUgb3Ro
ZXIgcG9zaXRpb25hbCBjaGlsZCBzZWxlY3RvcnMgbGlrZSBudGgtY2hpbGQgb3IKLSAgICAvLyAq
LWNoaWxkLW9mLXR5cGUsIHdlIHdpbGwganVzdCBnaXZlIHVwIGFuZCByZS1ldmFsdWF0ZSB3aGVu
ZXZlciBjaGlsZHJlbiBjaGFuZ2UgYXQgYWxsLgotICAgIHVuc2lnbmVkIG1fY2hpbGRyZW5BZmZl
Y3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzIDogMTsKLSAgICB1bnNpZ25lZCBtX2NoaWxkcmVuQWZmZWN0
ZWRCeUxhc3RDaGlsZFJ1bGVzIDogMTsKLSAgICB1bnNpZ25lZCBtX2NoaWxkcmVuQWZmZWN0ZWRC
eURpcmVjdEFkamFjZW50UnVsZXMgOiAxOwotICAgIHVuc2lnbmVkIG1fY2hpbGRyZW5BZmZlY3Rl
ZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcyA6IDE7Ci0gICAgdW5zaWduZWQgbV9jaGlsZHJlbkFm
ZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyA6IDE7Ci0jaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQotICAgIHVuc2lnbmVkIG1fd2ViVlRUTm9kZVR5cGUgOiAyOyAvLyBXZWJWVFROb2RlVHlw
ZQotI2VuZGlmCi0KIHByaXZhdGU6CiAgICAgT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBtX25v
ZGVMaXN0czsKICAgICBPd25QdHI8Tm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhPiBtX211dGF0aW9u
T2JzZXJ2ZXJEYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlz
aW9uIDEzOTY1NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUQogICAgIGVsc2UgaWYgKG5hbWUgPT0gdGFiaW5kZXhBdHRyKSB7CiAgICAg
ICAgIGludCB0YWJpbmRleCA9IDA7CiAgICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBjbGVhclRhYkluZGV4RXhwbGljaXRseSgpOworICAgICAgICAgICAgY2xlYXJUYWJJ
bmRleEV4cGxpY2l0bHlJZk5lZWRlZCgpOwogICAgICAgICBlbHNlIGlmIChwYXJzZUhUTUxJbnRl
Z2VyKHZhbHVlLCB0YWJpbmRleCkpIHsKICAgICAgICAgICAgIC8vIENsYW1wIHRhYmluZGV4IHRv
IHRoZSByYW5nZSBvZiAnc2hvcnQnIHRvIG1hdGNoIEZpcmVmb3gncyBiZWhhdmlvci4KICAgICAg
ICAgICAgIHNldFRhYkluZGV4RXhwbGljaXRseShtYXgoc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om51
bWVyaWNfbGltaXRzPHNob3J0Pjo6bWluKCkpLCBtaW4odGFiaW5kZXgsIHN0YXRpY19jYXN0PGlu
dD4oc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgpKSkpKTsK
</data>
<flag name="review"
          id="200710"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="200717"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>