<?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>52370</bug_id>
          
          <creation_ts>2011-01-13 08:16:52 -0800</creation_ts>
          <short_desc>Style sharing optimization no longer works on major web sites</short_desc>
          <delta_ts>2011-02-02 11:51:26 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>53610</dependson>
          <blocked>53574</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>bdakin</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mitz</cc>
    
    <cc>psolanki</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>333694</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-13 08:16:52 -0800</bug_when>
    <thetext>The code in CSSStyleSelector::locateSharedStyle() that tries to share style information between element has been defeated by widespread use of certain CSS selectors (:first-child pseudo class and similar). The current implementation disables the sharing optimization for the whole page if one of these constructs is seen in any style sheet used by the page.  

This is currently preventing style sharing on basically all major sites: apple.com, nytimes.com, facebook.com, news.bbc.co.uk, engadget.com... all fail to do any sharing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333697</commentid>
    <comment_count>1</comment_count>
      <attachid>78811</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-13 08:25:29 -0800</bug_when>
    <thetext>Created attachment 78811
patch

This patch allows ~25-40% of elements on regular web sites share style as opposed to ~0% before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333704</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-13 08:27:48 -0800</bug_when>
    <thetext>Attachment 78811 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/css/CSSStyleSelector.cpp:1009:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2977:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2978:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2979:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2980:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2980:  Missing spaces around |  [whitespace/operators] [3]
Source/WebCore/css/CSSStyleSelector.cpp:2981:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2982:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2983:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2984:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2985:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2986:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2987:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2988:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 14 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333708</commentid>
    <comment_count>3</comment_count>
      <attachid>78811</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-13 08:33:02 -0800</bug_when>
    <thetext>Comment on attachment 78811
patch

r-, found some test failures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333792</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-13 10:43:51 -0800</bug_when>
    <thetext>&lt;rdar://problem/8860136&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333794</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-13 10:44:09 -0800</bug_when>
    <thetext>Antti: once you have a working patch, can you post memory and pageload performance data?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334568</commentid>
    <comment_count>6</comment_count>
      <attachid>78990</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-14 13:41:47 -0800</bug_when>
    <thetext>Created attachment 78990
fix regressions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334573</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-14 13:43:57 -0800</bug_when>
    <thetext>Attachment 78990 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1

Source/WebCore/css/CSSStyleSelector.cpp:1021:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334623</commentid>
    <comment_count>8</comment_count>
      <attachid>78990</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-14 14:39:43 -0800</bug_when>
    <thetext>Comment on attachment 78990
fix regressions

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

&gt; Source/WebCore/ChangeLog:25
&gt; +            MatML default style sheet has sibling rules. Extract them and also

MathML

&gt; Source/WebCore/ChangeLog:38
&gt; +            Track sibling rules and ids used in the stylesheets to allow much more fine grained rejection of cases

fine-grained

&gt; Source/WebCore/ChangeLog:51
&gt; +            MatML default style sheet has sibling rules which don&apos;t get noticed by the normal document

MathML

&gt; Source/WebCore/css/CSSStyleSelector.cpp:424
&gt; +    void collectIdsAndSiblingRulesFromList(HashSet&lt;AtomicStringImpl*&gt;&amp; ids, OwnPtr&lt;CSSRuleSet&gt;&amp; siblingRules, CSSRuleDataList* rules);

Can CSSRuleDataList* be const CSSRuleDataList*? It&apos;s hard to see what the &quot;out&quot; params are otherwise. Maybe put &apos;rules&apos; first?

&gt; Source/WebCore/css/CSSStyleSelector.cpp:574
&gt; +    // This is used in the style sharing code to check for rules that prevent sharing.

Not clear what &quot;This&quot; refers to.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:1127
&gt; +            goto returnResult;

Ugh, goto. Can the code be factored with a new method or function to avoid this?

&gt; Source/WebCore/css/CSSStyleSelector.cpp:3011
&gt; +    return relation == CSSSelector::DirectAdjacent
&gt; +        || relation == CSSSelector::IndirectAdjacent
&gt; +        || type == CSSSelector::PseudoEmpty
&gt; +        || type == CSSSelector::PseudoFirstChild
&gt; +        || type == CSSSelector::PseudoLastChild
&gt; +        || type == CSSSelector::PseudoOnlyChild
&gt; +        || type == CSSSelector::PseudoOnlyOfType
&gt; +        || type == CSSSelector::PseudoNthChild
&gt; +        || type == CSSSelector::PseudoNthOfType
&gt; +        || type == CSSSelector::PseudoNthLastChild
&gt; +        || type == CSSSelector::PseudoNthLastOfType;
&gt; +}

Style rules are to put || at the end of the previous line.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:3053
&gt; +    AtomRuleMap::iterator end = m_idRules.end();
&gt; +    for (AtomRuleMap::iterator it = m_idRules.begin(); it != end; ++it)
&gt; +    end = m_classRules.end();
&gt; +        collectIdsAndSiblingRulesFromList(ids, siblingRules, it-&gt;second);
&gt; +    for (AtomRuleMap::iterator it = m_tagRules.begin(); it != end; ++it)
&gt; +    for (AtomRuleMap::iterator it = m_pseudoRules.begin(); it != end; ++it)
&gt; +    if (m_universalRules)
&gt; +        collectIdsAndSiblingRulesFromList(ids, siblingRules, m_universalRules.get());
&gt; +}
&gt;  

Should be able to use const_iterators here. Can the whole method be const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334650</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-01-14 15:06:29 -0800</bug_when>
    <thetext>
&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:3011
&gt; &gt; +    return relation == CSSSelector::DirectAdjacent
&gt; &gt; +        || relation == CSSSelector::IndirectAdjacent
&gt; &gt; +        || type == CSSSelector::PseudoEmpty
&gt; &gt; +        || type == CSSSelector::PseudoFirstChild
&gt; &gt; +        || type == CSSSelector::PseudoLastChild
&gt; &gt; +        || type == CSSSelector::PseudoOnlyChild
&gt; &gt; +        || type == CSSSelector::PseudoOnlyOfType
&gt; &gt; +        || type == CSSSelector::PseudoNthChild
&gt; &gt; +        || type == CSSSelector::PseudoNthOfType
&gt; &gt; +        || type == CSSSelector::PseudoNthLastChild
&gt; &gt; +        || type == CSSSelector::PseudoNthLastOfType;
&gt; &gt; +}
&gt; 
&gt; Style rules are to put || at the end of the previous line.

From the style guide:
&quot;5. Boolean expressions at the same nesting level that span multiple lines should have their operators on the left side of the line instead of the right side.&quot;

It seems that the code is correct according to the style guide</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334905</commentid>
    <comment_count>10</comment_count>
      <attachid>79067</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-15 11:13:55 -0800</bug_when>
    <thetext>Created attachment 79067
style fixes based on simon&apos;s comments

...except for the || placements. Didn&apos;t fix the stylebot warning either as this is a big patch without any additional refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334906</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-15 11:15:54 -0800</bug_when>
    <thetext>Attachment 79067 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1

Source/WebCore/css/CSSStyleSelector.h:114:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/css/CSSStyleSelector.cpp:1027:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334943</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-15 13:55:38 -0800</bug_when>
    <thetext>Shark says this patch reduces time spent in style selection over loading news.bbc.co.uk by ~45%. This translates into overall CPU usage reduction of &gt; 25% as the profile is dominated by the style selector.

It also reduces RenderStyle memory use by ~25% for gain of some 150kB on this page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335496</commentid>
    <comment_count>13</comment_count>
      <attachid>79067</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-01-17 13:33:45 -0800</bug_when>
    <thetext>Comment on attachment 79067
style fixes based on simon&apos;s comments

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

r=me

Great patch.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:574
&gt; +    // Collect all ids and rules using silbling selectors (:first-child and similar)

Typo.  &quot;silbling&quot; should be &quot;sibling&quot;

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2998
&gt; +static inline bool isSiblingSelector(CSSSelector* selector)

I would just make this a member function of CSSSelector.  I can see us using it elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335731</commentid>
    <comment_count>14</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-18 02:49:52 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336459</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-19 06:08:54 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76012 might have broken GTK Linux 32-bit Debug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78811</attachid>
            <date>2011-01-13 08:25:29 -0800</date>
            <delta_ts>2011-01-14 13:41:47 -0800</delta_ts>
            <desc>patch</desc>
            <filename>style-sharing-4.patch</filename>
            <type>text/plain</type>
            <size>14440</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NzE0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDEtMTMgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MjM3MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODg1NjgwOD4KKyAgICAgICAgU3R5bGUg
c2hhcmluZyBvcHRpbWl6YXRpb24gbm8gbG9uZ2VyIHdvcmtzIG9uIG1ham9yIHdlYiBzaXRlcwor
ICAgICAgICAKKyAgICAgICAgVGhlIGNvZGUgaW4gQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlU2hh
cmVkU3R5bGUoKSB0aGF0IHRyaWVzIHRvIHNoYXJlIHN0eWxlIGluZm9ybWF0aW9uIGJldHdlZW4g
ZWxlbWVudCBoYXMgYmVlbiBkZWZlYXRlZCAKKyAgICAgICAgYnkgd2lkZXNwcmVhZCB1c2Ugb2Yg
Y2VydGFpbiBDU1Mgc2VsZWN0b3JzICg6Zmlyc3QtY2hpbGQgcHNldWRvIGNsYXNzIGFuZCBzaW1p
bGFyKS4gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGlzYWJsZXMKKyAgICAgICAgIHRoZSBz
aGFyaW5nIG9wdGltaXphdGlvbiBmb3IgdGhlIHdob2xlIHBhZ2UgaWYgb25lIG9mIHRoZXNlIGNv
bnN0cnVjdHMgaXMgc2VlbiBpbiBhbnkgc3R5bGUgc2hlZXQgdXNlZCBieSB0aGUgcGFnZS4gIAor
CisgICAgICAgIFRoaXMgaXMgY3VycmVudGx5IHByZXZlbnRpbmcgc3R5bGUgc2hhcmluZyBvbiBi
YXNpY2FsbHkgYWxsIG1ham9yIHNpdGVzOiBhcHBsZS5jb20sIG55dGltZXMuY29tLCBmYWNlYm9v
ay5jb20sIAorICAgICAgICBuZXdzLmJiYy5jby51aywgZW5nYWRnZXQuY29tLi4uIGFsbCBmYWls
IHRvIGRvIGFueSBzaGFyaW5nLiAKKyAgICAgICAgCisgICAgICAgIFRyYWNrIHNpYmxpbmcgcnVs
ZXMgYW5kIGlkcyB1c2VkIGluIHRoZSBzdHlsZXNoZWV0cyB0byBhbGxvdyBtb3JlIGZpbmUgZ3Jh
aW5lZCByZWplY3Rpb24gb2YgY2FzZXMKKyAgICAgICAgd2hlcmUgc3R5bGUgc2hhcmluZyBjYW4n
dCBiZSB1c2VkLgorCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoZXNTaWJsaW5nUnVsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjppc1NpYmxpbmdTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NSdWxlU2V0Ojpjb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzRnJvbUxpc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUnVsZVNldDo6Y29sbGVjdElkc0FuZFNpYmxpbmdSdWxlcyk6CisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKwogMjAxMS0wMS0xMyAgTWlraGFpbCBOYWdhbm92
ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkg
SGF0Y2hlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJl
dmlzaW9uIDc1MzkwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MjEsNiArNDIxLDkgQEAgcHVibGljOgogICAgIHZvaWQgYWRk
VG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKICAgICAg
ICAgICAgICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOwog
ICAgIAorICAgIHZvaWQgY29sbGVjdElkc0FuZFNpYmxpbmdSdWxlc0Zyb21MaXN0KEhhc2hTZXQ8
QXRvbWljU3RyaW5nSW1wbCo+JiBpZHMsIE93blB0cjxDU1NSdWxlU2V0PiYgc2libGluZ1J1bGVz
LCBDU1NSdWxlRGF0YUxpc3QqIHJ1bGVzKTsKKyAgICB2b2lkIGNvbGxlY3RJZHNBbmRTaWJsaW5n
UnVsZXMoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkcywgT3duUHRyPENTU1J1bGVTZXQ+
JiBzaWJsaW5nUnVsZXMpOworICAgIAogICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0SURSdWxlcyhB
dG9taWNTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQogICAg
IENTU1J1bGVEYXRhTGlzdCogZ2V0Q2xhc3NSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIHsg
cmV0dXJuIG1fY2xhc3NSdWxlcy5nZXQoa2V5KTsgfQogICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0
VGFnUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBtX3RhZ1J1bGVzLmdldChr
ZXkpOyB9CkBAIC01NDMsNiArNTQ2LDEyIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2Vs
ZWN0b3IoRG9jdW0KICAgICAgICAgaWYgKHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhc2hl
ZXQtPmRpc2FibGVkKCkpCiAgICAgICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCAqbV9tZWRpdW0sIHRoaXMp
OwogICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIHVzZWQgaW4gdGhlIHN0eWxlIHNoYXJpbmcg
Y29kZSB0byBjaGVjayBmb3IgcnVsZXMgdGhhdCBwcmV2ZW50IHNoYXJpbmcuCisgICAgLy8gQXNz
dW1lcyB0aGF0IHRoZSBVQSBzaGVldCBkb2VzIG5vdCBjb250YWluIHNpYmxpbmcgb3IgaWQgcnVs
ZXMuCisgICAgbV9hdXRob3JTdHlsZS0+Y29sbGVjdElkc0FuZFNpYmxpbmdSdWxlcyhtX2lkc0lu
UnVsZXMsIG1fc2libGluZ1J1bGVzKTsKKyAgICBpZiAobV91c2VyU3R5bGUpCisgICAgICAgIG1f
dXNlclN0eWxlLT5jb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzKG1faWRzSW5SdWxlcywgbV9zaWJs
aW5nUnVsZXMpOwogCiAgICAgaWYgKGRvY3VtZW50LT5yZW5kZXJlcigpICYmIGRvY3VtZW50LT5y
ZW5kZXJlcigpLT5zdHlsZSgpKQogICAgICAgICBkb2N1bWVudC0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CkBAIC05MzksNDAgKzk0OCw1OSBAQCBz
dGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNoCiAKIE5vZGUqIENTU1N0eWxl
U2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCBkZXB0
aCkgY29uc3QKIHsKLSAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNTdHlsZWRFbGVtZW50KCkp
IHsKLSAgICAgICAgU3R5bGVkRWxlbWVudCogcCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQq
PihwYXJlbnQpOwotICAgICAgICBpZiAoIXAtPmlubGluZVN0eWxlRGVjbCgpICYmICFwLT5oYXNJ
RCgpKSB7Ci0gICAgICAgICAgICBOb2RlKiByID0gcC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBzdWJjb3VudCA9IDA7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSog
c3QgPSBwLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgd2hpbGUgKHIpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoci0+cmVuZGVyU3R5bGUoKSA9PSBzdCkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHItPmxhc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgIGlmIChzdWJjb3VudCsrID09
IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICAgICAgciA9IHItPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKCFyICYmIGRlcHRoIDwgY1N0eWxlU2VhcmNoVGhyZXNob2xkKQotICAg
ICAgICAgICAgICAgIHIgPSBsb2NhdGVDb3VzaW5MaXN0KHBhcmVudC0+cGFyZW50RWxlbWVudCgp
LCBkZXB0aCArIDEpOwotICAgICAgICAgICAgd2hpbGUgKHIpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoci0+cmVuZGVyU3R5bGUoKSA9PSBzdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHIt
Pmxhc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgIGlmIChzdWJjb3VudCsrID09IGNTdHlsZVNl
YXJjaFRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAg
ICAgICAgciA9IHItPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgfQotICAgICAgICB9
CisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNTdHlsZWRFbGVtZW50KCkpCisgICAgICAg
IHJldHVybiAwOworICAgIFN0eWxlZEVsZW1lbnQqIHAgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVt
ZW50Kj4ocGFyZW50KTsKKyAgICBpZiAocC0+aW5saW5lU3R5bGVEZWNsKCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIGlmIChwLT5oYXNJRCgpICYmIG1faWRzSW5SdWxlcy5jb250YWlucyhwLT5p
ZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgIHJldHVybiAwOworICAgIE5v
ZGUqIHIgPSBwLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICB1bnNpZ25lZCBzdWJjb3VudCA9IDA7
CisgICAgUmVuZGVyU3R5bGUqIHN0ID0gcC0+cmVuZGVyU3R5bGUoKTsKKyAgICB3aGlsZSAocikg
eworICAgICAgICBpZiAoci0+cmVuZGVyU3R5bGUoKSA9PSBzdCkKKyAgICAgICAgICAgIHJldHVy
biByLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKHN1YmNvdW50KysgPT0gY1N0eWxlU2VhcmNo
VGhyZXNob2xkKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHIgPSByLT5wcmV2aW91
c1NpYmxpbmcoKTsKKyAgICB9CisgICAgaWYgKCFyICYmIGRlcHRoIDwgY1N0eWxlU2VhcmNoVGhy
ZXNob2xkKQorICAgICAgICByID0gbG9jYXRlQ291c2luTGlzdChwYXJlbnQtPnBhcmVudEVsZW1l
bnQoKSwgZGVwdGggKyAxKTsKKyAgICB3aGlsZSAocikgeworICAgICAgICBpZiAoci0+cmVuZGVy
U3R5bGUoKSA9PSBzdCkKKyAgICAgICAgICAgIHJldHVybiByLT5sYXN0Q2hpbGQoKTsKKyAgICAg
ICAgaWYgKHN1YmNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHIgPSByLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB9CiAgICAg
cmV0dXJuIDA7CiB9CiAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhF
bGVtZW50KE5vZGUqIG4pIGNvbnN0Citib29sIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoZXNTaWJs
aW5nUnVsZXMoRWxlbWVudCogZSkKK3sKKyAgICBpZiAoIW1fc2libGluZ1J1bGVzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgRWxlbWVudCogb3JpZ2luYWxFbGVtZW50ID0gbV9lbGVtZW50
OworICAgIG1fY2hlY2tlci5tX2NvbGxlY3RSdWxlc09ubHkgPSB0cnVlOworICAgIGluaXRFbGVt
ZW50KGUpOworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSk7CisgICAgaW50IGZpcnN0U2libGlu
Z1J1bGUgPSAtMSwgbGFzdFNpYmxpbmdSdWxlID0gLTE7CisgICAgbWF0Y2hSdWxlcyhtX3NpYmxp
bmdSdWxlcy5nZXQoKSwgZmlyc3RTaWJsaW5nUnVsZSwgbGFzdFNpYmxpbmdSdWxlLCBmYWxzZSk7
CisgICAgbV9jaGVja2VyLm1fY29sbGVjdFJ1bGVzT25seSA9IGZhbHNlOworICAgIGJvb2wgbWF0
Y2hlcyA9IG1fcnVsZUxpc3Q7CisgICAgbV9ydWxlTGlzdC5jbGVhcigpOworICAgIGluaXRFbGVt
ZW50KG9yaWdpbmFsRWxlbWVudCk7CisgICAgcmV0dXJuIG1hdGNoZXM7Cit9CisKK2Jvb2wgQ1NT
U3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5vZGUqIG4pCiB7CiAgICAg
aWYgKG4tPmlzU3R5bGVkRWxlbWVudCgpKSB7CiAgICAgICAgIFN0eWxlZEVsZW1lbnQqIHMgPSBz
dGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obik7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHMtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgIGlmIChzdHlsZSAmJiAhc3R5bGUtPnVuaXF1
ZSgpICYmCi0gICAgICAgICAgICAocy0+dGFnUU5hbWUoKSA9PSBtX2VsZW1lbnQtPnRhZ1FOYW1l
KCkpICYmICFzLT5oYXNJRCgpICYmCisgICAgICAgICAgICAocy0+dGFnUU5hbWUoKSA9PSBtX2Vs
ZW1lbnQtPnRhZ1FOYW1lKCkpICYmCiAgICAgICAgICAgICAocy0+aGFzQ2xhc3MoKSA9PSBtX2Vs
ZW1lbnQtPmhhc0NsYXNzKCkpICYmICFzLT5pbmxpbmVTdHlsZURlY2woKSAmJgogICAgICAgICAg
ICAgKHMtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSA9PSBtX3N0eWxlZEVsZW1lbnQtPmhhc01hcHBl
ZEF0dHJpYnV0ZXMoKSkgJiYKICAgICAgICAgICAgIChzLT5pc0xpbmsoKSA9PSBtX2VsZW1lbnQt
PmlzTGluaygpKSAmJiAKQEAgLTk4Niw2ICsxMDE0LDEwIEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rv
cjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICAgICAgICAgIChzLT5mYXN0R2V0QXR0cmlidXRlKGxh
bmdBdHRyKSA9PSBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpKSAmJgogICAg
ICAgICAgICAgKHMtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSA9PSBtX2VsZW1lbnQt
PmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSkgJiYKICAgICAgICAgICAgIChzLT5mYXN0
R2V0QXR0cmlidXRlKGNlbGxwYWRkaW5nQXR0cikgPT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKGNlbGxwYWRkaW5nQXR0cikpKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChz
LT5oYXNJRCgpICYmIG1faWRzSW5SdWxlcy5jb250YWlucyhzLT5pZEZvclN0eWxlUmVzb2x1dGlv
bigpLmltcGwoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAKICAg
ICAgICAgICAgIGJvb2wgaXNDb250cm9sID0gcy0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKICAg
ICAgICAgICAgIGlmIChpc0NvbnRyb2wgIT0gbV9lbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVu
dCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDksNiArMTA4MSw5IEBA
IGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2VsZW1lbnRMaW5rU3RhdGUgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXNTaWJsaW5nUnVsZXMoc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CkBAIC0xMDU3LDMxICsxMDkyLDM5IEBAIGJvb2wgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxl
KCkgY29uc3QKK0FMV0FZU19JTkxJTkUgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6Omxv
Y2F0ZVNoYXJlZFN0eWxlKCkKIHsKLSAgICBpZiAobV9zdHlsZWRFbGVtZW50ICYmICFtX3N0eWxl
ZEVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpICYmICFtX3N0eWxlZEVsZW1lbnQtPmhhc0lEKCkg
JiYgIW1fc3R5bGVkRWxlbWVudC0+ZG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdSdWxlcygpKSB7Ci0g
ICAgICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzLgotICAgICAgICB1bnNpZ25lZCBjb3Vu
dCA9IDA7Ci0gICAgICAgIE5vZGUqIG47Ci0gICAgICAgIGZvciAobiA9IG1fZWxlbWVudC0+cHJl
dmlvdXNTaWJsaW5nKCk7IG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKTsgbiA9IG4tPnByZXZpb3Vz
U2libGluZygpKSB7IH0KLSAgICAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgICAgIGlmIChjYW5T
aGFyZVN0eWxlV2l0aEVsZW1lbnQobikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG4tPnJlbmRl
clN0eWxlKCk7Ci0gICAgICAgICAgICBpZiAoY291bnQrKyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hv
bGQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBmb3IgKG4gPSBuLT5w
cmV2aW91c1NpYmxpbmcoKTsgbiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpOyBuID0gbi0+cHJldmlv
dXNTaWJsaW5nKCkpIHsgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghbikgCi0gICAgICAgICAg
ICBuID0gbG9jYXRlQ291c2luTGlzdChtX2VsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSk7Ci0gICAg
ICAgIHdoaWxlIChuKSB7Ci0gICAgICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KG4pKQotICAgICAgICAgICAgICAgIHJldHVybiBuLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAg
ICAgaWYgKGNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQotICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgZm9yIChuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7IG4g
JiYgIW4tPmlzRWxlbWVudE5vZGUoKTsgbiA9IG4tPnByZXZpb3VzU2libGluZygpKSB7IH0KLSAg
ICAgICAgfSAgICAgICAgCisgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNs
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIElmIHRoZSBpZCBkb2VzIG5vdCBzaG93IHVw
IGluIGFueSBvZiB0aGUgc3R5bGUgcnVsZXMsIHdlIGNhbiBpZ25vcmUgaXQuCisgICAgaWYgKG1f
c3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2lkc0luUnVsZXMuY29udGFpbnMobV9zdHlsZWRF
bGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgIHJldHVybiAw
OworICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzLgorICAgIHVuc2lnbmVkIGNvdW50ID0g
MDsKKyAgICBOb2RlKiBuOworICAgIGZvciAobiA9IG1fc3R5bGVkRWxlbWVudC0+cHJldmlvdXNT
aWJsaW5nKCk7IG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKTsgbiA9IG4tPnByZXZpb3VzU2libGlu
ZygpKSB7IH0KKyAgICB3aGlsZSAobikgeworICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhF
bGVtZW50KG4pKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChjb3VudCsrID09IGNT
dHlsZVNlYXJjaFRocmVzaG9sZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBmb3Ig
KG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsgbiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpOyBuID0g
bi0+cHJldmlvdXNTaWJsaW5nKCkpIHsgfQorICAgIH0KKyAgICBpZiAoIW4pIAorICAgICAgICBu
ID0gbG9jYXRlQ291c2luTGlzdChtX3N0eWxlZEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSk7Cisg
ICAgd2hpbGUgKG4pIHsKKyAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChuKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoY291bnQrKyA9PSBjU3R5bGVTZWFyY2hU
aHJlc2hvbGQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZm9yIChuID0gbi0+cHJl
dmlvdXNTaWJsaW5nKCk7IG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKTsgbiA9IG4tPnByZXZpb3Vz
U2libGluZygpKSB7IH0KICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFuKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAvLyBDYW4ndCBzaGFyZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5LiAK
KyAgICBpZiAobWF0Y2hlc1NpYmxpbmdSdWxlcyhtX3N0eWxlZEVsZW1lbnQpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gbi0+cmVuZGVyU3R5bGUoKTsKIH0KIAogdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjptYXRjaFVBUnVsZXMoaW50JiBmaXJzdFVBUnVsZSwgaW50JiBsYXN0VUFSdWxl
KQpAQCAtMTE3NCw3ICsxMjE3LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVT
ZWxlY3RvcgogICAgIH0KIAogICAgIGluaXRFbGVtZW50KGUpOwotICAgIGlmIChhbGxvd1NoYXJp
bmcpIHsKKyAgICBpZiAoYWxsb3dTaGFyaW5nICYmIG1fc3R5bGVkRWxlbWVudCkgewogICAgICAg
ICBSZW5kZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOwogICAgICAg
ICBpZiAoc2hhcmVkU3R5bGUpCiAgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7CkBAIC0y
OTExLDYgKzI5NTQsNTkgQEAgdm9pZCBDU1NSdWxlU2V0OjphZGRTdHlsZVJ1bGUoQ1NTU3R5bGVS
dQogICAgICAgICAgICAgYWRkUnVsZShydWxlLCBzKTsKICAgICB9CiB9CisgICAgCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNTaWJsaW5nU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQorewor
ICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9IHNlbGVjdG9yLT5yZWxhdGlvbigp
OworICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHR5cGUgPSBzZWxlY3Rvci0+cHNldWRvVHlw
ZSgpOworICAgIHJldHVybiByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQg
fHwgCisgICAgICAgIHJlbGF0aW9uID09IENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50IHx8
CisgICAgICAgIHR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VtcHR5IHx8CisgICAgICAgIHR5
cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0Q2hpbGR8fAorICAgICAgICB0eXBlID09IENT
U1NlbGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZSB8fAorICAgICAgICB0eXBlID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9MYXN0Q2hpbGQgfHwKKyAgICAgICAgdHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvTGFzdE9mVHlwZSB8fAorICAgICAgICB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Pbmx5
Q2hpbGQgfHwKKyAgICAgICAgdHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seU9mVHlwZSB8
fAorICAgICAgICB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhDaGlsZCB8fAorICAgICAg
ICB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhPZlR5cGUgfHwKKyAgICAgICAgdHlwZSA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFzdENoaWxkIHx8CisgICAgICAgIHR5cGUgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb050aExhc3RPZlR5cGU7Cit9CisKK3ZvaWQgQ1NTUnVsZVNldDo6Y29s
bGVjdElkc0FuZFNpYmxpbmdSdWxlc0Zyb21MaXN0KEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+
JiBpZHMsIE93blB0cjxDU1NSdWxlU2V0PiYgc2libGluZ1J1bGVzLCBDU1NSdWxlRGF0YUxpc3Qq
IHJ1bGVzKQoreworICAgIGZvciAoQ1NTUnVsZURhdGEqIGQgPSBydWxlcy0+Zmlyc3QoKTsgZDsg
ZCA9IGQtPm5leHQoKSkgeworICAgICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBkLT5zZWxl
Y3RvcigpOworICAgICAgICBib29sIGZvdW5kU2libGluZ1NlbGVjdG9yID0gZmFsc2U7CisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6SWQgJiYgIXNlbGVjdG9yLT5tX3ZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBp
ZHMuYWRkKHNlbGVjdG9yLT5tX3ZhbHVlLmltcGwoKSk7CisgICAgICAgICAgICBpZiAoaXNTaWJs
aW5nU2VsZWN0b3Ioc2VsZWN0b3IpKQorICAgICAgICAgICAgICAgIGZvdW5kU2libGluZ1NlbGVj
dG9yID0gdHJ1ZTsKKyAgICAgICAgfSB3aGlsZSAoKHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hp
c3RvcnkoKSkpOworICAgICAgICBpZiAoZm91bmRTaWJsaW5nU2VsZWN0b3IpIHsKKyAgICAgICAg
ICAgIGlmICghc2libGluZ1J1bGVzKQorICAgICAgICAgICAgICAgIHNpYmxpbmdSdWxlcyA9IGFk
b3B0UHRyKG5ldyBDU1NSdWxlU2V0KTsKKyAgICAgICAgICAgIHNpYmxpbmdSdWxlcy0+YWRkUnVs
ZShkLT5ydWxlKCksIGQtPnNlbGVjdG9yKCkpOyAgIAorICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIENTU1J1bGVTZXQ6OmNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXMoSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj4mIGlkcywgT3duUHRyPENTU1J1bGVTZXQ+JiBzaWJsaW5nUnVsZXMpCit7Cisg
ICAgQXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faWRSdWxlcy5lbmQoKTsKKyAgICBmb3Ig
KEF0b21SdWxlTWFwOjppdGVyYXRvciBpdCA9IG1faWRSdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgIGNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXNGcm9tTGlzdChpZHMsIHNp
YmxpbmdSdWxlcywgaXQtPnNlY29uZCk7CisgICAgZW5kID0gbV9jbGFzc1J1bGVzLmVuZCgpOwor
ICAgIGZvciAoQXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jbGFzc1J1bGVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgY29sbGVjdElkc0FuZFNpYmxpbmdSdWxlc0Zyb21M
aXN0KGlkcywgc2libGluZ1J1bGVzLCBpdC0+c2Vjb25kKTsKKyAgICBlbmQgPSBtX3RhZ1J1bGVz
LmVuZCgpOworICAgIGZvciAoQXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90YWdSdWxlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGNvbGxlY3RJZHNBbmRTaWJsaW5nUnVs
ZXNGcm9tTGlzdChpZHMsIHNpYmxpbmdSdWxlcywgaXQtPnNlY29uZCk7CisgICAgaWYgKG1fdW5p
dmVyc2FsUnVsZXMpCisgICAgICAgIGNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXNGcm9tTGlzdChp
ZHMsIHNpYmxpbmdSdWxlcywgbV91bml2ZXJzYWxSdWxlcy5nZXQoKSk7Cit9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIHRoaXMgaXMgbW9zdGx5IGJvcmluZyBzdHVmZiBv
biBob3cgdG8gYXBwbHkgYSBjZXJ0YWluIHJ1bGUgdG8gdGhlIHJlbmRlcnN0eWxlLi4uCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDc1MzkwKQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA4LDkgKzEwOCwxMCBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0
Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQ
c2V1ZG9JZCA9IE5PUFNFVURPKTsKICAgICAgICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7
Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCkg
Y29uc3Q7CisgICAgICAgIEFMV0FZU19JTkxJTkUgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0
eWxlKCk7CisgICAgICAgIGJvb2wgbWF0Y2hlc1NpYmxpbmdSdWxlcyhFbGVtZW50Kik7CiAgICAg
ICAgIE5vZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCBkZXB0
aCA9IDEpIGNvbnN0OwotICAgICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChOb2Rl
KikgY29uc3Q7CisgICAgICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5vZGUqKTsK
IAogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdl
dCgpOyB9CiAKQEAgLTE5Nyw2ICsxOTgsOSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBP
d25QdHI8Q1NTUnVsZVNldD4gbV9hdXRob3JTdHlsZTsKICAgICAgICAgT3duUHRyPENTU1J1bGVT
ZXQ+IG1fdXNlclN0eWxlOworICAgICAgICAKKyAgICAgICAgT3duUHRyPENTU1J1bGVTZXQ+IG1f
c2libGluZ1J1bGVzOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBtX2lkc0lu
UnVsZXM7CiAKICAgICAgICAgYm9vbCBtX2hhc1VBQXBwZWFyYW5jZTsKICAgICAgICAgQm9yZGVy
RGF0YSBtX2JvcmRlckRhdGE7Cg==
</data>
<flag name="review"
          id="70180"
          type_id="1"
          status="-"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78990</attachid>
            <date>2011-01-14 13:41:47 -0800</date>
            <delta_ts>2011-01-15 11:13:55 -0800</delta_ts>
            <desc>fix regressions</desc>
            <filename>style-sharing-7.patch</filename>
            <type>text/plain</type>
            <size>27314</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1ODEyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKyAyMDExLTAxLTEzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTIzNzAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg4NTY4MDg+CisgICAgICAgIFN0eWxl
IHNoYXJpbmcgb3B0aW1pemF0aW9uIG5vIGxvbmdlciB3b3JrcyBvbiBtYWpvciB3ZWIgc2l0ZXMK
KyAgICAgICAgCisgICAgICAgIFRoZSBjb2RlIGluIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNo
YXJlZFN0eWxlKCkgdGhhdCB0cmllcyB0byBzaGFyZSBzdHlsZSBpbmZvcm1hdGlvbiBiZXR3ZWVu
IGVsZW1lbnQgaGFzIGJlZW4gZGVmZWF0ZWQgCisgICAgICAgIGJ5IHdpZGVzcHJlYWQgdXNlIG9m
IGNlcnRhaW4gQ1NTIHNlbGVjdG9ycyAoOmZpcnN0LWNoaWxkIHBzZXVkbyBjbGFzcyBhbmQgc2lt
aWxhcikuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRpc2FibGVzCisgICAgICAgIHRoZSBz
aGFyaW5nIG9wdGltaXphdGlvbiBmb3IgdGhlIHdob2xlIHBhZ2UgaWYgb25lIG9mIHRoZXNlIGNv
bnN0cnVjdHMgaXMgc2VlbiBpbiBhbnkgc3R5bGUgc2hlZXQgdXNlZCBieSB0aGUgcGFnZS4gIAor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBnZXRzIHRoZSBzdHlsZSBzaGFyaW5nIGJhY2sg
dG8gMjUtNDAlIHJhbmdlIG9uIG1vc3Qgd2ViIHNpdGVzLgorCisgICAgICAgICogY3NzL0NTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6cHJvcGVydGllc0VxdWFsKToKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTmVlZGVkIHRvIGltcHJvdmUgZXF1YWxpdHkgY2hlY2tpbmcgTmFtZWROb2RlTWFwOjptYXBw
ZWRNYXBzRXF1aXZhbGVudC4KKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0U2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6YXNzZXJ0Tm9TaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZSk6
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hdE1MIGRlZmF1bHQgc3R5bGUgc2hlZXQgaGFz
IHNpYmxpbmcgcnVsZXMuIEV4dHJhY3QgdGhlbSBhbmQgYWxzbworICAgICAgICAgICAgYXNzZXJ0
IHRoYXQgbm8gb3RoZXIgZGVmYXVsdCBzdHlsZSBoYXMgdGhlbS4KKyAgICAgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoZXNTaWJsaW5nUnVsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjppc1NpYmxpbmdTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NSdWxlU2V0Ojpjb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzRnJvbUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUnVsZVNldDo6Y29sbGVjdElkc0FuZFNpYmxpbmdSdWxlcyk6CisKKyAg
ICAgICAgICAgIFRyYWNrIHNpYmxpbmcgcnVsZXMgYW5kIGlkcyB1c2VkIGluIHRoZSBzdHlsZXNo
ZWV0cyB0byBhbGxvdyBtdWNoIG1vcmUgZmluZSBncmFpbmVkIHJlamVjdGlvbiBvZiBjYXNlcwor
ICAgICAgICAgICAgd2hlcmUgc3R5bGUgc2hhcmluZyBjYW4ndCBiZSB1c2VkLgorCisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKyAgICAgICAgKiBkb20vTmFtZWROb2RlTWFwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6bWFwcGVkTWFwc0VxdWl2YWxlbnQp
OgorICAgICAgICAgICAgCisgICAgICAgICAgICBDaGVjayBhbHNvIGZvciBDU1NWYWx1ZSBtdXRh
dGlvbiBmcm9tIERPTS4gCisgICAgICAgICAgICAKKyAgICAgICAgKiBtYXRobWwvTWF0aE1MTWF0
aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE1MTWF0aEVsZW1lbnQ6Omluc2Vy
dGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKiBtYXRobWwvTWF0aE1MTWF0aEVsZW1lbnQuaDoK
KyAgICAgICAgCisgICAgICAgICAgICBNYXRNTCBkZWZhdWx0IHN0eWxlIHNoZWV0IGhhcyBzaWJs
aW5nIHJ1bGVzIHdoaWNoIGRvbid0IGdldCBub3RpY2VkIGJ5IHRoZSBub3JtYWwgZG9jdW1lbnQK
KyAgICAgICAgICAgIHN0eWxlc2hlZXQgcGFyc2luZy4KKyAgICAgICAgCisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRG
bGFnczo6c2V0Rmlyc3RDaGlsZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZs
YWdzOjpzZXRMYXN0Q2hpbGRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFn
czo6c2V0Q2hpbGRJbmRleCk6CisgICAgICAgIAorICAgICAgICAgICAgVGhlc2UgYWxsIG1ha2Ug
c3R5bGUgbm9uLXNoYXJlYWJsZSAodW5pcXVlKS4KKwogMjAxMS0wMS0xMiAgU2F0aXNoIFNhbXBh
dGggIDxzYXRpc2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkg
R2xhemtvdi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbi5oCShyZXZpc2lvbiA3NTM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDgg
QEAgcHVibGljOgogICAgIGJvb2wgdXNlU3RyaWN0UGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaWN0UGFyc2luZzsgfQogCiAgICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0
SGFzaFNldDxLVVJMPiYpOworICAgIAorICAgIGJvb2wgcHJvcGVydGllc0VxdWFsKGNvbnN0IENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBvKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMg
PT0gby0+bV9wcm9wZXJ0aWVzOyB9CiAKIHByb3RlY3RlZDoKICAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDc1Nzg5KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjEsNiArNDIxLDkg
QEAgcHVibGljOgogICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwg
QXRvbVJ1bGVNYXAmIG1hcCwKICAgICAgICAgICAgICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1
bGUsIENTU1NlbGVjdG9yKiBzZWwpOwogICAgIAorICAgIHZvaWQgY29sbGVjdElkc0FuZFNpYmxp
bmdSdWxlc0Zyb21MaXN0KEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZHMsIE93blB0cjxD
U1NSdWxlU2V0PiYgc2libGluZ1J1bGVzLCBDU1NSdWxlRGF0YUxpc3QqIHJ1bGVzKTsKKyAgICB2
b2lkIGNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXMoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4m
IGlkcywgT3duUHRyPENTU1J1bGVTZXQ+JiBzaWJsaW5nUnVsZXMpOworICAgIAogICAgIENTU1J1
bGVEYXRhTGlzdCogZ2V0SURSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1f
aWRSdWxlcy5nZXQoa2V5KTsgfQogICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0Q2xhc3NSdWxlcyhB
dG9taWNTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1fY2xhc3NSdWxlcy5nZXQoa2V5KTsgfQog
ICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0VGFnUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSB7
IHJldHVybiBtX3RhZ1J1bGVzLmdldChrZXkpOyB9CkBAIC00NDQsNiArNDQ3LDggQEAgc3RhdGlj
IENTU1J1bGVTZXQqIGRlZmF1bHRRdWlya3NTdHlsZTsKIHN0YXRpYyBDU1NSdWxlU2V0KiBkZWZh
dWx0UHJpbnRTdHlsZTsKIHN0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0Vmlld1NvdXJjZVN0eWxl
Owogc3RhdGljIENTU1N0eWxlU2hlZXQqIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0OworICAgIAor
c3RhdGljIENTU1J1bGVTZXQqIHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlOwogCiBSZW5kZXJT
dHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6c19zdHlsZU5vdFlldEF2YWlsYWJsZTsKIApAQCAtNDU1
LDExICs0NjAsMzEgQEAgc3RhdGljIHZvaWQgbG9hZFNpbXBsZURlZmF1bHRTdHlsZSgpOwogLy8g
RklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHNvbWUgbWVjaGFuaXNtIHRoYXQgZ3VhcmFu
dGVlcyB0aGlzIGlzIGluIHN5bmMgd2l0aCB0aGUgcmVhbCBVQSBzdHlsZXNoZWV0Lgogc3RhdGlj
IGNvbnN0IGNoYXIqIHNpbXBsZVVzZXJBZ2VudFN0eWxlU2hlZXQgPSAiaHRtbCxib2R5LGRpdntk
aXNwbGF5OmJsb2NrfWJvZHl7bWFyZ2luOjhweH1kaXY6Zm9jdXMsc3Bhbjpmb2N1c3tvdXRsaW5l
OmF1dG8gNXB4IC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcn1hOi13ZWJraXQtYW55LWxpbmt7Y29s
b3I6LXdlYmtpdC1saW5rO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9YTotd2Via2l0LWFueS1s
aW5rOmFjdGl2ZXtjb2xvcjotd2Via2l0LWFjdGl2ZWxpbmt9IjsKIAotc3RhdGljIGJvb2wgZWxl
bWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShFbGVtZW50KiBlKQorc3RhdGljIGlubGluZSBi
b29sIGVsZW1lbnRDYW5Vc2VTaW1wbGVEZWZhdWx0U3R5bGUoRWxlbWVudCogZSkKIHsKICAgICBy
ZXR1cm4gZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBlLT5oYXNUYWdOYW1lKGJvZHlUYWcpIHx8
IGUtPmhhc1RhZ05hbWUoZGl2VGFnKSB8fCBlLT5oYXNUYWdOYW1lKHNwYW5UYWcpIHx8IGUtPmhh
c1RhZ05hbWUoYnJUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYVRhZyk7CiB9CiAKK3N0YXRpYyBpbmxp
bmUgdm9pZCBjb2xsZWN0U2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUoKQoreworICAgIE93blB0
cjxDU1NSdWxlU2V0PiBzaWJsaW5nUnVsZXM7CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBs
Kj4gaWRzOworICAgIGRlZmF1bHRTdHlsZS0+Y29sbGVjdElkc0FuZFNpYmxpbmdSdWxlcyhpZHMs
IHNpYmxpbmdSdWxlcyk7CisgICAgQVNTRVJUKGlkcy5pc0VtcHR5KCkpOworICAgIGRlbGV0ZSBz
aWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZTsKKyAgICBzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHls
ZSA9IHNpYmxpbmdSdWxlcy5sZWFrUHRyKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3Nl
cnROb1NpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAg
aWYgKHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKQorICAgICAgICByZXR1cm47CisgICAgY29s
bGVjdFNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKCk7CisgICAgQVNTRVJUKCFzaWJsaW5nUnVs
ZXNJbkRlZmF1bHRTdHlsZSk7CisjZW5kaWYKK30KKyAgICAKIHN0YXRpYyBjb25zdCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yJiBzY3JlZW5FdmFsKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IE1lZGlhUXVlcnlFdmFsdWF0b3IsIHN0YXRpY1NjcmVlbkV2YWwsICgic2NyZWVuIikpOwpA
QCAtNTQ1LDYgKzU3MCwxNCBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERv
Y3VtCiAgICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNh
YmxlZCgpKQogICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICB9
CisgICAgCisgICAgLy8gVGhpcyBpcyB1c2VkIGluIHRoZSBzdHlsZSBzaGFyaW5nIGNvZGUgdG8g
Y2hlY2sgZm9yIHJ1bGVzIHRoYXQgcHJldmVudCBzaGFyaW5nLgorICAgIC8vIFVzdWFsbHkgdGhl
cmUgYXJlIG5vIHNpYmxpbmcgcnVsZXMgaW4gdGhlIGRlZmF1bHQgc3R5bGUgYnV0IHRoZSBNYXRo
TUwgc2hlZXQgaGFzIHNvbWUuCisgICAgaWYgKHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKQor
ICAgICAgICBzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZS0+Y29sbGVjdElkc0FuZFNpYmxpbmdS
dWxlcyhtX2lkc0luUnVsZXMsIG1fc2libGluZ1J1bGVzKTsKKyAgICBtX2F1dGhvclN0eWxlLT5j
b2xsZWN0SWRzQW5kU2libGluZ1J1bGVzKG1faWRzSW5SdWxlcywgbV9zaWJsaW5nUnVsZXMpOwor
ICAgIGlmIChtX3VzZXJTdHlsZSkKKyAgICAgICAgbV91c2VyU3R5bGUtPmNvbGxlY3RJZHNBbmRT
aWJsaW5nUnVsZXMobV9pZHNJblJ1bGVzLCBtX3NpYmxpbmdSdWxlcyk7CiAKICAgICBpZiAoZG9j
dW1lbnQtPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkpCiAgICAg
ICAgIGRvY3VtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxl
Y3RvcigpKTsKQEAgLTk0MCw0MCArOTczLDUyIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5
bGVTZWFyY2hUaHJlc2gKIAogTm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlz
dChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkIGRlcHRoKSBjb25zdAogewotICAgIGlmIChwYXJl
bnQgJiYgcGFyZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAgICBTdHlsZWRFbGVtZW50
KiBwID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudCk7Ci0gICAgICAgIGlmICgh
cC0+aW5saW5lU3R5bGVEZWNsKCkgJiYgIXAtPmhhc0lEKCkpIHsKLSAgICAgICAgICAgIE5vZGUq
IHIgPSBwLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN1YmNvdW50
ID0gMDsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdCA9IHAtPnJlbmRlclN0eWxlKCk7Ci0g
ICAgICAgICAgICB3aGlsZSAocikgewotICAgICAgICAgICAgICAgIGlmIChyLT5yZW5kZXJTdHls
ZSgpID09IHN0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gci0+bGFzdENoaWxkKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHN1YmNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICByID0gci0+cHJl
dmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXIgJiYgZGVw
dGggPCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCi0gICAgICAgICAgICAgICAgciA9IGxvY2F0ZUNv
dXNpbkxpc3QocGFyZW50LT5wYXJlbnRFbGVtZW50KCksIGRlcHRoICsgMSk7Ci0gICAgICAgICAg
ICB3aGlsZSAocikgewotICAgICAgICAgICAgICAgIGlmIChyLT5yZW5kZXJTdHlsZSgpID09IHN0
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gci0+bGFzdENoaWxkKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN1YmNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICByID0gci0+cHJldmlvdXNTaWJs
aW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAoIXBhcmVudCB8fCAhcGFy
ZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgU3R5bGVkRWxl
bWVudCogcCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihwYXJlbnQpOworICAgIGlmIChw
LT5pbmxpbmVTdHlsZURlY2woKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHAtPmhhc0lE
KCkgJiYgbV9pZHNJblJ1bGVzLmNvbnRhaW5zKHAtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1w
bCgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgTm9kZSogciA9IHAtPnByZXZpb3VzU2libGlu
ZygpOworICAgIHVuc2lnbmVkIHN1YmNvdW50ID0gMDsKKyAgICBSZW5kZXJTdHlsZSogc3QgPSBw
LT5yZW5kZXJTdHlsZSgpOworICAgIHdoaWxlIChyKSB7CisgICAgICAgIGlmIChyLT5yZW5kZXJT
dHlsZSgpID09IHN0KQorICAgICAgICAgICAgcmV0dXJuIHItPmxhc3RDaGlsZCgpOworICAgICAg
ICBpZiAoc3ViY291bnQrKyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgciA9IHItPnByZXZpb3VzU2libGluZygpOworICAgIH0KKyAgICBp
ZiAoIXIgJiYgZGVwdGggPCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCisgICAgICAgIHIgPSBsb2Nh
dGVDb3VzaW5MaXN0KHBhcmVudC0+cGFyZW50RWxlbWVudCgpLCBkZXB0aCArIDEpOworICAgIHdo
aWxlIChyKSB7CisgICAgICAgIGlmIChyLT5yZW5kZXJTdHlsZSgpID09IHN0KQorICAgICAgICAg
ICAgcmV0dXJuIHItPmxhc3RDaGlsZCgpOworICAgICAgICBpZiAoc3ViY291bnQrKyA9PSBjU3R5
bGVTZWFyY2hUaHJlc2hvbGQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgciA9IHIt
PnByZXZpb3VzU2libGluZygpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9kZSogbikgY29uc3QKK2Jv
b2wgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hlc1NpYmxpbmdSdWxlcygpCit7CisgICAgaW50IGZp
cnN0U2libGluZ1J1bGUgPSAtMSwgbGFzdFNpYmxpbmdSdWxlID0gLTE7CisgICAgbWF0Y2hSdWxl
cyhtX3NpYmxpbmdSdWxlcy5nZXQoKSwgZmlyc3RTaWJsaW5nUnVsZSwgbGFzdFNpYmxpbmdSdWxl
LCBmYWxzZSk7CisgICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG1fbWF0Y2hlZERlY2xzLmNsZWFyKCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5v
ZGUqIG4pCiB7CiAgICAgaWYgKG4tPmlzU3R5bGVkRWxlbWVudCgpKSB7CiAgICAgICAgIFN0eWxl
ZEVsZW1lbnQqIHMgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obik7CiAgICAgICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IHMtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgIGlmIChzdHlsZSAm
JiAhc3R5bGUtPnVuaXF1ZSgpICYmCi0gICAgICAgICAgICAocy0+dGFnUU5hbWUoKSA9PSBtX2Vs
ZW1lbnQtPnRhZ1FOYW1lKCkpICYmICFzLT5oYXNJRCgpICYmCisgICAgICAgICAgICAocy0+dGFn
UU5hbWUoKSA9PSBtX2VsZW1lbnQtPnRhZ1FOYW1lKCkpICYmCiAgICAgICAgICAgICAocy0+aGFz
Q2xhc3MoKSA9PSBtX2VsZW1lbnQtPmhhc0NsYXNzKCkpICYmICFzLT5pbmxpbmVTdHlsZURlY2wo
KSAmJgogICAgICAgICAgICAgKHMtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSA9PSBtX3N0eWxlZEVs
ZW1lbnQtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSkgJiYKICAgICAgICAgICAgIChzLT5pc0xpbmso
KSA9PSBtX2VsZW1lbnQtPmlzTGluaygpKSAmJiAKQEAgLTk4OCw2ICsxMDMzLDEwIEBAIGJvb2wg
Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICAgICAgICAgIChzLT5mYXN0
R2V0QXR0cmlidXRlKGxhbmdBdHRyKSA9PSBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUobGFu
Z0F0dHIpKSAmJgogICAgICAgICAgICAgKHMtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRy
KSA9PSBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSkgJiYKICAgICAg
ICAgICAgIChzLT5mYXN0R2V0QXR0cmlidXRlKGNlbGxwYWRkaW5nQXR0cikgPT0gbV9lbGVtZW50
LT5mYXN0R2V0QXR0cmlidXRlKGNlbGxwYWRkaW5nQXR0cikpKSB7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChzLT5oYXNJRCgpICYmIG1faWRzSW5SdWxlcy5jb250YWlucyhzLT5pZEZv
clN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wgaXNDb250cm9sID0gcy0+aXNGb3JtQ29udHJv
bEVsZW1lbnQoKTsKICAgICAgICAgICAgIGlmIChpc0NvbnRyb2wgIT0gbV9lbGVtZW50LT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEw
NTksMzEgKzExMDgsNDQgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0
aAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotQUxXQVlTX0lOTElORSBSZW5kZXJTdHlsZSogQ1NT
U3R5bGVTZWxlY3Rvcjo6bG9jYXRlU2hhcmVkU3R5bGUoKSBjb25zdAorQUxXQVlTX0lOTElORSBS
ZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogewotICAg
IGlmIChtX3N0eWxlZEVsZW1lbnQgJiYgIW1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNs
KCkgJiYgIW1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiAhbV9zdHlsZWRFbGVtZW50LT5kb2N1
bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkpIHsKLSAgICAgICAgLy8gQ2hlY2sgcHJldmlvdXMg
c2libGluZ3MuCi0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAgICAgTm9kZSogbjsK
LSAgICAgICAgZm9yIChuID0gbV9lbGVtZW50LT5wcmV2aW91c1NpYmxpbmcoKTsgbiAmJiAhbi0+
aXNFbGVtZW50Tm9kZSgpOyBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCkpIHsgfQotICAgICAgICB3
aGlsZSAobikgewotICAgICAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChuKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbi0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgIGlm
IChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIGZvciAobiA9IG4tPnByZXZpb3VzU2libGluZygpOyBuICYmICFu
LT5pc0VsZW1lbnROb2RlKCk7IG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKSkgeyB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFuKSAKLSAgICAgICAgICAgIG4gPSBsb2NhdGVDb3VzaW5MaXN0KG1f
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKTsKLSAgICAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAg
ICAgIGlmIChjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQobikpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG4tPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICBpZiAoY291bnQrKyA9PSBjU3R5bGVT
ZWFyY2hUaHJlc2hvbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBm
b3IgKG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsgbiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpOyBu
ID0gbi0+cHJldmlvdXNTaWJsaW5nKCkpIHsgfQotICAgICAgICB9ICAgICAgICAKKyAgICBpZiAo
IW1fc3R5bGVkRWxlbWVudCB8fCAhbV9wYXJlbnRTdHlsZSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGlubGluZSBzdHlsZSBpdCBpcyBwcm9iYWJseSB1bmlx
dWUuCisgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcgaWYgdGhleSBzaG93IHVw
IGluIHRoZSBzdHlsZXNoZWV0cy4KKyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNJRCgpICYm
IG1faWRzSW5SdWxlcy5jb250YWlucyhtX3N0eWxlZEVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0
aW9uKCkuaW1wbCgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gQ2hlY2sgcHJldmlvdXMg
c2libGluZ3MuCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIE5vZGUqIG47CisgICAgZm9y
IChuID0gbV9zdHlsZWRFbGVtZW50LT5wcmV2aW91c1NpYmxpbmcoKTsgbiAmJiAhbi0+aXNFbGVt
ZW50Tm9kZSgpOyBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCkpIHsgfQorICAgIHdoaWxlIChuKSB7
CisgICAgICAgIGlmIChjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQobikpCisgICAgICAgICAgICBn
b3RvIHJldHVyblJlc3VsdDsKKyAgICAgICAgaWYgKGNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhy
ZXNob2xkKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGZvciAobiA9IG4tPnByZXZp
b3VzU2libGluZygpOyBuICYmICFuLT5pc0VsZW1lbnROb2RlKCk7IG4gPSBuLT5wcmV2aW91c1Np
YmxpbmcoKSkgeyB9CisgICAgfQorICAgIG4gPSBsb2NhdGVDb3VzaW5MaXN0KG1fc3R5bGVkRWxl
bWVudC0+cGFyZW50RWxlbWVudCgpKTsKKyAgICB3aGlsZSAobikgeworICAgICAgICBpZiAoY2Fu
U2hhcmVTdHlsZVdpdGhFbGVtZW50KG4pKQorICAgICAgICAgICAgZ290byByZXR1cm5SZXN1bHQ7
CisgICAgICAgIGlmIChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBmb3IgKG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsgbiAm
JiAhbi0+aXNFbGVtZW50Tm9kZSgpOyBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCkpIHsgfQogICAg
IH0KICAgICByZXR1cm4gMDsKK3JldHVyblJlc3VsdDoKKyAgICAvLyBDYW4ndCBzaGFyZSBpZiBz
aWJsaW5nIHJ1bGVzIGFwcGx5LiBUaGlzIGlzIGNoZWNrZWQgYXQgdGhlIGVuZCBhcyBpdCBzaG91
bGQgcmFyZWx5IGZhaWwuCisgICAgaWYgKG1hdGNoZXNTaWJsaW5nUnVsZXMoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0
eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBt
YXRjaCBhYm92ZS4KKyAgICBpZiAobV9wYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5UG9z
aXRpb25hbFJ1bGVzKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuLT5yZW5kZXJT
dHlsZSgpOwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoVUFSdWxlcyhpbnQmIGZp
cnN0VUFSdWxlLCBpbnQmIGxhc3RVQVJ1bGUpCkBAIC0xMTc2LDEyICsxMjM4LDEyIEBAIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICB9CiAKICAgICBpbml0RWxl
bWVudChlKTsKKyAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIGRlZmF1bHRQYXJlbnQpOwogICAg
IGlmIChhbGxvd1NoYXJpbmcpIHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0g
bG9jYXRlU2hhcmVkU3R5bGUoKTsKICAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAgICAg
ICAgcmV0dXJuIHNoYXJlZFN0eWxlOwogICAgIH0KLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUs
IGRlZmF1bHRQYXJlbnQpOwogCiAgICAgLy8gQ29tcHV0ZSBvdXIgc3R5bGUgYWxsb3dpbmcgOnZp
c2l0ZWQgdG8gbWF0Y2ggZmlyc3QuCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiB2aXNpdGVkU3R5
bGU7CkBAIC0xMjIzLDYgKzEyODUsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHls
ZVNlbGVjdG9yCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgICAgICBsb2FkRnVsbFNj
cmVlblJ1bGVzSWZOZWVkZWQoZS0+ZG9jdW1lbnQoKSk7CiAjZW5kaWYKKyAgICAgICAgYXNzZXJ0
Tm9TaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZSgpOwogICAgIH0KIAogI2lmIEVOQUJMRShTVkcp
CkBAIC0xMjMzLDYgKzEyOTYsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNl
bGVjdG9yCiAgICAgICAgIENTU1N0eWxlU2hlZXQqIHN2Z1NoZWV0ID0gcGFyc2VVQVNoZWV0KHN2
Z1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihzdmdVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiAg
ICAgICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3ZnU2hlZXQsIHNjcmVlbkV2
YWwoKSk7CiAgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdmdT
aGVldCwgcHJpbnRFdmFsKCkpOworICAgICAgICBhc3NlcnROb1NpYmxpbmdSdWxlc0luRGVmYXVs
dFN0eWxlKCk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTEyNDQsNiArMTMwOCw4IEBAIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICAgICAgQ1NTU3R5bGVTaGVldCog
bWF0aE1MU2hlZXQgPSBwYXJzZVVBU2hlZXQobWF0aG1sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKG1hdGhtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKICAgICAgICAgZGVmYXVsdFN0eWxlLT5h
ZGRSdWxlc0Zyb21TaGVldChtYXRoTUxTaGVldCwgc2NyZWVuRXZhbCgpKTsKICAgICAgICAgZGVm
YXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1hdGhNTFNoZWV0LCBwcmludEV2YWwo
KSk7CisgICAgICAgIC8vIFRoZXJlIGFyZSBzb21lIHNpYmxpbmcgcnVsZXMgaGVyZS4KKyAgICAg
ICAgY29sbGVjdFNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKCk7CiAgICAgfQogI2VuZGlmCiAK
QEAgLTEyNTUsNiArMTMyMSw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2Vs
ZWN0b3IKICAgICAgICAgQ1NTU3R5bGVTaGVldCogd21sU2hlZXQgPSBwYXJzZVVBU2hlZXQod21s
VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHdtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKICAg
ICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCh3bWxTaGVldCwgc2NyZWVuRXZh
bCgpKTsKICAgICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHdtbFNo
ZWV0LCBwcmludEV2YWwoKSk7CisgICAgICAgIGFzc2VydE5vU2libGluZ1J1bGVzSW5EZWZhdWx0
U3R5bGUoKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTI2Niw2ICsxMzMzLDcgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgICAgICBDU1NTdHlsZVNoZWV0KiBt
ZWRpYUNvbnRyb2xzU2hlZXQgPSBwYXJzZVVBU2hlZXQobWVkaWFSdWxlcyk7CiAgICAgICAgIGRl
ZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWVkaWFDb250cm9sc1NoZWV0LCBzY3JlZW5F
dmFsKCkpOwogICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWVk
aWFDb250cm9sc1NoZWV0LCBwcmludEV2YWwoKSk7CisgICAgICAgIGFzc2VydE5vU2libGluZ1J1
bGVzSW5EZWZhdWx0U3R5bGUoKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMjkyMiw2ICsyOTkwLDY2
IEBAIHZvaWQgQ1NTUnVsZVNldDo6YWRkU3R5bGVSdWxlKENTU1N0eWxlUnUKICAgICAgICAgICAg
IGFkZFJ1bGUocnVsZSwgcyk7CiAgICAgfQogfQorICAgIAorc3RhdGljIGlubGluZSBib29sIGlz
U2libGluZ1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBDU1NTZWxlY3Rv
cjo6UmVsYXRpb24gcmVsYXRpb24gPSBzZWxlY3Rvci0+cmVsYXRpb24oKTsKKyAgICBDU1NTZWxl
Y3Rvcjo6UHNldWRvVHlwZSB0eXBlID0gc2VsZWN0b3ItPnBzZXVkb1R5cGUoKTsKKyAgICByZXR1
cm4gcmVsYXRpb24gPT0gQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50CisgICAgICAgIHx8IHJl
bGF0aW9uID09IENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50CisgICAgICAgIHx8IHR5cGUg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VtcHR5CisgICAgICAgIHx8IHR5cGUgPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0ZpcnN0Q2hpbGQKKyAgICAgICAgfHwgdHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRmlyc3RPZlR5cGUKKyAgICAgICAgfHwgdHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFz
dENoaWxkCisgICAgICAgIHx8IHR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RPZlR5cGUK
KyAgICAgICAgfHwgdHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seUNoaWxkCisgICAgICAg
IHx8IHR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlPZlR5cGUKKyAgICAgICAgfHwgdHlw
ZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoQ2hpbGQKKyAgICAgICAgfHwgdHlwZSA9PSBDU1NT
ZWxlY3Rvcjo6UHNldWRvTnRoT2ZUeXBlCisgICAgICAgIHx8IHR5cGUgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb050aExhc3RDaGlsZAorICAgICAgICB8fCB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1
ZG9OdGhMYXN0T2ZUeXBlOworfQorCit2b2lkIENTU1J1bGVTZXQ6OmNvbGxlY3RJZHNBbmRTaWJs
aW5nUnVsZXNGcm9tTGlzdChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRzLCBPd25QdHI8
Q1NTUnVsZVNldD4mIHNpYmxpbmdSdWxlcywgQ1NTUnVsZURhdGFMaXN0KiBydWxlcykKK3sKKyAg
ICBmb3IgKENTU1J1bGVEYXRhKiBkYXRhID0gcnVsZXMtPmZpcnN0KCk7IGRhdGE7IGRhdGEgPSBk
YXRhLT5uZXh0KCkpIHsKKyAgICAgICAgYm9vbCBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IGZhbHNl
OworICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IGRhdGEtPnNlbGVjdG9yKCk7
IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAg
ICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQgJiYgIXNlbGVjdG9y
LT5tX3ZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBpZHMuYWRkKHNlbGVjdG9yLT5t
X3ZhbHVlLmltcGwoKSk7CisgICAgICAgICAgICBpZiAoQ1NTU2VsZWN0b3IqIHNpbXBsZVNlbGVj
dG9yID0gc2VsZWN0b3ItPnNpbXBsZVNlbGVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoIXNpbXBsZVNlbGVjdG9yLT5zaW1wbGVTZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc2ltcGxlU2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkICYmICFzaW1wbGVT
ZWxlY3Rvci0+bV92YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGlkcy5hZGQo
c2ltcGxlU2VsZWN0b3ItPm1fdmFsdWUuaW1wbCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChpc1NpYmxpbmdTZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAgICAgICAgICAgZm91
bmRTaWJsaW5nU2VsZWN0b3IgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZFNp
YmxpbmdTZWxlY3RvcikgeworICAgICAgICAgICAgaWYgKCFzaWJsaW5nUnVsZXMpCisgICAgICAg
ICAgICAgICAgc2libGluZ1J1bGVzID0gYWRvcHRQdHIobmV3IENTU1J1bGVTZXQpOworICAgICAg
ICAgICAgc2libGluZ1J1bGVzLT5hZGRSdWxlKGRhdGEtPnJ1bGUoKSwgZGF0YS0+c2VsZWN0b3Io
KSk7ICAgCisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ1NTUnVsZVNldDo6Y29sbGVjdElk
c0FuZFNpYmxpbmdSdWxlcyhIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRzLCBPd25QdHI8
Q1NTUnVsZVNldD4mIHNpYmxpbmdSdWxlcykKK3sKKyAgICBBdG9tUnVsZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9pZFJ1bGVzLmVuZCgpOworICAgIGZvciAoQXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9pZFJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgY29sbGVjdElk
c0FuZFNpYmxpbmdSdWxlc0Zyb21MaXN0KGlkcywgc2libGluZ1J1bGVzLCBpdC0+c2Vjb25kKTsK
KyAgICBlbmQgPSBtX2NsYXNzUnVsZXMuZW5kKCk7CisgICAgZm9yIChBdG9tUnVsZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX2NsYXNzUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICBjb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzRnJvbUxpc3QoaWRzLCBzaWJsaW5nUnVsZXMsIGl0
LT5zZWNvbmQpOworICAgIGVuZCA9IG1fdGFnUnVsZXMuZW5kKCk7CisgICAgZm9yIChBdG9tUnVs
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RhZ1J1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgY29sbGVjdElkc0FuZFNpYmxpbmdSdWxlc0Zyb21MaXN0KGlkcywgc2libGluZ1J1
bGVzLCBpdC0+c2Vjb25kKTsKKyAgICBlbmQgPSBtX3BzZXVkb1J1bGVzLmVuZCgpOworICAgIGZv
ciAoQXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wc2V1ZG9SdWxlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgIGNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXNGcm9tTGlzdChp
ZHMsIHNpYmxpbmdSdWxlcywgaXQtPnNlY29uZCk7CisgICAgaWYgKG1fdW5pdmVyc2FsUnVsZXMp
CisgICAgICAgIGNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXNGcm9tTGlzdChpZHMsIHNpYmxpbmdS
dWxlcywgbV91bml2ZXJzYWxSdWxlcy5nZXQoKSk7Cit9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIC8vIHRoaXMgaXMgbW9zdGx5IGJvcmluZyBzdHVmZiBvbiBob3cgdG8gYXBw
bHkgYSBjZXJ0YWluIHJ1bGUgdG8gdGhlIHJlbmRlcnN0eWxlLi4uCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDc1MzkwKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDkgKzEwOCwx
MCBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNv
bHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9IE5P
UFNFVURPKTsKICAgICAgICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7Ci0gICAgICAgIEFM
V0FZU19JTkxJTkUgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCkgY29uc3Q7CisgICAg
ICAgIEFMV0FZU19JTkxJTkUgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CisgICAg
ICAgIGJvb2wgbWF0Y2hlc1NpYmxpbmdSdWxlcygpOwogICAgICAgICBOb2RlKiBsb2NhdGVDb3Vz
aW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQgZGVwdGggPSAxKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9kZSopIGNvbnN0OworICAgICAgICBi
b29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChOb2RlKik7CiAKICAgICAgICAgUmVuZGVyU3R5
bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQogCkBAIC0xOTcsNiAr
MTk4LDkgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgT3duUHRyPENTU1J1bGVTZXQ+IG1f
YXV0aG9yU3R5bGU7CiAgICAgICAgIE93blB0cjxDU1NSdWxlU2V0PiBtX3VzZXJTdHlsZTsKKyAg
ICAgICAgCisgICAgICAgIE93blB0cjxDU1NSdWxlU2V0PiBtX3NpYmxpbmdSdWxlczsKKyAgICAg
ICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gbV9pZHNJblJ1bGVzOwogCiAgICAgICAgIGJv
b2wgbV9oYXNVQUFwcGVhcmFuY2U7CiAgICAgICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAJKHJldmlzaW9uIDc1MzkwKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
OSw2ICszNTksOCBAQCBib29sIE5hbWVkTm9kZU1hcDo6bWFwcGVkTWFwc0VxdWl2YWxlbnQoCiAg
ICAgICAgICAgICBBdHRyaWJ1dGUqIG90aGVyQXR0ciA9IG90aGVyTWFwLT5nZXRBdHRyaWJ1dGVJ
dGVtKGF0dHItPm5hbWUoKSk7CiAgICAgICAgICAgICBpZiAoIW90aGVyQXR0ciB8fCBhdHRyLT52
YWx1ZSgpICE9IG90aGVyQXR0ci0+dmFsdWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpZiAoIWF0dHItPmRlY2woKS0+cHJvcGVydGllc0VxdWFsKG90aGVy
QXR0ci0+ZGVjbCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0
aE1MTWF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9N
YXRoTUxNYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDc1MzkwKQorKysgU291cmNlL1dlYkNvcmUv
bWF0aG1sL01hdGhNTE1hdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQs
MTQgQEAgUGFzc1JlZlB0cjxNYXRoTUxNYXRoRWxlbWVudD4gTWF0aE1MTWF0aAogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTWF0aE1MTWF0aEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0K
IAordm9pZCBNYXRoTUxNYXRoRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQoreworICAg
IC8vIFRoZXJlIGFyZSBzaWJsaW5nIHJ1bGVzIGluIHRoZSBNYXRoTUwgZGVmYXVsdCBzdHlsZS4K
KyAgICBkb2N1bWVudCgpLT5zZXRVc2VzU2libGluZ1J1bGVzKHRydWUpOworICAgIAorICAgIE1h
dGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Cit9CisK
IFJlbmRlck9iamVjdCogTWF0aE1MTWF0aEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogewogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5k
ZXJNYXRoTUxNYXRoKHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE1h
dGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE1h
dGhFbGVtZW50LmgJKHJldmlzaW9uIDc1MzkwKQorKysgU291cmNlL1dlYkNvcmUvbWF0aG1sL01h
dGhNTE1hdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBNYXRoTUxNYXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCopOwogCisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3Vt
ZW50KCk7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hKiwgUmVuZGVyU3R5bGUqKTsKIH07CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gNzUzOTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE4MywxMSArMTE4MywxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBjaGlsZHJlbkFmZmVjdGVkQnlC
YWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5BZmZlY3Rl
ZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXM7IH0KICAgICB2b2lkIHNldENoaWxkcmVuQWZmZWN0
ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCkgeyBtX2NoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3
YXJkUG9zaXRpb25hbFJ1bGVzID0gdHJ1ZTsgfQogICAgIGJvb2wgZmlyc3RDaGlsZFN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkU3RhdGU7IH0KLSAgICB2b2lkIHNldEZpcnN0Q2hp
bGRTdGF0ZSgpIHsgbV9maXJzdENoaWxkU3RhdGUgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRGaXJz
dENoaWxkU3RhdGUoKSB7IG1fdW5pcXVlID0gdHJ1ZTsgbV9maXJzdENoaWxkU3RhdGUgPSB0cnVl
OyB9CiAgICAgYm9vbCBsYXN0Q2hpbGRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENoaWxk
U3RhdGU7IH0KLSAgICB2b2lkIHNldExhc3RDaGlsZFN0YXRlKCkgeyBtX2xhc3RDaGlsZFN0YXRl
ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0TGFzdENoaWxkU3RhdGUoKSB7IG1fdW5pcXVlID0gdHJ1
ZTsgbV9sYXN0Q2hpbGRTdGF0ZSA9IHRydWU7IH0KICAgICB1bnNpZ25lZCBjaGlsZEluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9jaGlsZEluZGV4OyB9Ci0gICAgdm9pZCBzZXRDaGlsZEluZGV4KHVu
c2lnbmVkIGluZGV4KSB7IG1fY2hpbGRJbmRleCA9IGluZGV4OyB9CisgICAgdm9pZCBzZXRDaGls
ZEluZGV4KHVuc2lnbmVkIGluZGV4KSB7IG1fdW5pcXVlID0gdHJ1ZTsgbV9jaGlsZEluZGV4ID0g
aW5kZXg7IH0KIAogICAgIGNvbnN0IENvbG9yIHZpc2l0ZWREZXBlbmRlbnRDb2xvcihpbnQgY29s
b3JQcm9wZXJ0eSkgY29uc3Q7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1ODEyKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDEt
MTQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MjM3MAorICAgICAgICBTdHlsZSBzaGFyaW5nIG9wdGltaXphdGlvbiBu
byBsb25nZXIgd29ya3Mgb24gbWFqb3Igd2ViIHNpdGVzCisgICAgICAgIAorICAgICAgICBUaGVz
ZSBhcmUgcHJvZ3Jlc3Npb25zICh3aXRoIG5vIG5vdGljYWJsZSB2aXN1YWwgY2hhbmdlKS4gCisg
ICAgICAgIE1hdGhNTCBjb2RlIHdhcyBpbXByb3Blcmx5IHNoYXJpbmcgc3R5bGUuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvbWF0aG1sL3ByZXNlbnRhdGlvbi9mcmFjdGlvbnMtdmVydGljYWwt
YWxpZ25tZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvbWF0aG1sL3By
ZXNlbnRhdGlvbi9zdWJzdXAtZXhwZWN0ZWQudHh0OgorCiAyMDExLTAxLTEyICBTYXRpc2ggU2Ft
cGF0aCAgPHNhdGlzaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRy
aSBHbGF6a292LgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL21hdGhtbC9wcmVzZW50
YXRpb24vZnJhY3Rpb25zLXZlcnRpY2FsLWFsaWdubWVudC1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL21hdGhtbC9wcmVzZW50YXRpb24vZnJhY3Rp
b25zLXZlcnRpY2FsLWFsaWdubWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDc1MzkwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL21hdGhtbC9wcmVzZW50YXRpb24vZnJhY3Rpb25zLXZl
cnRpY2FsLWFsaWdubWVudC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEzICs4
MywxMyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgxMDYKICAgICAgIFJlbmRlckJsb2NrIHtt
YXRoOm1vfSBhdCAoMCwwKSBzaXplIDl4MTYKICAgICAgICAgUmVuZGVyVGV4dCB7bWF0aDptb30g
YXQgKDAsMCkgc2l6ZSA5eDE2CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggOTog
IisiCi0gICAgUmVuZGVyQmxvY2sge21hdGg6bWZyYWN9IGF0ICgxNjQsMzYpIHNpemUgNzF4NzAK
LSAgICAgIFJlbmRlckJsb2NrIHttYXRoOm1mcmFjfSBhdCAoMCwwKSBzaXplIDUzeDE2CisgICAg
UmVuZGVyQmxvY2sge21hdGg6bWZyYWN9IGF0ICgxNjQsMzYpIHNpemUgNzN4NzAKKyAgICAgIFJl
bmRlckJsb2NrIHttYXRoOm1mcmFjfSBhdCAoMCwwKSBzaXplIDU1eDE2CiAgICAgICAgIFJlbmRl
cklubGluZSB7bWF0aDptaX0gYXQgKDAsMCkgc2l6ZSAxMHgxNgotICAgICAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoMjEsMCkgc2l6ZSAxMHgxNgotICAgICAgICAgICAgdGV4dCBydW4gYXQg
KDIxLDApIHdpZHRoIDEwOiAiQiIKLSAgICAgIFJlbmRlckJsb2NrIHttYXRoOm1mcmFjfSBhdCAo
MCwxNikgc2l6ZSA1M3g1NAotICAgICAgICBSZW5kZXJCbG9jayB7bWF0aDptcm93fSBhdCAoMywy
KSBzaXplIDY1eDUyCisgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgyMiwwKSBzaXpl
IDEweDE2CisgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMjIsMCkgd2lkdGggMTA6ICJCIgorICAg
ICAgUmVuZGVyQmxvY2sge21hdGg6bWZyYWN9IGF0ICgwLDE2KSBzaXplIDU1eDU0CisgICAgICAg
IFJlbmRlckJsb2NrIHttYXRoOm1yb3d9IGF0ICg0LDIpIHNpemUgNjZ4NTIKICAgICAgICAgICBS
ZW5kZXJJbmxpbmUge21hdGg6bWl9IGF0ICgwLDApIHNpemUgMTF4MTYKICAgICAgICAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoMCwxMCkgc2l6ZSAxMXgxNgogICAgICAgICAgICAgICB0ZXh0
IHJ1biBhdCAoMCwxMCkgd2lkdGggMTE6ICJDIgpAQCAtOTcsMTMgKzk3LDEzIEBAIGxheWVyIGF0
ICgwLDApIHNpemUgODAweDEwNgogICAgICAgICAgICAgUmVuZGVyQmxvY2sge21hdGg6bW99IGF0
ICgwLDApIHNpemUgOXgxNgogICAgICAgICAgICAgICBSZW5kZXJUZXh0IHttYXRoOm1vfSBhdCAo
MCwwKSBzaXplIDl4MTYKICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA5
OiAiKyIKLSAgICAgICAgICBSZW5kZXJCbG9jayB7bWF0aDptZnJhY30gYXQgKDIxLDApIHNpemUg
NDR4NTIKLSAgICAgICAgICAgIFJlbmRlckJsb2NrIHttYXRoOm1mcmFjfSBhdCAoMCwwKSBzaXpl
IDM1eDE2CisgICAgICAgICAgUmVuZGVyQmxvY2sge21hdGg6bWZyYWN9IGF0ICgyMSwwKSBzaXpl
IDQ1eDUyCisgICAgICAgICAgICBSZW5kZXJCbG9jayB7bWF0aDptZnJhY30gYXQgKDAsMCkgc2l6
ZSAzNngxNgogICAgICAgICAgICAgICBSZW5kZXJJbmxpbmUge21hdGg6bWl9IGF0ICgwLDApIHNp
emUgMTJ4MTYKLSAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDExLDApIHNp
emUgMTJ4MTYKLSAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgxMSwwKSB3aWR0aCAxMjog
IkQiCi0gICAgICAgICAgICBSZW5kZXJCbG9jayB7bWF0aDptZnJhY30gYXQgKDAsMTYpIHNpemUg
MzV4MzYKLSAgICAgICAgICAgICAgUmVuZGVyQmxvY2sge21hdGg6bXJvd30gYXQgKDMsMikgc2l6
ZSAzOHgzNAorICAgICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMTIsMCkgc2l6
ZSAxMngxNgorICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDEyLDApIHdpZHRoIDEyOiAi
RCIKKyAgICAgICAgICAgIFJlbmRlckJsb2NrIHttYXRoOm1mcmFjfSBhdCAoMCwxNikgc2l6ZSAz
NngzNgorICAgICAgICAgICAgICBSZW5kZXJCbG9jayB7bWF0aDptcm93fSBhdCAoNCwyKSBzaXpl
IDM4eDM0CiAgICAgICAgICAgICAgICAgUmVuZGVySW5saW5lIHttYXRoOm1pfSBhdCAoMCwwKSBz
aXplIDEweDE2CiAgICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMTAp
IHNpemUgMTB4MTYKICAgICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTApIHdpZHRo
IDEwOiAiRSIKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9tYXRobWwvcHJlc2VudGF0
aW9uL3N1YnN1cC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL21hdGhtbC9wcmVzZW50YXRpb24vc3Vic3VwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
NzUzOTApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvbWF0aG1sL3ByZXNlbnRhdGlvbi9z
dWJzdXAtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIGxheWVy
IGF0ICgwLDApIHNpemUgODAweDI1NgogICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
OCkgd2lkdGggOTogIloiCiAgICAgICAgICAgICBSZW5kZXJCbG9jayB7bXN1YnN1cH0gYXQgKDEw
LDApIHNpemUgMzJ4MzIKICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sge21zdWJzdXB9IGF0ICgw
LDApIHNpemUgMTh4MTYKLSAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayB7bXJvd30gYXQgKDEs
Mykgc2l6ZSAxNngxMgorICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrIHttcm93fSBhdCAoMCwz
KSBzaXplIDE2eDEyCiAgICAgICAgICAgICAgICAgICBSZW5kZXJJbmxpbmUge21pfSBhdCAoMCww
KSBzaXplIDV4MTIKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgNXgxMgogICAgICAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDU6ICJrIgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79067</attachid>
            <date>2011-01-15 11:13:55 -0800</date>
            <delta_ts>2011-01-17 13:33:45 -0800</delta_ts>
            <desc>style fixes based on simon&apos;s comments</desc>
            <filename>style-sharing-8.patch</filename>
            <type>text/plain</type>
            <size>27736</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1ODEyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKyAyMDExLTAxLTEzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTIzNzAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg4NTY4MDg+CisgICAgICAgIFN0eWxl
IHNoYXJpbmcgb3B0aW1pemF0aW9uIG5vIGxvbmdlciB3b3JrcyBvbiBtYWpvciB3ZWIgc2l0ZXMK
KyAgICAgICAgCisgICAgICAgIFRoZSBjb2RlIGluIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNo
YXJlZFN0eWxlKCkgdGhhdCB0cmllcyB0byBzaGFyZSBzdHlsZSBpbmZvcm1hdGlvbiBiZXR3ZWVu
IGVsZW1lbnQgaGFzIGJlZW4gZGVmZWF0ZWQgCisgICAgICAgIGJ5IHdpZGVzcHJlYWQgdXNlIG9m
IGNlcnRhaW4gQ1NTIHNlbGVjdG9ycyAoOmZpcnN0LWNoaWxkIHBzZXVkbyBjbGFzcyBhbmQgc2lt
aWxhcikuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRpc2FibGVzCisgICAgICAgIHRoZSBz
aGFyaW5nIG9wdGltaXphdGlvbiBmb3IgdGhlIHdob2xlIHBhZ2UgaWYgb25lIG9mIHRoZXNlIGNv
bnN0cnVjdHMgaXMgc2VlbiBpbiBhbnkgc3R5bGUgc2hlZXQgdXNlZCBieSB0aGUgcGFnZS4gIAor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBnZXRzIHRoZSBzdHlsZSBzaGFyaW5nIGJhY2sg
dG8gMjUtNDAlIHJhbmdlIG9uIG1vc3Qgd2ViIHNpdGVzLgorCisgICAgICAgICogY3NzL0NTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6cHJvcGVydGllc0VxdWFsKToKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTmVlZGVkIHRvIGltcHJvdmUgZXF1YWxpdHkgY2hlY2tpbmcgaW4gTmFtZWROb2RlTWFwOjpt
YXBwZWRNYXBzRXF1aXZhbGVudC4KKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0U2libGluZ1J1bGVzSW5EZWZhdWx0U3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6YXNzZXJ0Tm9TaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHls
ZSk6CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEV4dHJhY3Qgc2libGluZyBydWxlcyBmcm9t
IHRoZSBNYXRoTUwgZGVmYXVsdCBzdHlsZXNoZWV0LiAKKyAgICAgICAgICAgIEFzc2VydCB0aGF0
IG5vIG90aGVyIGRlZmF1bHQgc3R5bGVzaGVldCBoYXMgdGhlbS4KKyAgICAgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoZXNTaWJsaW5nUnVsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjppc1NpYmxpbmdTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NSdWxlU2V0Ojpjb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzRnJvbUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUnVsZVNldDo6Y29sbGVjdElkc0FuZFNpYmxpbmdSdWxlcyk6CisKKyAg
ICAgICAgICAgIFRyYWNrIHNpYmxpbmcgcnVsZXMgYW5kIGlkcyB1c2VkIGluIHRoZSBzdHlsZXNo
ZWV0cyB0byBhbGxvdyBtdWNoIG1vcmUgZmluZS1ncmFpbmVkIHJlamVjdGlvbiBvZiBjYXNlcwor
ICAgICAgICAgICAgd2hlcmUgc3R5bGUgc2hhcmluZyBjYW4ndCBiZSB1c2VkLgorCisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKyAgICAgICAgKiBkb20vTmFtZWROb2RlTWFwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6bWFwcGVkTWFwc0VxdWl2YWxlbnQp
OgorICAgICAgICAgICAgCisgICAgICAgICAgICBDaGVjayBhbHNvIGZvciBDU1NWYWx1ZSBtdXRh
dGlvbiBmcm9tIERPTS4gCisgICAgICAgICAgICAKKyAgICAgICAgKiBtYXRobWwvTWF0aE1MTWF0
aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE1MTWF0aEVsZW1lbnQ6Omluc2Vy
dGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKiBtYXRobWwvTWF0aE1MTWF0aEVsZW1lbnQuaDoK
KyAgICAgICAgCisgICAgICAgICAgICBNYXRoTUwgZGVmYXVsdCBzdHlsZSBzaGVldCBoYXMgc2li
bGluZyBydWxlcyB3aGljaCBkb24ndCBnZXQgbm90aWNlZCBieSB0aGUgbm9ybWFsIGRvY3VtZW50
CisgICAgICAgICAgICBzdHlsZXNoZWV0IHBhcnNpbmcuCisgICAgICAgIAorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVk
RmxhZ3M6OnNldEZpcnN0Q2hpbGRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRG
bGFnczo6c2V0TGFzdENoaWxkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxh
Z3M6OnNldENoaWxkSW5kZXgpOgorICAgICAgICAKKyAgICAgICAgICAgIFRoZXNlIGFsbCBtYWtl
IHN0eWxlIG5vbi1zaGFyZWFibGUgKHVuaXF1ZSkuCisKIDIwMTEtMDEtMTIgIFNhdGlzaCBTYW1w
YXRoICA8c2F0aXNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJp
IEdsYXprb3YuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24uaAkocmV2aXNpb24gNzUzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSw4
IEBAIHB1YmxpYzoKICAgICBib29sIHVzZVN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBt
X3N0cmljdFBhcnNpbmc7IH0KIAogICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlz
dEhhc2hTZXQ8S1VSTD4mKTsKKyAgICAKKyAgICBib29sIHByb3BlcnRpZXNFcXVhbChjb25zdCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogbykgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVz
ID09IG8tPm1fcHJvcGVydGllczsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA3NTc4OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDggKzM5Niw4
IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIENTU1J1bGVEYXRhKiBmaXJzdCgp
IHsgcmV0dXJuIG1fZmlyc3Q7IH0KLSAgICBDU1NSdWxlRGF0YSogbGFzdCgpIHsgcmV0dXJuIG1f
bGFzdDsgfQorICAgIENTU1J1bGVEYXRhKiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3Q7
IH0KKyAgICBDU1NSdWxlRGF0YSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdDsgfQogCiAg
ICAgdm9pZCBhcHBlbmQodW5zaWduZWQgcG9zLCBDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVj
dG9yKiBzZWwpIHsgbV9sYXN0ID0gbmV3IENTU1J1bGVEYXRhKHBvcywgcnVsZSwgc2VsLCBtX2xh
c3QpOyB9CiAKQEAgLTQyMSw2ICs0MjEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRUb1J1bGVT
ZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLAogICAgICAgICAgICAg
ICAgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCk7CiAgICAgCisg
ICAgdm9pZCBjb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzRnJvbUxpc3QoSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj4mIGlkcywgT3duUHRyPENTU1J1bGVTZXQ+JiBzaWJsaW5nUnVsZXMsIGNvbnN0
IENTU1J1bGVEYXRhTGlzdCopIGNvbnN0OworICAgIHZvaWQgY29sbGVjdElkc0FuZFNpYmxpbmdS
dWxlcyhIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRzLCBPd25QdHI8Q1NTUnVsZVNldD4m
IHNpYmxpbmdSdWxlcykgY29uc3Q7CisgICAgCiAgICAgQ1NTUnVsZURhdGFMaXN0KiBnZXRJRFJ1
bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9
CiAgICAgQ1NTUnVsZURhdGFMaXN0KiBnZXRDbGFzc1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtl
eSkgeyByZXR1cm4gbV9jbGFzc1J1bGVzLmdldChrZXkpOyB9CiAgICAgQ1NTUnVsZURhdGFMaXN0
KiBnZXRUYWdSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1fdGFnUnVsZXMu
Z2V0KGtleSk7IH0KQEAgLTQ0NCw2ICs0NDcsOCBAQCBzdGF0aWMgQ1NTUnVsZVNldCogZGVmYXVs
dFF1aXJrc1N0eWxlOwogc3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxlOwogc3Rh
dGljIENTU1J1bGVTZXQqIGRlZmF1bHRWaWV3U291cmNlU3R5bGU7CiBzdGF0aWMgQ1NTU3R5bGVT
aGVldCogc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQ7CisgICAgCitzdGF0aWMgQ1NTUnVsZVNldCog
c2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGU7CiAKIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVj
dG9yOjpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwogCkBAIC00NTUsMTEgKzQ2MCwzMSBAQCBzdGF0
aWMgdm9pZCBsb2FkU2ltcGxlRGVmYXVsdFN0eWxlKCk7CiAvLyBGSVhNRTogSXQgd291bGQgYmUg
bmljZSB0byB1c2Ugc29tZSBtZWNoYW5pc20gdGhhdCBndWFyYW50ZWVzIHRoaXMgaXMgaW4gc3lu
YyB3aXRoIHRoZSByZWFsIFVBIHN0eWxlc2hlZXQuCiBzdGF0aWMgY29uc3QgY2hhciogc2ltcGxl
VXNlckFnZW50U3R5bGVTaGVldCA9ICJodG1sLGJvZHksZGl2e2Rpc3BsYXk6YmxvY2t9Ym9keXtt
YXJnaW46OHB4fWRpdjpmb2N1cyxzcGFuOmZvY3Vze291dGxpbmU6YXV0byA1cHggLXdlYmtpdC1m
b2N1cy1yaW5nLWNvbG9yfWE6LXdlYmtpdC1hbnktbGlua3tjb2xvcjotd2Via2l0LWxpbms7dGV4
dC1kZWNvcmF0aW9uOnVuZGVybGluZX1hOi13ZWJraXQtYW55LWxpbms6YWN0aXZle2NvbG9yOi13
ZWJraXQtYWN0aXZlbGlua30iOwogCi1zdGF0aWMgYm9vbCBlbGVtZW50Q2FuVXNlU2ltcGxlRGVm
YXVsdFN0eWxlKEVsZW1lbnQqIGUpCitzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudENhblVzZVNp
bXBsZURlZmF1bHRTdHlsZShFbGVtZW50KiBlKQogewogICAgIHJldHVybiBlLT5oYXNUYWdOYW1l
KGh0bWxUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYm9keVRhZykgfHwgZS0+aGFzVGFnTmFtZShkaXZU
YWcpIHx8IGUtPmhhc1RhZ05hbWUoc3BhblRhZykgfHwgZS0+aGFzVGFnTmFtZShiclRhZykgfHwg
ZS0+aGFzVGFnTmFtZShhVGFnKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RTaWJs
aW5nUnVsZXNJbkRlZmF1bHRTdHlsZSgpCit7CisgICAgT3duUHRyPENTU1J1bGVTZXQ+IHNpYmxp
bmdSdWxlczsKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBpZHM7CisgICAgZGVmYXVs
dFN0eWxlLT5jb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzKGlkcywgc2libGluZ1J1bGVzKTsKKyAg
ICBBU1NFUlQoaWRzLmlzRW1wdHkoKSk7CisgICAgZGVsZXRlIHNpYmxpbmdSdWxlc0luRGVmYXVs
dFN0eWxlOworICAgIHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlID0gc2libGluZ1J1bGVzLmxl
YWtQdHIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFzc2VydE5vU2libGluZ1J1bGVzSW5E
ZWZhdWx0U3R5bGUoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAoc2libGluZ1J1bGVzSW5E
ZWZhdWx0U3R5bGUpCisgICAgICAgIHJldHVybjsKKyAgICBjb2xsZWN0U2libGluZ1J1bGVzSW5E
ZWZhdWx0U3R5bGUoKTsKKyAgICBBU1NFUlQoIXNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKTsK
KyNlbmRpZgorfQorICAgIAogc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHNjcmVl
bkV2YWwoKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1
YXRvciwgc3RhdGljU2NyZWVuRXZhbCwgKCJzY3JlZW4iKSk7CkBAIC01NDUsNiArNTcwLDE2IEBA
IENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW0KICAgICAgICAgaWYgKHNo
ZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhc2hlZXQtPmRpc2FibGVkKCkpCiAgICAgICAgICAg
ICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0Kj4oc2hlZXQpLCAqbV9tZWRpdW0sIHRoaXMpOwogICAgIH0KKyAgICAKKyAgICAvLyBDb2xs
ZWN0IGFsbCBpZHMgYW5kIHJ1bGVzIHVzaW5nIHNpbGJsaW5nIHNlbGVjdG9ycyAoOmZpcnN0LWNo
aWxkIGFuZCBzaW1pbGFyKQorICAgIC8vIGluIHRoZSBjdXJyZW50IHNldCBvZiBzdHlsZXNoZWV0
cy4gU3R5bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byByZWplY3QKKyAg
ICAvLyBzaGFyaW5nIGNhbmRpZGF0ZXMuCisgICAgLy8gVXN1YWxseSB0aGVyZSBhcmUgbm8gc2li
bGluZyBydWxlcyBpbiB0aGUgZGVmYXVsdCBzdHlsZSBidXQgdGhlIE1hdGhNTCBzaGVldCBoYXMg
c29tZS4KKyAgICBpZiAoc2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUpCisgICAgICAgIHNpYmxp
bmdSdWxlc0luRGVmYXVsdFN0eWxlLT5jb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzKG1faWRzSW5S
dWxlcywgbV9zaWJsaW5nUnVsZXMpOworICAgIG1fYXV0aG9yU3R5bGUtPmNvbGxlY3RJZHNBbmRT
aWJsaW5nUnVsZXMobV9pZHNJblJ1bGVzLCBtX3NpYmxpbmdSdWxlcyk7CisgICAgaWYgKG1fdXNl
clN0eWxlKQorICAgICAgICBtX3VzZXJTdHlsZS0+Y29sbGVjdElkc0FuZFNpYmxpbmdSdWxlcyht
X2lkc0luUnVsZXMsIG1fc2libGluZ1J1bGVzKTsKIAogICAgIGlmIChkb2N1bWVudC0+cmVuZGVy
ZXIoKSAmJiBkb2N1bWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKICAgICAgICAgZG9jdW1lbnQt
PnJlbmRlcmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwpAQCAt
OTQwLDQwICs5NzUsNTIgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVz
aAogCiBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBh
cmVudCwgdW5zaWduZWQgZGVwdGgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQt
PmlzU3R5bGVkRWxlbWVudCgpKSB7Ci0gICAgICAgIFN0eWxlZEVsZW1lbnQqIHAgPSBzdGF0aWNf
Y2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50KTsKLSAgICAgICAgaWYgKCFwLT5pbmxpbmVTdHls
ZURlY2woKSAmJiAhcC0+aGFzSUQoKSkgewotICAgICAgICAgICAgTm9kZSogciA9IHAtPnByZXZp
b3VzU2libGluZygpOwotICAgICAgICAgICAgdW5zaWduZWQgc3ViY291bnQgPSAwOwotICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIHN0ID0gcC0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgIHdo
aWxlIChyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHItPnJlbmRlclN0eWxlKCkgPT0gc3QpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiByLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAg
ICBpZiAoc3ViY291bnQrKyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIHIgPSByLT5wcmV2aW91c1NpYmxpbmco
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghciAmJiBkZXB0aCA8IGNTdHlsZVNl
YXJjaFRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICByID0gbG9jYXRlQ291c2luTGlzdChwYXJl
bnQtPnBhcmVudEVsZW1lbnQoKSwgZGVwdGggKyAxKTsKLSAgICAgICAgICAgIHdoaWxlIChyKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHItPnJlbmRlclN0eWxlKCkgPT0gc3QpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiByLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICBpZiAoc3Vi
Y291bnQrKyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAgICAgICAgIHIgPSByLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzU3R5bGVk
RWxlbWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBTdHlsZWRFbGVtZW50KiBwID0gc3Rh
dGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudCk7CisgICAgaWYgKHAtPmlubGluZVN0eWxl
RGVjbCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAocC0+aGFzSUQoKSAmJiBtX2lkc0lu
UnVsZXMuY29udGFpbnMocC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBOb2RlKiByID0gcC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgdW5z
aWduZWQgc3ViY291bnQgPSAwOworICAgIFJlbmRlclN0eWxlKiBzdCA9IHAtPnJlbmRlclN0eWxl
KCk7CisgICAgd2hpbGUgKHIpIHsKKyAgICAgICAgaWYgKHItPnJlbmRlclN0eWxlKCkgPT0gc3Qp
CisgICAgICAgICAgICByZXR1cm4gci0+bGFzdENoaWxkKCk7CisgICAgICAgIGlmIChzdWJjb3Vu
dCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICByID0gci0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgfQorICAgIGlmICghciAmJiBkZXB0
aCA8IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKKyAgICAgICAgciA9IGxvY2F0ZUNvdXNpbkxpc3Qo
cGFyZW50LT5wYXJlbnRFbGVtZW50KCksIGRlcHRoICsgMSk7CisgICAgd2hpbGUgKHIpIHsKKyAg
ICAgICAgaWYgKHItPnJlbmRlclN0eWxlKCkgPT0gc3QpCisgICAgICAgICAgICByZXR1cm4gci0+
bGFzdENoaWxkKCk7CisgICAgICAgIGlmIChzdWJjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVz
aG9sZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByID0gci0+cHJldmlvdXNTaWJs
aW5nKCk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCitib29sIENTU1N0eWxlU2VsZWN0b3I6
Om1hdGNoZXNTaWJsaW5nUnVsZXMoKQoreworICAgIGludCBmaXJzdFNpYmxpbmdSdWxlID0gLTEs
IGxhc3RTaWJsaW5nUnVsZSA9IC0xOworICAgIG1hdGNoUnVsZXMobV9zaWJsaW5nUnVsZXMuZ2V0
KCksIGZpcnN0U2libGluZ1J1bGUsIGxhc3RTaWJsaW5nUnVsZSwgZmFsc2UpOworICAgIGlmICht
X21hdGNoZWREZWNscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX21h
dGNoZWREZWNscy5jbGVhcigpOworICAgIHJldHVybiB0cnVlOworfQorCiBib29sIENTU1N0eWxl
U2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChOb2RlKiBuKSBjb25zdAogewogICAg
IGlmIChuLT5pc1N0eWxlZEVsZW1lbnQoKSkgewogICAgICAgICBTdHlsZWRFbGVtZW50KiBzID0g
c3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG4pOwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBzLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICBpZiAoc3R5bGUgJiYgIXN0eWxlLT51bmlx
dWUoKSAmJgotICAgICAgICAgICAgKHMtPnRhZ1FOYW1lKCkgPT0gbV9lbGVtZW50LT50YWdRTmFt
ZSgpKSAmJiAhcy0+aGFzSUQoKSAmJgorICAgICAgICAgICAgKHMtPnRhZ1FOYW1lKCkgPT0gbV9l
bGVtZW50LT50YWdRTmFtZSgpKSAmJgogICAgICAgICAgICAgKHMtPmhhc0NsYXNzKCkgPT0gbV9l
bGVtZW50LT5oYXNDbGFzcygpKSAmJiAhcy0+aW5saW5lU3R5bGVEZWNsKCkgJiYKICAgICAgICAg
ICAgIChzLT5oYXNNYXBwZWRBdHRyaWJ1dGVzKCkgPT0gbV9zdHlsZWRFbGVtZW50LT5oYXNNYXBw
ZWRBdHRyaWJ1dGVzKCkpICYmCiAgICAgICAgICAgICAocy0+aXNMaW5rKCkgPT0gbV9lbGVtZW50
LT5pc0xpbmsoKSkgJiYgCkBAIC05ODgsNiArMTAzNSwxMCBAQCBib29sIENTU1N0eWxlU2VsZWN0
b3I6OmNhblNoYXJlU3R5bGVXaXRoCiAgICAgICAgICAgICAocy0+ZmFzdEdldEF0dHJpYnV0ZShs
YW5nQXR0cikgPT0gbV9lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkgJiYKICAg
ICAgICAgICAgIChzLT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikgPT0gbV9lbGVtZW50
LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikpICYmCiAgICAgICAgICAgICAocy0+ZmFz
dEdldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0dHIpID09IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJp
YnV0ZShjZWxscGFkZGluZ0F0dHIpKSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
cy0+aGFzSUQoKSAmJiBtX2lkc0luUnVsZXMuY29udGFpbnMocy0+aWRGb3JTdHlsZVJlc29sdXRp
b24oKS5pbXBsKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgCiAg
ICAgICAgICAgICBib29sIGlzQ29udHJvbCA9IHMtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAg
ICAgICAgICAgICBpZiAoaXNDb250cm9sICE9IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDU4LDMyICsxMTA5LDQ3
IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQotCi1BTFdBWVNfSU5MSU5FIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNl
bGVjdG9yOjpsb2NhdGVTaGFyZWRTdHlsZSgpIGNvbnN0CisgICAgCitpbmxpbmUgTm9kZSogQ1NT
U3R5bGVTZWxlY3Rvcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSogbm9kZSwgdW5z
aWduZWQmIGNvdW50KSBjb25zdAogewotICAgIGlmIChtX3N0eWxlZEVsZW1lbnQgJiYgIW1fc3R5
bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkgJiYgIW1fc3R5bGVkRWxlbWVudC0+aGFzSUQo
KSAmJiAhbV9zdHlsZWRFbGVtZW50LT5kb2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkpIHsK
LSAgICAgICAgLy8gQ2hlY2sgcHJldmlvdXMgc2libGluZ3MuCi0gICAgICAgIHVuc2lnbmVkIGNv
dW50ID0gMDsKLSAgICAgICAgTm9kZSogbjsKLSAgICAgICAgZm9yIChuID0gbV9lbGVtZW50LT5w
cmV2aW91c1NpYmxpbmcoKTsgbiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpOyBuID0gbi0+cHJldmlv
dXNTaWJsaW5nKCkpIHsgfQotICAgICAgICB3aGlsZSAobikgewotICAgICAgICAgICAgaWYgKGNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudChuKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbi0+cmVu
ZGVyU3R5bGUoKTsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KG5v
ZGUpKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGNvdW50KysgPT0g
Y1N0eWxlU2VhcmNoVGhyZXNob2xkKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgZm9yIChuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7IG4gJiYgIW4tPmlzRWxlbWVudE5v
ZGUoKTsgbiA9IG4tPnByZXZpb3VzU2libGluZygpKSB7IH0KICAgICAgICAgfQotICAgICAgICBp
ZiAoIW4pIAotICAgICAgICAgICAgbiA9IGxvY2F0ZUNvdXNpbkxpc3QobV9lbGVtZW50LT5wYXJl
bnRFbGVtZW50KCkpOwotICAgICAgICB3aGlsZSAobikgewotICAgICAgICAgICAgaWYgKGNhblNo
YXJlU3R5bGVXaXRoRWxlbWVudChuKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbi0+cmVuZGVy
U3R5bGUoKTsKLSAgICAgICAgICAgIGlmIChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9s
ZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGZvciAobiA9IG4tPnBy
ZXZpb3VzU2libGluZygpOyBuICYmICFuLT5pc0VsZW1lbnROb2RlKCk7IG4gPSBuLT5wcmV2aW91
c1NpYmxpbmcoKSkgeyB9Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICBub2RlID0gbm9kZS0+
cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBub2Rl
OworfQorCitBTFdBWVNfSU5MSU5FIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2Nh
dGVTaGFyZWRTdHlsZSgpCit7CisgICAgaWYgKCFtX3N0eWxlZEVsZW1lbnQgfHwgIW1fcGFyZW50
U3R5bGUpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBpbmxp
bmUgc3R5bGUgaXQgaXMgcHJvYmFibHkgdW5pcXVlLgorICAgIGlmIChtX3N0eWxlZEVsZW1lbnQt
PmlubGluZVN0eWxlRGVjbCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBJZHMgc3RvcCBz
dHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCisgICAgaWYg
KG1fc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2lkc0luUnVsZXMuY29udGFpbnMobV9zdHls
ZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgIHJldHVy
biAwOworICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzLgorICAgIHVuc2lnbmVkIGNvdW50
ID0gMDsKKyAgICBOb2RlKiBzaGFyZU5vZGUgPSBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyht
X3N0eWxlZEVsZW1lbnQtPnByZXZpb3VzU2libGluZygpLCBjb3VudCk7CisgICAgaWYgKCFzaGFy
ZU5vZGUpIHsKKyAgICAgICAgTm9kZSogY291c2luTGlzdCA9IGxvY2F0ZUNvdXNpbkxpc3QobV9z
dHlsZWRFbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpOworICAgICAgICBzaGFyZU5vZGUgPSBmaW5k
U2libGluZ0ZvclN0eWxlU2hhcmluZyhjb3VzaW5MaXN0LCBjb3VudCk7IAorICAgICAgICBpZiAo
IXNoYXJlTm9kZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvLyBDYW4ndCBz
aGFyZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5LiBUaGlzIGlzIGNoZWNrZWQgYXQgdGhlIGVuZCBh
cyBpdCBzaG91bGQgcmFyZWx5IGZhaWwuCisgICAgaWYgKG1hdGNoZXNTaWJsaW5nUnVsZXMoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMg
dW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxp
bmcgcnVsZSBtYXRjaCBhYm92ZS4KKyAgICBpZiAobV9wYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZl
Y3RlZEJ5UG9zaXRpb25hbFJ1bGVzKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBz
aGFyZU5vZGUtPnJlbmRlclN0eWxlKCk7CiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0
Y2hVQVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFzdFVBUnVsZSkKQEAgLTExNzYsMTIg
KzEyNDIsMTIgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAg
IH0KIAogICAgIGluaXRFbGVtZW50KGUpOworICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgZGVm
YXVsdFBhcmVudCk7CiAgICAgaWYgKGFsbG93U2hhcmluZykgewogICAgICAgICBSZW5kZXJTdHls
ZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOwogICAgICAgICBpZiAoc2hhcmVk
U3R5bGUpCiAgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7CiAgICAgfQotICAgIGluaXRG
b3JTdHlsZVJlc29sdmUoZSwgZGVmYXVsdFBhcmVudCk7CiAKICAgICAvLyBDb21wdXRlIG91ciBz
dHlsZSBhbGxvd2luZyA6dmlzaXRlZCB0byBtYXRjaCBmaXJzdC4KICAgICBSZWZQdHI8UmVuZGVy
U3R5bGU+IHZpc2l0ZWRTdHlsZTsKQEAgLTEyMjMsNiArMTI4OSw3IEBAIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAg
ICAgICAgIGxvYWRGdWxsU2NyZWVuUnVsZXNJZk5lZWRlZChlLT5kb2N1bWVudCgpKTsKICNlbmRp
ZgorICAgICAgICBhc3NlcnROb1NpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKCk7CiAgICAgfQog
CiAjaWYgRU5BQkxFKFNWRykKQEAgLTEyMzMsNiArMTMwMCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICAgICAgQ1NTU3R5bGVTaGVldCogc3ZnU2hlZXQg
PSBwYXJzZVVBU2hlZXQoc3ZnVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHN2Z1VzZXJBZ2Vu
dFN0eWxlU2hlZXQpKTsKICAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChz
dmdTaGVldCwgc2NyZWVuRXZhbCgpKTsKICAgICAgICAgZGVmYXVsdFByaW50U3R5bGUtPmFkZFJ1
bGVzRnJvbVNoZWV0KHN2Z1NoZWV0LCBwcmludEV2YWwoKSk7CisgICAgICAgIGFzc2VydE5vU2li
bGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUoKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTI0NCw2ICsx
MzEyLDggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgICAg
ICBDU1NTdHlsZVNoZWV0KiBtYXRoTUxTaGVldCA9IHBhcnNlVUFTaGVldChtYXRobWxVc2VyQWdl
bnRTdHlsZVNoZWV0LCBzaXplb2YobWF0aG1sVXNlckFnZW50U3R5bGVTaGVldCkpOwogICAgICAg
ICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KG1hdGhNTFNoZWV0LCBzY3JlZW5FdmFs
KCkpOwogICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWF0aE1M
U2hlZXQsIHByaW50RXZhbCgpKTsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgc2libGluZyBy
dWxlcyBoZXJlLgorICAgICAgICBjb2xsZWN0U2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUoKTsK
ICAgICB9CiAjZW5kaWYKIApAQCAtMTI1NSw2ICsxMzI1LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgICAgICBDU1NTdHlsZVNoZWV0KiB3bWxTaGVldCA9
IHBhcnNlVUFTaGVldCh3bWxVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yod21sVXNlckFnZW50
U3R5bGVTaGVldCkpOwogICAgICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHdt
bFNoZWV0LCBzY3JlZW5FdmFsKCkpOwogICAgICAgICBkZWZhdWx0UHJpbnRTdHlsZS0+YWRkUnVs
ZXNGcm9tU2hlZXQod21sU2hlZXQsIHByaW50RXZhbCgpKTsKKyAgICAgICAgYXNzZXJ0Tm9TaWJs
aW5nUnVsZXNJbkRlZmF1bHRTdHlsZSgpOwogICAgIH0KICNlbmRpZgogCkBAIC0xMjY2LDYgKzEz
MzcsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgICAg
IENTU1N0eWxlU2hlZXQqIG1lZGlhQ29udHJvbHNTaGVldCA9IHBhcnNlVUFTaGVldChtZWRpYVJ1
bGVzKTsKICAgICAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtZWRpYUNvbnRy
b2xzU2hlZXQsIHNjcmVlbkV2YWwoKSk7CiAgICAgICAgIGRlZmF1bHRQcmludFN0eWxlLT5hZGRS
dWxlc0Zyb21TaGVldChtZWRpYUNvbnRyb2xzU2hlZXQsIHByaW50RXZhbCgpKTsKKyAgICAgICAg
YXNzZXJ0Tm9TaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZSgpOwogICAgIH0KICNlbmRpZgogCkBA
IC0yOTIyLDYgKzI5OTQsNjYgQEAgdm9pZCBDU1NSdWxlU2V0OjphZGRTdHlsZVJ1bGUoQ1NTU3R5
bGVSdQogICAgICAgICAgICAgYWRkUnVsZShydWxlLCBzKTsKICAgICB9CiB9CisgICAgCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNTaWJsaW5nU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQor
eworICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9IHNlbGVjdG9yLT5yZWxhdGlv
bigpOworICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHR5cGUgPSBzZWxlY3Rvci0+cHNldWRv
VHlwZSgpOworICAgIHJldHVybiByZWxhdGlvbiA9PSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNl
bnQKKyAgICAgICAgfHwgcmVsYXRpb24gPT0gQ1NTU2VsZWN0b3I6OkluZGlyZWN0QWRqYWNlbnQK
KyAgICAgICAgfHwgdHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRW1wdHkKKyAgICAgICAgfHwg
dHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RDaGlsZAorICAgICAgICB8fCB0eXBlID09
IENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZQorICAgICAgICB8fCB0eXBlID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9MYXN0Q2hpbGQKKyAgICAgICAgfHwgdHlwZSA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvTGFzdE9mVHlwZQorICAgICAgICB8fCB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9P
bmx5Q2hpbGQKKyAgICAgICAgfHwgdHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seU9mVHlw
ZQorICAgICAgICB8fCB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhDaGlsZAorICAgICAg
ICB8fCB0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhPZlR5cGUKKyAgICAgICAgfHwgdHlw
ZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFzdENoaWxkCisgICAgICAgIHx8IHR5cGUgPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RPZlR5cGU7Cit9CisKK3ZvaWQgQ1NTUnVsZVNldDo6
Y29sbGVjdElkc0FuZFNpYmxpbmdSdWxlc0Zyb21MaXN0KEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+JiBpZHMsIE93blB0cjxDU1NSdWxlU2V0PiYgc2libGluZ1J1bGVzLCBjb25zdCBDU1NSdWxl
RGF0YUxpc3QqIHJ1bGVzKSBjb25zdAoreworICAgIGZvciAoQ1NTUnVsZURhdGEqIGRhdGEgPSBy
dWxlcy0+Zmlyc3QoKTsgZGF0YTsgZGF0YSA9IGRhdGEtPm5leHQoKSkgeworICAgICAgICBib29s
IGZvdW5kU2libGluZ1NlbGVjdG9yID0gZmFsc2U7CisgICAgICAgIGZvciAoQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yID0gZGF0YS0+c2VsZWN0b3IoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0
b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpJZCAmJiAhc2VsZWN0b3ItPm1fdmFsdWUuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgIGlkcy5hZGQoc2VsZWN0b3ItPm1fdmFsdWUuaW1wbCgpKTsKKyAgICAgICAgICAg
IGlmIChDU1NTZWxlY3Rvciogc2ltcGxlU2VsZWN0b3IgPSBzZWxlY3Rvci0+c2ltcGxlU2VsZWN0
b3IoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghc2ltcGxlU2VsZWN0b3ItPnNpbXBsZVNl
bGVjdG9yKCkpOworICAgICAgICAgICAgICAgIGlmIChzaW1wbGVTZWxlY3Rvci0+bV9tYXRjaCA9
PSBDU1NTZWxlY3Rvcjo6SWQgJiYgIXNpbXBsZVNlbGVjdG9yLT5tX3ZhbHVlLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICAgICAgaWRzLmFkZChzaW1wbGVTZWxlY3Rvci0+bV92YWx1ZS5pbXBs
KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzU2libGluZ1NlbGVjdG9yKHNl
bGVjdG9yKSkKKyAgICAgICAgICAgICAgICBmb3VuZFNpYmxpbmdTZWxlY3RvciA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGZvdW5kU2libGluZ1NlbGVjdG9yKSB7CisgICAgICAgICAg
ICBpZiAoIXNpYmxpbmdSdWxlcykKKyAgICAgICAgICAgICAgICBzaWJsaW5nUnVsZXMgPSBhZG9w
dFB0cihuZXcgQ1NTUnVsZVNldCk7CisgICAgICAgICAgICBzaWJsaW5nUnVsZXMtPmFkZFJ1bGUo
ZGF0YS0+cnVsZSgpLCBkYXRhLT5zZWxlY3RvcigpKTsgICAKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBDU1NSdWxlU2V0Ojpjb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzKEhhc2hTZXQ8QXRv
bWljU3RyaW5nSW1wbCo+JiBpZHMsIE93blB0cjxDU1NSdWxlU2V0PiYgc2libGluZ1J1bGVzKSBj
b25zdAoreworICAgIEF0b21SdWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2lkUnVsZXMu
ZW5kKCk7CisgICAgZm9yIChBdG9tUnVsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2lkUnVs
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBjb2xsZWN0SWRzQW5kU2libGlu
Z1J1bGVzRnJvbUxpc3QoaWRzLCBzaWJsaW5nUnVsZXMsIGl0LT5zZWNvbmQpOworICAgIGVuZCA9
IG1fY2xhc3NSdWxlcy5lbmQoKTsKKyAgICBmb3IgKEF0b21SdWxlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fY2xhc3NSdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGNv
bGxlY3RJZHNBbmRTaWJsaW5nUnVsZXNGcm9tTGlzdChpZHMsIHNpYmxpbmdSdWxlcywgaXQtPnNl
Y29uZCk7CisgICAgZW5kID0gbV90YWdSdWxlcy5lbmQoKTsKKyAgICBmb3IgKEF0b21SdWxlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGFnUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICBjb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzRnJvbUxpc3QoaWRzLCBzaWJsaW5n
UnVsZXMsIGl0LT5zZWNvbmQpOworICAgIGVuZCA9IG1fcHNldWRvUnVsZXMuZW5kKCk7CisgICAg
Zm9yIChBdG9tUnVsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BzZXVkb1J1bGVzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgY29sbGVjdElkc0FuZFNpYmxpbmdSdWxlc0Zy
b21MaXN0KGlkcywgc2libGluZ1J1bGVzLCBpdC0+c2Vjb25kKTsKKyAgICBpZiAobV91bml2ZXJz
YWxSdWxlcykKKyAgICAgICAgY29sbGVjdElkc0FuZFNpYmxpbmdSdWxlc0Zyb21MaXN0KGlkcywg
c2libGluZ1J1bGVzLCBtX3VuaXZlcnNhbFJ1bGVzLmdldCgpKTsKK30KIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gdGhpcyBpcyBtb3N0bHkgYm9yaW5nIHN0dWZmIG9uIGhv
dyB0byBhcHBseSBhIGNlcnRhaW4gcnVsZSB0byB0aGUgcmVuZGVyc3R5bGUuLi4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gNzUzOTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgs
OCArMTA4LDEwIEBAIHB1YmxpYzoKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGluaXRGb3JT
dHlsZVJlc29sdmUoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVk
b0lkID0gTk9QU0VVRE8pOwogICAgICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKLSAg
ICAgICAgQUxXQVlTX0lOTElORSBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKSBjb25z
dDsKKyAgICAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CisgICAgICAgIGJv
b2wgbWF0Y2hlc1NpYmxpbmdSdWxlcygpOwogICAgICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0
KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQgZGVwdGggPSAxKSBjb25zdDsKKyAgICAgICAgTm9k
ZSogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSogbm9kZSwgdW5zaWduZWQmIGNvdW50
KSBjb25zdDsKICAgICAgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9kZSopIGNv
bnN0OwogCiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGUuZ2V0KCk7IH0KQEAgLTE5Nyw2ICsxOTksOSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAg
ICBPd25QdHI8Q1NTUnVsZVNldD4gbV9hdXRob3JTdHlsZTsKICAgICAgICAgT3duUHRyPENTU1J1
bGVTZXQ+IG1fdXNlclN0eWxlOworICAgICAgICAKKyAgICAgICAgT3duUHRyPENTU1J1bGVTZXQ+
IG1fc2libGluZ1J1bGVzOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBtX2lk
c0luUnVsZXM7CiAKICAgICAgICAgYm9vbCBtX2hhc1VBQXBwZWFyYW5jZTsKICAgICAgICAgQm9y
ZGVyRGF0YSBtX2JvcmRlckRhdGE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2Rl
TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNw
cAkocmV2aXNpb24gNzUzOTApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDYgKzM1OSw4IEBAIGJvb2wgTmFtZWROb2RlTWFwOjpt
YXBwZWRNYXBzRXF1aXZhbGVudCgKICAgICAgICAgICAgIEF0dHJpYnV0ZSogb3RoZXJBdHRyID0g
b3RoZXJNYXAtPmdldEF0dHJpYnV0ZUl0ZW0oYXR0ci0+bmFtZSgpKTsKICAgICAgICAgICAgIGlm
ICghb3RoZXJBdHRyIHx8IGF0dHItPnZhbHVlKCkgIT0gb3RoZXJBdHRyLT52YWx1ZSgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghYXR0ci0+ZGVjbCgp
LT5wcm9wZXJ0aWVzRXF1YWwob3RoZXJBdHRyLT5kZWNsKCkpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxNYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE1hdGhFbGVtZW50LmNwcAkocmV2aXNpb24gNzUz
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MTWF0aEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxNCBAQCBQYXNzUmVmUHRyPE1hdGhNTE1hdGhFbGVtZW50
PiBNYXRoTUxNYXRoCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNYXRoTUxNYXRoRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCit2b2lkIE1hdGhNTE1hdGhFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCgpCit7CisgICAgLy8gVGhlcmUgYXJlIHNpYmxpbmcgcnVsZXMgaW4gdGhl
IE1hdGhNTCBkZWZhdWx0IHN0eWxlLgorICAgIGRvY3VtZW50KCktPnNldFVzZXNTaWJsaW5nUnVs
ZXModHJ1ZSk7CisgICAgCisgICAgTWF0aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKTsKK30KKwogUmVuZGVyT2JqZWN0KiBNYXRoTUxNYXRoRWxlbWVudDo6
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7CiAgICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlck1hdGhNTE1hdGgodGhpcyk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvTWF0aE1MTWF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvTWF0aE1MTWF0aEVsZW1lbnQuaAkocmV2aXNpb24gNzUzOTApCisrKyBT
b3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MTWF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNiArMzksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIE1hdGhNTE1hdGhFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CiAKKyAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCog
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogfTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZp
c2lvbiA3NTM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgzLDExICsxMTgzLDExIEBAIHB1YmxpYzoKICAgICBi
b29sIGNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlczsgfQogICAg
IHZvaWQgc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKSB7IG1f
Y2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMgPSB0cnVlOyB9CiAgICAg
Ym9vbCBmaXJzdENoaWxkU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGRTdGF0ZTsg
fQotICAgIHZvaWQgc2V0Rmlyc3RDaGlsZFN0YXRlKCkgeyBtX2ZpcnN0Q2hpbGRTdGF0ZSA9IHRy
dWU7IH0KKyAgICB2b2lkIHNldEZpcnN0Q2hpbGRTdGF0ZSgpIHsgbV91bmlxdWUgPSB0cnVlOyBt
X2ZpcnN0Q2hpbGRTdGF0ZSA9IHRydWU7IH0KICAgICBib29sIGxhc3RDaGlsZFN0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0Q2hpbGRTdGF0ZTsgfQotICAgIHZvaWQgc2V0TGFzdENoaWxkU3Rh
dGUoKSB7IG1fbGFzdENoaWxkU3RhdGUgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRMYXN0Q2hpbGRT
dGF0ZSgpIHsgbV91bmlxdWUgPSB0cnVlOyBtX2xhc3RDaGlsZFN0YXRlID0gdHJ1ZTsgfQogICAg
IHVuc2lnbmVkIGNoaWxkSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkSW5kZXg7IH0KLSAg
ICB2b2lkIHNldENoaWxkSW5kZXgodW5zaWduZWQgaW5kZXgpIHsgbV9jaGlsZEluZGV4ID0gaW5k
ZXg7IH0KKyAgICB2b2lkIHNldENoaWxkSW5kZXgodW5zaWduZWQgaW5kZXgpIHsgbV91bmlxdWUg
PSB0cnVlOyBtX2NoaWxkSW5kZXggPSBpbmRleDsgfQogCiAgICAgY29uc3QgQ29sb3IgdmlzaXRl
ZERlcGVuZGVudENvbG9yKGludCBjb2xvclByb3BlcnR5KSBjb25zdDsKIApJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gNzU4MTIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNiBAQAorMjAxMS0wMS0xNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMzcwCisgICAgICAgIFN0eWxl
IHNoYXJpbmcgb3B0aW1pemF0aW9uIG5vIGxvbmdlciB3b3JrcyBvbiBtYWpvciB3ZWIgc2l0ZXMK
KyAgICAgICAgCisgICAgICAgIFRoZXNlIGFyZSBwcm9ncmVzc2lvbnMgKHdpdGggbm8gbm90aWNh
YmxlIHZpc3VhbCBjaGFuZ2UpLiAKKyAgICAgICAgTWF0aE1MIGNvZGUgd2FzIGltcHJvcGVybHkg
c2hhcmluZyBzdHlsZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9tYXRobWwvcHJlc2VudGF0
aW9uL2ZyYWN0aW9ucy12ZXJ0aWNhbC1hbGlnbm1lbnQtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9tYXRobWwvcHJlc2VudGF0aW9uL3N1YnN1cC1leHBlY3RlZC50eHQ6CisK
IDIwMTEtMDEtMTIgIFNhdGlzaCBTYW1wYXRoICA8c2F0aXNoQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvbWF0aG1sL3ByZXNlbnRhdGlvbi9mcmFjdGlvbnMtdmVydGljYWwtYWxpZ25tZW50
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvbWF0
aG1sL3ByZXNlbnRhdGlvbi9mcmFjdGlvbnMtdmVydGljYWwtYWxpZ25tZW50LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNzUzOTApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvbWF0aG1sL3By
ZXNlbnRhdGlvbi9mcmFjdGlvbnMtdmVydGljYWwtYWxpZ25tZW50LWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtODMsMTMgKzgzLDEzIEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDEw
NgogICAgICAgUmVuZGVyQmxvY2sge21hdGg6bW99IGF0ICgwLDApIHNpemUgOXgxNgogICAgICAg
ICBSZW5kZXJUZXh0IHttYXRoOm1vfSBhdCAoMCwwKSBzaXplIDl4MTYKICAgICAgICAgICB0ZXh0
IHJ1biBhdCAoMCwwKSB3aWR0aCA5OiAiKyIKLSAgICBSZW5kZXJCbG9jayB7bWF0aDptZnJhY30g
YXQgKDE2NCwzNikgc2l6ZSA3MXg3MAotICAgICAgUmVuZGVyQmxvY2sge21hdGg6bWZyYWN9IGF0
ICgwLDApIHNpemUgNTN4MTYKKyAgICBSZW5kZXJCbG9jayB7bWF0aDptZnJhY30gYXQgKDE2NCwz
Nikgc2l6ZSA3M3g3MAorICAgICAgUmVuZGVyQmxvY2sge21hdGg6bWZyYWN9IGF0ICgwLDApIHNp
emUgNTV4MTYKICAgICAgICAgUmVuZGVySW5saW5lIHttYXRoOm1pfSBhdCAoMCwwKSBzaXplIDEw
eDE2Ci0gICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgyMSwwKSBzaXplIDEweDE2Ci0g
ICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMjEsMCkgd2lkdGggMTA6ICJCIgotICAgICAgUmVuZGVy
QmxvY2sge21hdGg6bWZyYWN9IGF0ICgwLDE2KSBzaXplIDUzeDU0Ci0gICAgICAgIFJlbmRlckJs
b2NrIHttYXRoOm1yb3d9IGF0ICgzLDIpIHNpemUgNjV4NTIKKyAgICAgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDIyLDApIHNpemUgMTB4MTYKKyAgICAgICAgICAgIHRleHQgcnVuIGF0ICgy
MiwwKSB3aWR0aCAxMDogIkIiCisgICAgICBSZW5kZXJCbG9jayB7bWF0aDptZnJhY30gYXQgKDAs
MTYpIHNpemUgNTV4NTQKKyAgICAgICAgUmVuZGVyQmxvY2sge21hdGg6bXJvd30gYXQgKDQsMikg
c2l6ZSA2Nng1MgogICAgICAgICAgIFJlbmRlcklubGluZSB7bWF0aDptaX0gYXQgKDAsMCkgc2l6
ZSAxMXgxNgogICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDEwKSBzaXplIDEx
eDE2CiAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDEwKSB3aWR0aCAxMTogIkMiCkBAIC05
NywxMyArOTcsMTMgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4MTA2CiAgICAgICAgICAgICBS
ZW5kZXJCbG9jayB7bWF0aDptb30gYXQgKDAsMCkgc2l6ZSA5eDE2CiAgICAgICAgICAgICAgIFJl
bmRlclRleHQge21hdGg6bW99IGF0ICgwLDApIHNpemUgOXgxNgogICAgICAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICgwLDApIHdpZHRoIDk6ICIrIgotICAgICAgICAgIFJlbmRlckJsb2NrIHttYXRo
Om1mcmFjfSBhdCAoMjEsMCkgc2l6ZSA0NHg1MgotICAgICAgICAgICAgUmVuZGVyQmxvY2sge21h
dGg6bWZyYWN9IGF0ICgwLDApIHNpemUgMzV4MTYKKyAgICAgICAgICBSZW5kZXJCbG9jayB7bWF0
aDptZnJhY30gYXQgKDIxLDApIHNpemUgNDV4NTIKKyAgICAgICAgICAgIFJlbmRlckJsb2NrIHtt
YXRoOm1mcmFjfSBhdCAoMCwwKSBzaXplIDM2eDE2CiAgICAgICAgICAgICAgIFJlbmRlcklubGlu
ZSB7bWF0aDptaX0gYXQgKDAsMCkgc2l6ZSAxMngxNgotICAgICAgICAgICAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoMTEsMCkgc2l6ZSAxMngxNgotICAgICAgICAgICAgICAgICAgdGV4dCBy
dW4gYXQgKDExLDApIHdpZHRoIDEyOiAiRCIKLSAgICAgICAgICAgIFJlbmRlckJsb2NrIHttYXRo
Om1mcmFjfSBhdCAoMCwxNikgc2l6ZSAzNXgzNgotICAgICAgICAgICAgICBSZW5kZXJCbG9jayB7
bWF0aDptcm93fSBhdCAoMywyKSBzaXplIDM4eDM0CisgICAgICAgICAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgxMiwwKSBzaXplIDEyeDE2CisgICAgICAgICAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMTIsMCkgd2lkdGggMTI6ICJEIgorICAgICAgICAgICAgUmVuZGVyQmxvY2sge21hdGg6
bWZyYWN9IGF0ICgwLDE2KSBzaXplIDM2eDM2CisgICAgICAgICAgICAgIFJlbmRlckJsb2NrIHtt
YXRoOm1yb3d9IGF0ICg0LDIpIHNpemUgMzh4MzQKICAgICAgICAgICAgICAgICBSZW5kZXJJbmxp
bmUge21hdGg6bWl9IGF0ICgwLDApIHNpemUgMTB4MTYKICAgICAgICAgICAgICAgICAgIFJlbmRl
clRleHQgeyN0ZXh0fSBhdCAoMCwxMCkgc2l6ZSAxMHgxNgogICAgICAgICAgICAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwxMCkgd2lkdGggMTA6ICJFIgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL21hdGhtbC9wcmVzZW50YXRpb24vc3Vic3VwLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvbWF0aG1sL3ByZXNlbnRhdGlvbi9zdWJzdXAt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3NTM5MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9tYXRobWwvcHJlc2VudGF0aW9uL3N1YnN1cC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTk0LDcgKzk0LDcgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4MjU2CiAgICAgICAgICAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMCw4KSB3aWR0aCA5OiAiWiIKICAgICAgICAgICAgIFJlbmRl
ckJsb2NrIHttc3Vic3VwfSBhdCAoMTAsMCkgc2l6ZSAzMngzMgogICAgICAgICAgICAgICBSZW5k
ZXJCbG9jayB7bXN1YnN1cH0gYXQgKDAsMCkgc2l6ZSAxOHgxNgotICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrIHttcm93fSBhdCAoMSwzKSBzaXplIDE2eDEyCisgICAgICAgICAgICAgICAgUmVu
ZGVyQmxvY2sge21yb3d9IGF0ICgwLDMpIHNpemUgMTZ4MTIKICAgICAgICAgICAgICAgICAgIFJl
bmRlcklubGluZSB7bWl9IGF0ICgwLDApIHNpemUgNXgxMgogICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA1eDEyCiAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTogImsiCg==
</data>
<flag name="review"
          id="70454"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>