<?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>77525</bug_id>
          
          <creation_ts>2012-02-01 01:32:07 -0800</creation_ts>
          <short_desc>SelectorChecker::checkSelector: move parameters into a struct</short_desc>
          <delta_ts>2012-02-09 04:11:01 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73192</blocked>
    
    <blocked>77527</blocked>
    
    <blocked>77528</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Roland Steiner">rolandsteiner</reporter>
          <assigned_to name="Roland Steiner">rolandsteiner</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>546894</commentid>
    <comment_count>0</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-02-01 01:32:07 -0800</bug_when>
    <thetext>The signature of SelectorChecker::checkSelector is getting bloaty - move the parameters into a struct</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548551</commentid>
    <comment_count>1</comment_count>
      <attachid>125283</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-02-03 01:04:46 -0800</bug_when>
    <thetext>Created attachment 125283
Patch

Patch comments: Passing the struct SelectorCheckingContext by value in checkSelector: this corresponds to the previous parameter-passing and the internals are also modified rather heavily. In comparison, I pass them by const reference to checkOneSelector, because only :not and :-webkit-any need to modify anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548552</commentid>
    <comment_count>2</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-02-03 01:06:49 -0800</bug_when>
    <thetext>Addendum: I&apos;m also using references in checkOneSelector to avoid replacing &apos;e&apos; and &apos;sel&apos; with the much longer &apos;context.m_element&apos; and &apos;context.m_selector&apos; everywhere. Not sure if that&apos;s groovy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548571</commentid>
    <comment_count>3</comment_count>
      <attachid>125283</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 01:32:03 -0800</bug_when>
    <thetext>Comment on attachment 125283
Patch

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

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2057
&gt; +    SelectorChecker::SelectorCheckingContext context = {
&gt; +        ruleData.selector(), // m_selector
&gt; +        m_element, // m_element
&gt; +        false, // m_isSubSelector
&gt; +        SelectorChecker::VisitedMatchEnabled, // m_visitedMatchType
&gt; +        style(), // m_elementStyle
&gt; +        m_parentNode ? m_parentNode-&gt;renderStyle() : 0 // m_elementParentStyle
&gt; +    };

You should initialize using dot notation so yo don&apos;t need these comments
context.foo = bar;

SelectorCheckingContext should have constructor that initializes the mandatory stuff (selector and element at least) and sets the rest to defaults.

Drop the m_ prefixes from the field names (those are not used with public structs).

&gt; Source/WebCore/css/SelectorChecker.cpp:454
&gt; +SelectorChecker::SelectorMatch SelectorChecker::checkSelector(SelectorCheckingContext context, PseudoId&amp; dynamicPseudo) const

This should use const SelectorCheckingContext&amp;. To modify the context you should make a copy explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548574</commentid>
    <comment_count>4</comment_count>
      <attachid>125283</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 01:34:33 -0800</bug_when>
    <thetext>Comment on attachment 125283
Patch

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

&gt; Source/WebCore/css/SelectorChecker.cpp:1004
&gt; +                SelectorChecker::SelectorCheckingContext subContext = {

SelectorChecker:: scope is implied, you don&apos;t need to use it explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549833</commentid>
    <comment_count>5</comment_count>
      <attachid>125595</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-02-06 01:31:11 -0800</bug_when>
    <thetext>Created attachment 125595
Patch

New patch, using const references as discussed. Also added a constructor to SelectorCheckingCOntext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549866</commentid>
    <comment_count>6</comment_count>
      <attachid>125595</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-06 02:44:09 -0800</bug_when>
    <thetext>Comment on attachment 125595
Patch

Attachment 125595 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11430332

New failing tests:
scrollbars/disabled-scrollbar.html
scrollbars/scrollbar-orientation.html
scrollbars/scrollbar-buttons.html
scrollbars/overflow-scrollbar-combinations.html
scrollbars/listbox-scrollbar-combinations.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551781</commentid>
    <comment_count>7</comment_count>
      <attachid>125595</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-07 21:45:31 -0800</bug_when>
    <thetext>Comment on attachment 125595
Patch

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

looks pretty ok now

&gt; Source/WebCore/css/SelectorChecker.cpp:507
&gt; +        historyContext.element = context.element-&gt;previousElementSibling();
&gt; +        if (!historyContext.element)
&gt; +            return SelectorFailsAllSiblings;
&gt; +        historyContext.setCompoundSelector();

This still somehow seems bit messy.

&gt; Source/WebCore/css/SelectorChecker.h:56
&gt; +        SelectorCheckingContext(CSSSelector* selector, Element* element, bool isSubSelector, VisitedMatchType visitedMatchType, RenderStyle* elementStyle, RenderStyle* elementParentStyle)

You are never setting isSubSelector to any other value than false so the parameter can be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551820</commentid>
    <comment_count>8</comment_count>
      <attachid>126011</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-02-07 22:52:49 -0800</bug_when>
    <thetext>Created attachment 126011
Patch

New patch, removed isSubSelector parameter to constructor, removed setCompoundSelector &amp; replaced with sub-selector and compound selector &apos;copy&apos; constructors. Note: the compound selector constructor ignores the old context for now, however, the signature will come in handy when being extended for &lt;style scoped&gt;. Also updated variable names &apos;e&apos;-&gt;&apos;element&apos; and &apos;sel&apos;-&gt;&apos;selector&apos; in checkOneSelector() as requested. The only real changes in this function concern pseudoAny and pseudoNot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552724</commentid>
    <comment_count>9</comment_count>
      <attachid>126213</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-02-08 18:15:50 -0800</bug_when>
    <thetext>Created attachment 126213
Patch

Patch, small readability update. Also poke EWS bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552821</commentid>
    <comment_count>10</comment_count>
      <attachid>126213</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-08 21:00:27 -0800</bug_when>
    <thetext>Comment on attachment 126213
Patch

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

r=me, a few comments to consider

&gt; Source/WebCore/css/SelectorChecker.cpp:697
&gt; +    Element* const &amp; element = context.element;
&gt; +    CSSSelector* const &amp; selector = context.selector;

I think our coding style would have const&amp; here (without space). Not entirely sure...

&gt; Source/WebCore/css/SelectorChecker.h:77
&gt; +
&gt; +        inline SelectorCheckingContext createSubContext(CSSSelector* subSelector) const
&gt; +        {
&gt; +            return SelectorCheckingContext(subSelector, element, visitedMatchType, elementStyle, elementParentStyle, true);
&gt; +        }
&gt; +        inline SelectorCheckingContext createSubContext(CSSSelector* subSelector, VisitedMatchType newMatchType) const
&gt; +        {
&gt; +            return SelectorCheckingContext(subSelector, element, newMatchType, elementStyle, elementParentStyle, true);
&gt; +        }
&gt; +        inline SelectorCheckingContext createCompoundContext(CSSSelector* compoundSelector, Element* newElement, VisitedMatchType newMatchType) const
&gt; +        {
&gt; +            return SelectorCheckingContext(compoundSelector, newElement, newMatchType);
&gt; +        }

inline keywords here do nothing and should be removed.

I feel that while these functions make the code more compact they also make it somewhat more magical. A better pattern would be to just make a copy and explicitly set the fields that you are altering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552853</commentid>
    <comment_count>11</comment_count>
      <attachid>126239</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-02-08 22:00:42 -0800</bug_when>
    <thetext>Created attachment 126239
patch for EWS

testing patch for EWS, incl. the last changes discussed on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552889</commentid>
    <comment_count>12</comment_count>
      <attachid>126239</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-08 23:14:41 -0800</bug_when>
    <thetext>Comment on attachment 126239
patch for EWS

Attachment 126239 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11449792

New failing tests:
platform/chromium/compositing/layout-width-change.html
scrollbars/scrollbar-orientation.html
scrollbars/disabled-scrollbar.html
scrollbars/scrollbar-buttons.html
scrollbars/listbox-scrollbar-combinations.html
scrollbars/overflow-scrollbar-combinations.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552982</commentid>
    <comment_count>13</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-02-09 02:21:58 -0800</bug_when>
    <thetext>Reverted r107197 for reason:

broke

Committed r107205: &lt;http://trac.webkit.org/changeset/107205&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553004</commentid>
    <comment_count>14</comment_count>
      <attachid>126268</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-02-09 03:08:15 -0800</bug_when>
    <thetext>Created attachment 126268
patch for EWS

Argh, must have pressed Undo once too many - that&apos;s what I get for hurrying... :P One mor round of EWS to make sure I got it right this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553042</commentid>
    <comment_count>15</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-02-09 04:11:01 -0800</bug_when>
    <thetext>Committed in r107212 with a bungled commit message (fixed in r107214). &apos;Dem bots and scripts really hated me today... :P</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125283</attachid>
            <date>2012-02-03 01:04:46 -0800</date>
            <delta_ts>2012-02-06 01:31:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77525-20120203180444.patch</filename>
            <type>text/plain</type>
            <size>29220</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NjI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjQxM2UzYjRiMWE3NTBh
YjJlNGRlYzVlZWRkZjY4YjUxZWY1ZGFkOS4uMDFiMGU5ZDljMWUyYmZkM2E3MDIwM2QyNzBkZGVm
MDM2M2Y1NGI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI3IEBACiAyMDEyLTAyLTAyICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcjogbW92ZSBwYXJhbWV0ZXJzIGludG8gYSBzdHJ1Y3QK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTI1CisK
KyAgICAgICAgQWRkZWQgJ1NlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JyBzdHJ1Y3QgdG8gaG9sZCBw
YXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uCisgICAgICAgIEFkYXB0ZWQgY2FsbGluZyBzaXRl
cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIChyZWZhY3RvcmluZykKKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3Ip
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAg
ICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCk6CisgICAgICAgIChTZWxlY3RvckNoZWNrZXIpOgorCisyMDEyLTAyLTAyICBSb2xhbmQg
U3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFNpbXBsaWZ5
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvciBhbmQgY2hlY2tPbmVTZWxlY3RvcgogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc2OTcKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDgzMmQxMDE5NzJhNGU5MDg5
ZWU1MjZiMDFjMmE4YTI5MzcwZGZjYWMuLmIzMzVkYjdlMTJmM2UwZTUxZjE0MmI0MDc0NzAyYmI1
OTExODlkOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTIw
NDcsNyArMjA0NywxNiBAQCBpbmxpbmUgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVj
dG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKICAgICB9CiAKICAgICAvLyBTbG93IHBhdGgu
Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNo
ZWNrU2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFtaWNQc2V1
ZG8sIGZhbHNlLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQsIHN0eWxlKCks
IG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDApOworICAgIFNl
bGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dCA9IHsKKyAgICAg
ICAgcnVsZURhdGEuc2VsZWN0b3IoKSwgLy8gbV9zZWxlY3RvcgorICAgICAgICBtX2VsZW1lbnQs
IC8vIG1fZWxlbWVudAorICAgICAgICBmYWxzZSwgLy8gbV9pc1N1YlNlbGVjdG9yCisgICAgICAg
IFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCwgLy8gbV92aXNpdGVkTWF0Y2hU
eXBlCisgICAgICAgIHN0eWxlKCksIC8vIG1fZWxlbWVudFN0eWxlCisgICAgICAgIG1fcGFyZW50
Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDAgLy8gbV9lbGVtZW50UGFyZW50
U3R5bGUKKyAgICB9OworCisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNo
ID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0b3IoY29udGV4dCwgbV9keW5hbWljUHNldWRvKTsKICAg
ICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAobV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VV
RE8gJiYgbV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gbV9keW5hbWljUHNldWRvKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCA1ODY3NzQ2NDdhMDg3ZDNhMGMyZDdm
MjgyY2IzYmIwMzM2Zjk0NDA1Li4xODg0ZGQ2NWYyZTI3MTdhYjc1ZmIzMDljY2E3MjJhMWRmMjIx
YWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtMjY4LDEzICsy
NjgsMjIgQEAgRUluc2lkZUxpbmsgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVT
bG93Q2FzZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAogCiBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlbGVtZW50LCBib29sIGlz
RmFzdENoZWNrYWJsZVNlbGVjdG9yKSBjb25zdAogewotICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1
ZG8gPSBOT1BTRVVETzsKICAgICBpZiAoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgJiYgIWVsZW1l
bnQtPmlzU1ZHRWxlbWVudCgpKSB7CiAgICAgICAgIGlmICghZmFzdENoZWNrUmlnaHRtb3N0U2Vs
ZWN0b3Ioc2VsLCBlbGVtZW50LCBWaXNpdGVkTWF0Y2hEaXNhYmxlZCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBmYXN0Q2hlY2tTZWxlY3RvcihzZWwsIGVsZW1l
bnQpOwogICAgIH0KLSAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIGR5bmFt
aWNQc2V1ZG8sIGZhbHNlLCBWaXNpdGVkTWF0Y2hEaXNhYmxlZCkgPT0gU2VsZWN0b3JNYXRjaGVz
OworCisgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dCA9IHsKKyAgICAgICAgc2Vs
LCAvLyBtX3NlbGVjdG9yCisgICAgICAgIGVsZW1lbnQsIC8vIG1fZWxlbWVudAorICAgICAgICBm
YWxzZSwgLy8gbV9pc1N1YlNlbGVjdG9yCisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRl
ZE1hdGNoRGlzYWJsZWQsIC8vIG1fdmlzaXRlZE1hdGNoVHlwZQorICAgICAgICAwLCAvLyBtX2Vs
ZW1lbnRTdHlsZQorICAgICAgICAwIC8vIG1fZWxlbWVudFBhcmVudFN0eWxlCisgICAgfTsKKyAg
ICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgcmV0dXJuIGNoZWNrU2Vs
ZWN0b3IoY29udGV4dCwgZHluYW1pY1BzZXVkbykgPT0gU2VsZWN0b3JNYXRjaGVzOwogfQogCiBu
YW1lc3BhY2UgewpAQCAtNDQyLDI1ICs0NTEsMjUgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Omlz
RmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIC8vICog
U2VsZWN0b3JGYWlsc0xvY2FsbHkgICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciB0aGUgZWxl
bWVudCBlCiAvLyAqIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyAtIHRoZSBzZWxlY3RvciBmYWls
cyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb2YgZQogLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVs
eSAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5nIG9yIGFuY2VzdG9y
IG9mIGUKLVNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFt
aWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0
Y2hUeXBlLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBh
cmVudFN0eWxlKSBjb25zdAorU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0LCBQ
c2V1ZG9JZCYgZHluYW1pY1BzZXVkbykgY29uc3QKIHsKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8v
IFNwZWM6IENTUzIgc2VsZWN0b3JzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSAoY29uY2VwdHVh
bGx5KSBjbG9uZWQgRE9NIHRyZWUKICAgICAvLyBiZWNhdXNlIGl0cyBjb250ZW50cyBhcmUgbm90
IHBhcnQgb2YgdGhlIGZvcm1hbCBkb2N1bWVudCBzdHJ1Y3R1cmUuCi0gICAgaWYgKGUtPmlzU1ZH
U2hhZG93Um9vdCgpKQorICAgIGlmIChjb250ZXh0Lm1fZWxlbWVudC0+aXNTVkdTaGFkb3dSb290
KCkpCiAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKICNlbmRpZgogCiAg
ICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCi0gICAgaWYgKCFjaGVja09uZVNlbGVj
dG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgaXNTdWJTZWxlY3RvciwgdmlzaXRlZE1hdGNoVHlw
ZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQorICAgIGlmICghY2hlY2tPbmVT
ZWxlY3Rvcihjb250ZXh0LCBkeW5hbWljUHNldWRvKSkKICAgICAgICAgcmV0dXJuIFNlbGVjdG9y
RmFpbHNMb2NhbGx5OwogCiAgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIHNlbGVjdG9ycyBoYXMgdG8g
bWF0Y2gKLSAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24gPSBzZWwtPnJlbGF0aW9u
KCk7CisgICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uID0gY29udGV4dC5tX3NlbGVj
dG9yLT5yZWxhdGlvbigpOwogCi0gICAgLy8gUHJlcGFyZSBuZXh0IHNlbAotICAgIHNlbCA9IHNl
bC0+dGFnSGlzdG9yeSgpOwotICAgIGlmICghc2VsKQorICAgIC8vIFByZXBhcmUgbmV4dCBzZWxl
Y3RvcgorICAgIGNvbnRleHQubV9zZWxlY3RvciA9IGNvbnRleHQubV9zZWxlY3Rvci0+dGFnSGlz
dG9yeSgpOworICAgIGlmICghY29udGV4dC5tX3NlbGVjdG9yKQogICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JNYXRjaGVzOwogCiAgICAgaWYgKHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpTdWJTZWxl
Y3RvcikgewpAQCAtNDY5LDc1ICs0NzgsODUgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1h
dGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLAogICAg
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogCiAgICAgICAgIC8vIERp
c2FibGUgOnZpc2l0ZWQgbWF0Y2hpbmcgd2hlbiB3ZSBzZWUgdGhlIGZpcnN0IGxpbmsgb3IgdHJ5
IHRvIG1hdGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCi0gICAgICAgIGlmICgh
aXNTdWJTZWxlY3RvciAmJiAoZS0+aXNMaW5rKCkgfHwgKHJlbGF0aW9uICE9IENTU1NlbGVjdG9y
OjpEZXNjZW5kYW50ICYmIHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpDaGlsZCkpKQotICAgICAg
ICAgICAgdmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaERpc2FibGVkOworICAgICAgICBp
ZiAoIWNvbnRleHQubV9pc1N1YlNlbGVjdG9yICYmIChjb250ZXh0Lm1fZWxlbWVudC0+aXNMaW5r
KCkgfHwgKHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ICYmIHJlbGF0aW9uICE9
IENTU1NlbGVjdG9yOjpDaGlsZCkpKQorICAgICAgICAgICAgY29udGV4dC5tX3Zpc2l0ZWRNYXRj
aFR5cGUgPSBWaXNpdGVkTWF0Y2hEaXNhYmxlZDsKICAgICB9CiAKICAgICBzd2l0Y2ggKHJlbGF0
aW9uKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKLSAgICAgICAgd2hpbGUg
KHRydWUpIHsKLSAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBlLT5wYXJlbnROb2RlKCk7
Ci0gICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICBlID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9
IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNo
VHlwZSk7CisgICAgICAgIGZvciAoY29udGV4dC5tX2VsZW1lbnQgPSBjb250ZXh0Lm1fZWxlbWVu
dC0+cGFyZW50RWxlbWVudCgpOyBjb250ZXh0Lm1fZWxlbWVudDsgY29udGV4dC5tX2VsZW1lbnQg
PSBjb250ZXh0Lm1fZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBjb250
ZXh0Lm1faXNTdWJTZWxlY3RvciA9IGZhbHNlOworICAgICAgICAgICAgY29udGV4dC5tX2VsZW1l
bnRTdHlsZSA9IDA7CisgICAgICAgICAgICBjb250ZXh0Lm1fZWxlbWVudFBhcmVudFN0eWxlID0g
MDsKKyAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBjaGVja1NlbGVjdG9yKGNvbnRl
eHQsIGR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0
Y2hlcyB8fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gbWF0Y2g7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxk
OgotICAgICAgICB7Ci0gICAgICAgICAgICBDb250YWluZXJOb2RlKiBuID0gZS0+cGFyZW50Tm9k
ZSgpOwotICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgZSA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVj
dG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIHZpc2l0ZWRNYXRjaFR5cGUpOwotICAg
ICAgICB9CisgICAgICAgIGNvbnRleHQubV9lbGVtZW50ID0gY29udGV4dC5tX2VsZW1lbnQtPnBh
cmVudEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKCFjb250ZXh0Lm1fZWxlbWVudCkKKyAgICAgICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgY29udGV4dC5tX2lz
U3ViU2VsZWN0b3IgPSBmYWxzZTsKKyAgICAgICAgY29udGV4dC5tX2VsZW1lbnRTdHlsZSA9IDA7
CisgICAgICAgIGNvbnRleHQubV9lbGVtZW50UGFyZW50U3R5bGUgPSAwOworICAgICAgICByZXR1
cm4gY2hlY2tTZWxlY3Rvcihjb250ZXh0LCBkeW5hbWljUHNldWRvKTsKKwogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OkRpcmVjdEFkamFjZW50OgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1f
aXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2Rl
KCktPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5v
ZGUoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0g
ICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlEaXJl
Y3RBZGphY2VudFJ1bGVzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlID0gZS0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpOwotICAgICAgICAgICAgaWYgKCFlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7Ci0gICAgICAgICAgICByZXR1cm4g
Y2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hU
eXBlKTsKKyAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSAmJiBjb250ZXh0Lm1f
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBjb250ZXh0Lm1fZWxlbWVudFN0eWxlID8gY29udGV4dC5tX2VsZW1lbnRQYXJl
bnRTdHlsZSA6IGNvbnRleHQubV9lbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7
CisgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgcGFyZW50U3R5
bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMoKTsKICAgICAgICAg
fQorICAgICAgICBjb250ZXh0Lm1fZWxlbWVudCA9IGNvbnRleHQubV9lbGVtZW50LT5wcmV2aW91
c0VsZW1lbnRTaWJsaW5nKCk7CisgICAgICAgIGlmICghY29udGV4dC5tX2VsZW1lbnQpCisgICAg
ICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzOworICAgICAgICBjb250ZXh0
Lm1faXNTdWJTZWxlY3RvciA9IGZhbHNlOworICAgICAgICBjb250ZXh0Lm1fZWxlbWVudFN0eWxl
ID0gMDsKKyAgICAgICAgY29udGV4dC5tX2VsZW1lbnRQYXJlbnRTdHlsZSA9IDA7CisgICAgICAg
IHJldHVybiBjaGVja1NlbGVjdG9yKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOworCiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgaWYgKCFtX2lzQ29sbGVj
dGluZ1J1bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0Vs
ZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVs
ZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSAmJiBjb250ZXh0
Lm1fZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUgPSBjb250ZXh0Lm1fZWxlbWVudFN0eWxlID8gY29udGV4dC5tX2VsZW1lbnRQ
YXJlbnRTdHlsZSA6IGNvbnRleHQubV9lbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxl
KCk7CiAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAgICAgICAgICAgcGFyZW50
U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAg
ICAgICAgfQotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgZSA9IGUtPnByZXZp
b3VzRWxlbWVudFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGlmICghZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzOwotICAgICAgICAgICAgU2VsZWN0b3JN
YXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwg
dmlzaXRlZE1hdGNoVHlwZSk7CisgICAgICAgIGZvciAoY29udGV4dC5tX2VsZW1lbnQgPSBjb250
ZXh0Lm1fZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOyBjb250ZXh0Lm1fZWxlbWVu
dDsgY29udGV4dC5tX2VsZW1lbnQgPSBjb250ZXh0Lm1fZWxlbWVudC0+cHJldmlvdXNFbGVtZW50
U2libGluZygpKSB7CisgICAgICAgICAgICBjb250ZXh0Lm1faXNTdWJTZWxlY3RvciA9IGZhbHNl
OworICAgICAgICAgICAgY29udGV4dC5tX2VsZW1lbnRTdHlsZSA9IDA7CisgICAgICAgICAgICBj
b250ZXh0Lm1fZWxlbWVudFBhcmVudFN0eWxlID0gMDsKKyAgICAgICAgICAgIFNlbGVjdG9yTWF0
Y2ggbWF0Y2ggPSBjaGVja1NlbGVjdG9yKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOwogICAgICAg
ICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBTZWxlY3RvckZh
aWxzQWxsU2libGluZ3MgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAgICB9OwotICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKKwogICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlN1YlNlbGVjdG9yOgogICAgICAgICAvLyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYg
c29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAogICAgICAgICAvLyBXZSBtYWtlIGFu
IGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBhbmQgYWxsb3cgYSBzZXQg
b2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCiAgICAgICAgIC8vIHRvIGZvbGxv
dyB0aGUgcHNldWRvIGVsZW1lbnRzLgotICAgICAgICBpZiAoKGVsZW1lbnRTdHlsZSB8fCBtX2lz
Q29sbGVjdGluZ1J1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBkeW5h
bWljUHNldWRvICE9IFNFTEVDVElPTgotICAgICAgICAgICAgICYmICEoKFJlbmRlclNjcm9sbGJh
cjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExC
QVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYgc2VsLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCisgICAgICAgIGlmICgoY29udGV4dC5tX2VsZW1l
bnRTdHlsZSB8fCBtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBO
T1BTRVVETyAmJiBkeW5hbWljUHNldWRvICE9IFNFTEVDVElPTgorICAgICAgICAgICAgICYmICEo
KFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1Bz
ZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYg
Y29udGV4dC5tX3NlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykp
CiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgIHJl
dHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgdmlzaXRlZE1h
dGNoVHlwZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpOworICAgICAgICBjb250
ZXh0Lm1faXNTdWJTZWxlY3RvciA9IHRydWU7CisgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9y
KGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOworCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93
RGVzY2VuZGFudDoKICAgICAgICAgewotICAgICAgICAgICAgTm9kZSogc2hhZG93SG9zdE5vZGUg
PSBlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICAgICAgICAgIGlmIChzaGFkb3dIb3N0Tm9k
ZSA9PSBlIHx8ICFzaGFkb3dIb3N0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAg
Tm9kZSogc2hhZG93SG9zdE5vZGUgPSBjb250ZXh0Lm1fZWxlbWVudC0+c2hhZG93QW5jZXN0b3JO
b2RlKCk7CisgICAgICAgICAgICBpZiAoc2hhZG93SG9zdE5vZGUgPT0gY29udGV4dC5tX2VsZW1l
bnQgfHwgIXNoYWRvd0hvc3ROb2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgZSA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihzaGFkb3dIb3N0Tm9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tT
ZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsK
KyAgICAgICAgICAgIGNvbnRleHQubV9lbGVtZW50ID0gdG9FbGVtZW50KHNoYWRvd0hvc3ROb2Rl
KTsKKyAgICAgICAgICAgIGNvbnRleHQubV9pc1N1YlNlbGVjdG9yID0gZmFsc2U7CisgICAgICAg
ICAgICBjb250ZXh0Lm1fZWxlbWVudFN0eWxlID0gMDsKKyAgICAgICAgICAgIGNvbnRleHQubV9l
bGVtZW50UGFyZW50U3R5bGUgPSAwOworICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Io
Y29udGV4dCwgZHluYW1pY1BzZXVkbyk7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CiB9CiAK
QEAgLTY4Niw5ICs3MDUsMTMgQEAgc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhOYW1l
ZE5vZGVNYXAqIGF0dHJpYnV0ZXMsIENTU1NlbGVjdG9yOjpNYXRjaCBtYXQKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1Nl
bGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlz
U3ViU2VsZWN0b3IsIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSwgUmVuZGVyU3R5
bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QK
K2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0JiBjb250ZXh0LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykgY29uc3QKIHsK
KyAgICBFbGVtZW50KiBjb25zdCAmIGUgPSBjb250ZXh0Lm1fZWxlbWVudDsKKyAgICBDU1NTZWxl
Y3RvciogY29uc3QgJiBzZWwgPSBjb250ZXh0Lm1fc2VsZWN0b3I7CiAgICAgQVNTRVJUKGUpOwor
ICAgIEFTU0VSVChzZWwpOworCiAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMo
ZSwgc2VsKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03MTUsMTUgKzczOCwyMyBAQCBi
b29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBF
bGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAvLyBIYW5kbGUgOm5vdCB1cCBmcm9udC4K
ICAgICAgICAgaWYgKHNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3Qp
IHsKICAgICAgICAgICAgIEFTU0VSVChzZWwtPnNlbGVjdG9yTGlzdCgpKTsKLSAgICAgICAgICAg
IGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbCA9IHNlbC0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7
IHN1YlNlbDsgc3ViU2VsID0gc3ViU2VsLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgICAgIFNl
bGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc3ViQ29udGV4dCA9IHsKKyAg
ICAgICAgICAgICAgICBzZWwtPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpLAorICAgICAgICAgICAg
ICAgIGNvbnRleHQubV9lbGVtZW50LAorICAgICAgICAgICAgICAgIHRydWUsCisgICAgICAgICAg
ICAgICAgY29udGV4dC5tX3Zpc2l0ZWRNYXRjaFR5cGUsCisgICAgICAgICAgICAgICAgY29udGV4
dC5tX2VsZW1lbnRTdHlsZSwKKyAgICAgICAgICAgICAgICBjb250ZXh0Lm1fZWxlbWVudFBhcmVu
dFN0eWxlLAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGZvciAoOyBzdWJDb250ZXh0Lm1f
c2VsZWN0b3I7IHN1YkNvbnRleHQubV9zZWxlY3RvciA9IHN1YkNvbnRleHQubV9zZWxlY3Rvci0+
dGFnSGlzdG9yeSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gOm5vdCBjYW5ub3QgbmVzdC4gSSBk
b24ndCByZWFsbHkga25vdyB3aHkgdGhpcyBpcyBhCiAgICAgICAgICAgICAgICAgLy8gcmVzdHJp
Y3Rpb24gaW4gQ1NTMywgYnV0IGl0IGlzLCBzbyBsZXQncyBob25vciBpdC4KICAgICAgICAgICAg
ICAgICAvLyB0aGUgcGFyc2VyIGVuZm9yY2VzIHRoYXQgdGhpcyBuZXZlciBvY2N1cnMKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoc3ViU2VsLT5wc2V1ZG9UeXBlKCkgIT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb05vdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN1YkNvbnRleHQubV9zZWxlY3Rvci0+
cHNldWRvVHlwZSgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpOwogICAgICAgICAgICAgICAg
IC8vIFdlIHNlbGVjdCBiZXR3ZWVuIDp2aXNpdGVkIGFuZCA6bGluayB3aGVuIGFwcGx5aW5nLiBX
ZSBkb24ndCBrbm93IHdoaWNoIG9uZSBhcHBsaWVkIChvciBub3QpIHlldC4KLSAgICAgICAgICAg
ICAgICBpZiAoc3ViU2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0
ZWQgfHwgKHN1YlNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rICYm
IHZpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoRW5hYmxlZCkpCisgICAgICAgICAgICAg
ICAgaWYgKHN1YkNvbnRleHQubV9zZWxlY3Rvci0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9WaXNpdGVkIHx8IChzdWJDb250ZXh0Lm1fc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluayAmJiBzdWJDb250ZXh0Lm1fdmlzaXRlZE1hdGNoVHlw
ZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHN1YlNlbCwgZSwgZHlu
YW1pY1BzZXVkbywgdHJ1ZSwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50
UGFyZW50U3R5bGUpKQorICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzdWJD
b250ZXh0LCBkeW5hbWljUHNldWRvKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoZHluYW1pY1BzZXVkbyAhPSBOT1BT
RVVETyAmJiAoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJlc29sdmUoKSB8fCBk
eW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwgZHluYW1pY1BzZXVkbyA9PSBSRVNJ
WkVSKSkgewpAQCAtNzU3LDggKzc4OCw4IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYg
KCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZWxl
bWVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRFbXB0
eVN0YXRlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0Lm1fZWxlbWVu
dFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tX2VsZW1lbnRTdHlsZS0+
c2V0RW1wdHlTdGF0ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5y
ZW5kZXJTdHlsZSgpICYmIChlLT5kb2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkgfHwgZS0+
cmVuZGVyU3R5bGUoKS0+dW5pcXVlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgZS0+cmVu
ZGVyU3R5bGUoKS0+c2V0RW1wdHlTdGF0ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIH0KQEAg
LTc3MSw4ICs4MDIsOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgICAg
IGlmICghZS0+cHJldmlvdXNFbGVtZW50U2libGluZygpKQogICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09u
bHkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVt
ZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50
UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAg
ICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5tX2VsZW1lbnRTdHls
ZSA/IGNvbnRleHQubV9lbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0Lm1fZWxlbWVudFN0
eWxlID8gY29udGV4dC5tX2VsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVu
ZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0
Q2hpbGRSdWxlcygpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIGNoaWxkU3R5
bGUpCkBAIC03OTMsNyArODI0LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIW1f
aXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBh
cmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5tX2VsZW1lbnRTdHlsZSA/IGNvbnRleHQubV9lbGVt
ZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7
CiAgICAgICAgICAgICAgICAgfQpAQCAtODA1LDggKzgzNiw4IEBAIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVk
b0lkJiBkCiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVu
dEVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVu
dC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYmICFlLT5uZXh0RWxlbWVudFNpYmxpbmco
KTsKICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8g
ZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxl
IDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0Lm1fZWxlbWVudFN0eWxlID8gY29udGV4dC5t
X2VsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQubV9lbGVtZW50U3R5bGUgPyBjb250ZXh0
Lm1fZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRTdHlsZSkKQEAgLTgxOSw3ICs4
NTAsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rv
ciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgLy8gbGFzdC1vZi10
eXBlIG1hdGNoZXMgdGhlIGxhc3QgZWxlbWVudCBvZiBpdHMgdHlwZQogICAgICAgICAgICAgaWYg
KEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJl
bnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQubV9lbGVtZW50U3R5bGUgPyBj
b250ZXh0Lm1fZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUo
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRp
b25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtODM5LDggKzg3MCw4IEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1l
bnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAgICAgYm9vbCBvbmx5Q2hpbGQgPSBmaXJz
dENoaWxkICYmIHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiAh
ZS0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xs
ZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGls
ZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0
eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0Lm1f
ZWxlbWVudFN0eWxlID8gY29udGV4dC5tX2VsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7
CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQu
bV9lbGVtZW50U3R5bGUgPyBjb250ZXh0Lm1fZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxl
bWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxl
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZl
Y3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRT
dHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKQEAgLTg1Nyw3ICs4
ODgsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rv
ciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2VsZWN0b3IgaXMgdmVyeSBzbG93LgogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVu
dEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW1f
aXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVu
dEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IGNvbnRleHQubV9lbGVtZW50U3R5bGUgPyBjb250ZXh0Lm1fZWxlbWVu
dFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhcmVudFN0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRC
eUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CkBAIC04OTMsOCArOTI0LDggQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCog
ZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAo
IW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVy
U3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
ZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBj
b250ZXh0Lm1fZWxlbWVudFN0eWxlID8gY29udGV4dC5tX2VsZW1lbnRTdHlsZSA6IGUtPnJlbmRl
clN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IGNvbnRleHQubV9lbGVtZW50U3R5bGUgPyBjb250ZXh0Lm1fZWxlbWVudFBhcmVudFN0eWxlIDog
cGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNo
aWxkU3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRDaGlsZElu
ZGV4KGNvdW50KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQpAQCAtOTE2
LDcgKzk0Nyw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1Nl
bGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAgICAgICAg
ICAgICArK2NvdW50OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIW1f
aXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVu
dEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IGNvbnRleHQubV9lbGVtZW50U3R5bGUgPyBjb250ZXh0Lm1fZWxlbWVu
dFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC05MzAsNyArOTYxLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQm
IGQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJl
bnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFt
X2lzQ29sbGVjdGluZ1J1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJl
bnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSBjb250ZXh0Lm1fZWxlbWVudFN0eWxlID8gY29udGV4dC5tX2VsZW1l
bnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTk0OCw3ICs5NzksNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9J
ZCYgZAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBh
cmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
IW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBh
cmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQubV9lbGVtZW50U3R5bGUgPyBjb250ZXh0Lm1fZWxl
bWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7
CiAgICAgICAgICAgICAgICAgfQpAQCAtOTY5LDkgKzEwMDAsMTkgQEAgYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNl
dWRvSWQmIGQKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Bbnk6Ci0gICAgICAgICAgICBmb3Ig
KENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHNlbC0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHNl
bGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgZSwgZHluYW1pY1BzZXVk
bywgdHJ1ZSwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5
bGUpID09IFNlbGVjdG9yTWF0Y2hlcykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCBzdWJDb250ZXh0ID0geworICAgICAgICAgICAgICAgICAgICBzZWwt
PnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpLAorICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1f
ZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5tX3Zpc2l0ZWRNYXRjaFR5cGUsCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
bV9lbGVtZW50U3R5bGUsCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubV9lbGVtZW50UGFy
ZW50U3R5bGUsCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBmb3IgKDsgc3Vi
Q29udGV4dC5tX3NlbGVjdG9yOyBzdWJDb250ZXh0Lm1fc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxp
c3Q6Om5leHQoc3ViQ29udGV4dC5tX3NlbGVjdG9yKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hlY2tTZWxlY3RvcihzdWJDb250ZXh0LCBkeW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1h
dGNoZXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQXV0b2ZpbGw6CkBAIC05ODYsMTAgKzEwMjcsMTAgQEAgYm9vbCBT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVu
dCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgIHJldHVybiBlLT5pc0xpbmsoKTsKICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoKICAgICAgICAgICAgIC8vIC4uLmV4
Y2VwdCBpZiA6dmlzaXRlZCBtYXRjaGluZyBpcyBkaXNhYmxlZCBmb3IgYW5jZXN0b3Ivc2libGlu
ZyBtYXRjaGluZy4KLSAgICAgICAgICAgIHJldHVybiBlLT5pc0xpbmsoKSAmJiB2aXNpdGVkTWF0
Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQ7CisgICAgICAgICAgICByZXR1cm4gZS0+aXNM
aW5rKCkgJiYgY29udGV4dC5tX3Zpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoRW5hYmxl
ZDsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRHJhZzoKLSAgICAgICAgICAgIGlm
IChlbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZlY3Rl
ZEJ5RHJhZ1J1bGVzKHRydWUpOworICAgICAgICAgICAgaWYgKGNvbnRleHQubV9lbGVtZW50U3R5
bGUpCisgICAgICAgICAgICAgICAgY29udGV4dC5tX2VsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRC
eURyYWdSdWxlcyh0cnVlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkp
CiAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeURyYWdSdWxl
cyh0cnVlKTsKICAgICAgICAgICAgIGlmIChlLT5yZW5kZXJlcigpICYmIGUtPnJlbmRlcmVyKCkt
PmlzRHJhZ2dpbmcoKSkKQEAgLTEwMDAsOSArMTA0MSw5IEBAIGJvb2wgU2VsZWN0b3JDaGVja2Vy
OjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lk
JiBkCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOgogICAgICAgICAgICAg
Ly8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gaG92ZXIgc2hvdWxkIG5ldmVyIG1hdGNo
IGFuY2hvcnMgd2l0aCBubwogICAgICAgICAgICAgLy8gaHJlZiBhbmQgKjpob3ZlciBzaG91bGQg
bm90IG1hdGNoIGFueXRoaW5nLiBUaGlzIGlzIGltcG9ydGFudCBmb3Igc2l0ZXMgbGlrZSB3c2ou
Y29tLgotICAgICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBpc1N1YlNlbGVjdG9yIHx8
IChzZWwtPmhhc1RhZygpICYmICFlLT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBlLT5pc0xpbmsoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAg
IGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVyUnVsZXModHJ1ZSk7CisgICAgICAgICAg
ICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGNvbnRleHQubV9pc1N1YlNlbGVjdG9yIHx8IChzZWwt
Pmhhc1RhZygpICYmICFlLT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBlLT5pc0xpbmsoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0Lm1fZWxlbWVudFN0eWxlKQorICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0Lm1fZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxlcyh0cnVl
KTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpKQogICAgICAgICAg
ICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxlcyh0cnVl
KTsKICAgICAgICAgICAgICAgICBpZiAoZS0+aG92ZXJlZCgpIHx8IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXIpKQpA
QCAtMTAxMiw5ICsxMDUzLDkgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlOgogICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4g
cXVpcmtzIG1vZGUsIHRoZW4gOmFjdGl2ZSBzaG91bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRo
IG5vCiAgICAgICAgICAgICAvLyBocmVmIGFuZCAqOmFjdGl2ZSBzaG91bGQgbm90IG1hdGNoIGFu
eXRoaW5nLgotICAgICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBpc1N1YlNlbGVjdG9y
IHx8IChzZWwtPmhhc1RhZygpICYmICFlLT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBlLT5pc0xpbmso
KSkgewotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOworICAgICAg
ICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBjb250ZXh0Lm1faXNTdWJTZWxlY3RvciB8fCAo
c2VsLT5oYXNUYWcoKSAmJiAhZS0+aGFzVGFnTmFtZShhVGFnKSkgfHwgZS0+aXNMaW5rKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5tX2VsZW1lbnRTdHlsZSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5tX2VsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVz
KHRydWUpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlBY3RpdmVSdWxl
cyh0cnVlKTsKICAgICAgICAgICAgICAgICBpZiAoZS0+YWN0aXZlKCkgfHwgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGUsIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3Rp
dmUpKQpAQCAtMTE0NCw3ICsxMTg1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50KSB7Ci0gICAgICAgIGlmICghZWxlbWVudFN0eWxlICYmICFtX2lz
Q29sbGVjdGluZ1J1bGVzT25seSkKKyAgICAgICAgaWYgKCFjb250ZXh0Lm1fZWxlbWVudFN0eWxl
ICYmICFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICBpZiAoc2VsLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCkpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCAzZjk0NjllNWQ3OWIwOWM5YWI4NDJlNzQyZDg1
ZmFkNzE3Yjk0NzFmLi5kNDQ2NmM3NTY0MjdiNGQzYjJkNjQzM2Y4NzkwMGM0NjNlYWZmYjA0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC01MSw4ICs1MSwxOCBAQCBwdWJs
aWM6CiAKICAgICBlbnVtIFNlbGVjdG9yTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9y
RmFpbHNMb2NhbGx5LCBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MsIFNlbGVjdG9yRmFpbHNDb21w
bGV0ZWx5IH07CiAgICAgZW51bSBWaXNpdGVkTWF0Y2hUeXBlIHsgVmlzaXRlZE1hdGNoRGlzYWJs
ZWQsIFZpc2l0ZWRNYXRjaEVuYWJsZWQgfTsKKworICAgIHN0cnVjdCBTZWxlY3RvckNoZWNraW5n
Q29udGV4dCB7CisgICAgICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9yOworICAgICAgICBFbGVt
ZW50KiBtX2VsZW1lbnQ7CisgICAgICAgIGJvb2wgbV9pc1N1YlNlbGVjdG9yOworICAgICAgICBW
aXNpdGVkTWF0Y2hUeXBlIG1fdmlzaXRlZE1hdGNoVHlwZTsKKyAgICAgICAgUmVuZGVyU3R5bGUq
IG1fZWxlbWVudFN0eWxlOworICAgICAgICBSZW5kZXJTdHlsZSogbV9lbGVtZW50UGFyZW50U3R5
bGU7CisgICAgfTsKKwogICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1l
bnQqLCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yID0gZmFsc2UpIGNvbnN0OwotICAgIFNl
bGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9J
ZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlLCBS
ZW5kZXJTdHlsZSogPSAwLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlID0gMCkgY29u
c3Q7CisgICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKFNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0LCBQc2V1ZG9JZCYpIGNvbnN0OwogICAgIHN0YXRpYyBib29sIGlzRmFzdENoZWNrYWJsZVNl
bGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKik7CiAgICAgYm9vbCBmYXN0Q2hlY2tTZWxlY3Rvcihj
b25zdCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKIApAQCAtOTYsNyArMTA2
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGRldGVybWluZVNlbGVjdG9yU2NvcGVzKGNv
bnN0IENTU1NlbGVjdG9yTGlzdCYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZFNjb3Bl
cywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKTsKIAogcHJpdmF0ZToK
LSAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgUHNldWRv
SWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSwg
UmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdDsKKyAg
ICBib29sIGNoZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQ
c2V1ZG9JZCYpIGNvbnN0OwogICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NT
ZWxlY3RvciosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKSBjb25zdDsKICAgICBzdGF0aWMgYm9v
bCBpc0ZyYW1lRm9jdXNlZChjb25zdCBFbGVtZW50Kik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125595</attachid>
            <date>2012-02-06 01:31:11 -0800</date>
            <delta_ts>2012-02-07 22:52:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77525-20120206183110.patch</filename>
            <type>text/plain</type>
            <size>28952</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2Nzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTdlZWI3OWNmOWI2YWE2
MDZjM2ViZmRjZjkwMzk2NTc5MDQxZjIyZS4uOWQ5MjM4YjZjODJmYTIxMDE1MDk0MTYwOWVjODcx
OWVjYmQ5M2NhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTAyLTA2ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcjogbW92ZSBwYXJhbWV0ZXJzIGludG8gYSBzdHJ1Y3QK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTI1CisK
KyAgICAgICAgQWRkZWQgJ1NlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JyBzdHJ1Y3QgdG8gaG9sZCBw
YXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uCisgICAgICAgIEFkYXB0ZWQgY2FsbGluZyBzaXRl
cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIChyZWZhY3RvcmluZykKKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3Ip
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAg
ICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNo
ZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCk6
CisgICAgICAgIChTZWxlY3RvckNoZWNraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0OjpzZXRDb21wb3VuZFNlbGVj
dG9yKToKKyAgICAgICAgKFNlbGVjdG9yQ2hlY2tlcik6CisKIDIwMTItMDItMDUgIEtlbnRhcm8g
SGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbmFtZSBbSlNDQ3VzdG9t
Kl0gSURMIHRvIFtKU0N1c3RvbSpdIElETApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwCmluZGV4IDg2YjBhYzNlNDY1ZWU4ZDcwYWJhYzc2MGY2ZTg5ODEwZGFkYjYwMzYuLjcz
NTM4MzFhNmE0MDdmZmI3MWU0ZTY1ZTAwYTQxNGY3Mjg1NWViNmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTIwMjgsNyArMjAyOCw3IEBAIGlubGluZSBib29s
IENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRh
KQogICAgIH0KIAogICAgIC8vIFNsb3cgcGF0aC4KLSAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVj
dG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihydWxlRGF0YS5zZWxlY3Rv
cigpLCBtX2VsZW1lbnQsIG1fZHluYW1pY1BzZXVkbywgZmFsc2UsIFNlbGVjdG9yQ2hlY2tlcjo6
VmlzaXRlZE1hdGNoRW5hYmxlZCwgc3R5bGUoKSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2Rl
LT5yZW5kZXJTdHlsZSgpIDogMCk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNo
IG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0b3IoU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dChydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQsIGZhbHNlLCBT
ZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQsIHN0eWxlKCksIG1fcGFyZW50Tm9k
ZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDApLCBtX2R5bmFtaWNQc2V1ZG8pOwog
ICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hlcykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBOT1BT
RVVETyAmJiBtX2NoZWNrZXIucHNldWRvU3R5bGUoKSAhPSBtX2R5bmFtaWNQc2V1ZG8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IDU4Njc3NDY0N2EwODdkM2EwYzJk
N2YyODJjYjNiYjAzMzZmOTQ0MDUuLjg0OGE4MzZjYmVlOWFiODBjNGExOTBlMzhlNzI1MmZiMjE0
ZDU2N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC0yNjgsMTMg
KzI2OCwxNCBAQCBFSW5zaWRlTGluayBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0
ZVNsb3dDYXNlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKIGJvb2wgU2VsZWN0b3JDaGVja2Vy
OjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wg
aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IpIGNvbnN0CiB7Ci0gICAgUHNldWRvSWQgZHluYW1pY1Bz
ZXVkbyA9IE5PUFNFVURPOwogICAgIGlmIChpc0Zhc3RDaGVja2FibGVTZWxlY3RvciAmJiAhZWxl
bWVudC0+aXNTVkdFbGVtZW50KCkpIHsKICAgICAgICAgaWYgKCFmYXN0Q2hlY2tSaWdodG1vc3RT
ZWxlY3RvcihzZWwsIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaERpc2FibGVkKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGZhc3RDaGVja1NlbGVjdG9yKHNlbCwgZWxl
bWVudCk7CiAgICAgfQotICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVudCwgZHlu
YW1pY1BzZXVkbywgZmFsc2UsIFZpc2l0ZWRNYXRjaERpc2FibGVkKSA9PSBTZWxlY3Rvck1hdGNo
ZXM7CisKKyAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgcmV0dXJu
IGNoZWNrU2VsZWN0b3IoU2VsZWN0b3JDaGVja2luZ0NvbnRleHQoc2VsLCBlbGVtZW50LCBmYWxz
ZSwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hEaXNhYmxlZCwgMCwgMCksIGR5bmFtaWNQ
c2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlczsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTQ0MiwxMDIg
KzQ0MywxMDYgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9y
KGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIC8vICogU2VsZWN0b3JGYWlsc0xvY2FsbHkg
ICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciB0aGUgZWxlbWVudCBlCiAvLyAqIFNlbGVjdG9y
RmFpbHNBbGxTaWJsaW5ncyAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxp
bmcgb2YgZQogLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVseSAgLSB0aGUgc2VsZWN0b3IgZmFp
bHMgZm9yIGUgYW5kIGFueSBzaWJsaW5nIG9yIGFuY2VzdG9yIG9mIGUKLVNlbGVjdG9yQ2hlY2tl
cjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0
b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJT
ZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSog
ZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAorU2Vs
ZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3Rv
cihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUHNldWRvSWQmIGR5bmFt
aWNQc2V1ZG8pIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBTcGVjOiBDU1MyIHNl
bGVjdG9ycyBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgKGNvbmNlcHR1YWxseSkgY2xvbmVkIERP
TSB0cmVlCiAgICAgLy8gYmVjYXVzZSBpdHMgY29udGVudHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBm
b3JtYWwgZG9jdW1lbnQgc3RydWN0dXJlLgotICAgIGlmIChlLT5pc1NWR1NoYWRvd1Jvb3QoKSkK
KyAgICBpZiAoY29udGV4dC5lbGVtZW50LT5pc1NWR1NoYWRvd1Jvb3QoKSkKICAgICAgICAgcmV0
dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogI2VuZGlmCiAKICAgICAvLyBmaXJzdCBzZWxl
Y3RvciBoYXMgdG8gbWF0Y2gKLSAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc2VsLCBlLCBkeW5h
bWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5bGUs
IGVsZW1lbnRQYXJlbnRTdHlsZSkpCisgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKGNvbnRleHQs
IGR5bmFtaWNQc2V1ZG8pKQogICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAK
ICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgc2VsZWN0b3JzIGhhcyB0byBtYXRjaAotICAgIENTU1Nl
bGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9IHNlbC0+cmVsYXRpb24oKTsKKyAgICBDU1NTZWxl
Y3Rvcjo6UmVsYXRpb24gcmVsYXRpb24gPSBjb250ZXh0LnNlbGVjdG9yLT5yZWxhdGlvbigpOwog
Ci0gICAgLy8gUHJlcGFyZSBuZXh0IHNlbAotICAgIHNlbCA9IHNlbC0+dGFnSGlzdG9yeSgpOwot
ICAgIGlmICghc2VsKQorICAgIC8vIFByZXBhcmUgbmV4dCBzZWxlY3RvcgorICAgIENTU1NlbGVj
dG9yKiBoaXN0b3J5U2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yLT50YWdIaXN0b3J5KCk7Cisg
ICAgaWYgKCFoaXN0b3J5U2VsZWN0b3IpCiAgICAgICAgIHJldHVybiBTZWxlY3Rvck1hdGNoZXM7
CiAKKyAgICAvLyBTZXQgdXAgYSBuZXcgY29udGV4dCBmb3IgdGhlIG5ldyBzZWxlY3Rvci4KKyAg
ICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBoaXN0b3J5Q29udGV4dChjb250ZXh0KTsKKyAgICBo
aXN0b3J5Q29udGV4dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxlY3RvcjsKKwogICAgIGlmIChyZWxh
dGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKICAgICAgICAgLy8gQmFpbC1vdXQg
aWYgdGhpcyBzZWxlY3RvciBpcyBpcnJlbGV2YW50IGZvciB0aGUgcHNldWRvU3R5bGUKICAgICAg
ICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSAhPSBkeW5h
bWljUHNldWRvKQogICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5Owog
CiAgICAgICAgIC8vIERpc2FibGUgOnZpc2l0ZWQgbWF0Y2hpbmcgd2hlbiB3ZSBzZWUgdGhlIGZp
cnN0IGxpbmsgb3IgdHJ5IHRvIG1hdGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMu
Ci0gICAgICAgIGlmICghaXNTdWJTZWxlY3RvciAmJiAoZS0+aXNMaW5rKCkgfHwgKHJlbGF0aW9u
ICE9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ICYmIHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpD
aGlsZCkpKQotICAgICAgICAgICAgdmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaERpc2Fi
bGVkOworICAgICAgICBpZiAoIWNvbnRleHQuaXNTdWJTZWxlY3RvciAmJiAoY29udGV4dC5lbGVt
ZW50LT5pc0xpbmsoKSB8fCAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYg
cmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkKSkpCisgICAgICAgICAgICBoaXN0b3J5Q29u
dGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRlZE1hdGNoRGlzYWJsZWQ7CiAgICAgfQogCiAg
ICAgc3dpdGNoIChyZWxhdGlvbikgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6
Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBDb250YWluZXJOb2RlKiBuID0g
ZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAg
ICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIFNlbGVj
dG9yTWF0Y2ggbWF0Y2ggPSBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFs
c2UsIHZpc2l0ZWRNYXRjaFR5cGUpOworICAgICAgICBoaXN0b3J5Q29udGV4dC5zZXRDb21wb3Vu
ZFNlbGVjdG9yKCk7CisgICAgICAgIGZvciAoaGlzdG9yeUNvbnRleHQuZWxlbWVudCA9IGNvbnRl
eHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOyBoaXN0b3J5Q29udGV4dC5lbGVtZW50OyBoaXN0
b3J5Q29udGV4dC5lbGVtZW50ID0gaGlzdG9yeUNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVu
dCgpKSB7CisgICAgICAgICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3Rvciho
aXN0b3J5Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CiAgICAgICAgICAgICBpZiAobWF0Y2ggPT0g
U2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQogICAg
ICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworCiAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6Q2hpbGQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBl
LT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAg
ICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgcmV0dXJu
IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNo
VHlwZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaGlzdG9yeUNvbnRleHQuZWxlbWVudCA9IGNvbnRl
eHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgICAgICBpZiAoIWhpc3RvcnlDb250ZXh0
LmVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Cisg
ICAgICAgIGhpc3RvcnlDb250ZXh0LnNldENvbXBvdW5kU2VsZWN0b3IoKTsKKyAgICAgICAgcmV0
dXJuIGNoZWNrU2VsZWN0b3IoaGlzdG9yeUNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOworCiAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkgJiYgZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBh
cmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+
cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChwYXJlbnRT
dHlsZSkKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0
ZWRCeURpcmVjdEFkamFjZW50UnVsZXMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGUg
PSBlLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7Ci0gICAgICAgICAgICBpZiAoIWUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKLSAgICAgICAgICAg
IHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIHZpc2l0
ZWRNYXRjaFR5cGUpOworICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYmIGNv
bnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBh
cmVudFN0eWxlIDogY29udGV4dC5lbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7
CisgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgcGFyZW50U3R5
bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMoKTsKICAgICAgICAg
fQorICAgICAgICBoaXN0b3J5Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wcmV2
aW91c0VsZW1lbnRTaWJsaW5nKCk7CisgICAgICAgIGlmICghaGlzdG9yeUNvbnRleHQuZWxlbWVu
dCkKKyAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CisgICAgICAg
IGhpc3RvcnlDb250ZXh0LnNldENvbXBvdW5kU2VsZWN0b3IoKTsKKyAgICAgICAgcmV0dXJuIGNo
ZWNrU2VsZWN0b3IoaGlzdG9yeUNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOworCiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGlu
Z1J1bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1l
bnROb2RlKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1l
bnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5
bGUoKTsKKyAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSAmJiBjb250ZXh0LmVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHls
ZSA6IGNvbnRleHQuZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwogICAgICAg
ICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRD
aGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgIH0KLSAg
ICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIGUgPSBlLT5wcmV2aW91c0VsZW1lbnRT
aWJsaW5nKCk7Ci0gICAgICAgICAgICBpZiAoIWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNl
bGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKLSAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2gg
PSBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIHZpc2l0ZWRNYXRj
aFR5cGUpOworICAgICAgICBoaXN0b3J5Q29udGV4dC5zZXRDb21wb3VuZFNlbGVjdG9yKCk7Cisg
ICAgICAgIGZvciAoaGlzdG9yeUNvbnRleHQuZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpOyBoaXN0b3J5Q29udGV4dC5lbGVtZW50OyBoaXN0b3J5Q29u
dGV4dC5lbGVtZW50ID0gaGlzdG9yeUNvbnRleHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2li
bGluZygpKSB7CisgICAgICAgICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3Rv
cihoaXN0b3J5Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CiAgICAgICAgICAgICBpZiAobWF0Y2gg
PT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyB8
fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2g7CiAgICAgICAgIH07Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0FsbFNpYmxpbmdzOworCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0
b3I6CiAgICAgICAgIC8vIGEgc2VsZWN0b3IgaXMgaW52YWxpZCBpZiBzb21ldGhpbmcgZm9sbG93
cyBhIHBzZXVkby1lbGVtZW50CiAgICAgICAgIC8vIFdlIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBz
Y3JvbGxiYXIgcHNldWRvIGVsZW1lbnRzIGFuZCBhbGxvdyBhIHNldCBvZiBwc2V1ZG8gY2xhc3Nl
cyAoYnV0IG5vdGhpbmcgZWxzZSkKICAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBwc2V1ZG8gZWxl
bWVudHMuCi0gICAgICAgIGlmICgoZWxlbWVudFN0eWxlIHx8IG1faXNDb2xsZWN0aW5nUnVsZXNP
bmx5KSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIGR5bmFtaWNQc2V1ZG8gIT0gU0VM
RUNUSU9OCi0gICAgICAgICAgICAgJiYgISgoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JT
dHlsZVJlc29sdmUoKSB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwgZHlu
YW1pY1BzZXVkbyA9PSBSRVNJWkVSKSAmJiBzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzKSkKKyAgICAgICAgaWYgKChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBtX2lzQ29s
bGVjdGluZ1J1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBkeW5hbWlj
UHNldWRvICE9IFNFTEVDVElPTgorICAgICAgICAgICAgICYmICEoKFJlbmRlclNjcm9sbGJhcjo6
c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJf
Q09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYgY29udGV4dC5zZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQogICAgICAgICAgICAgcmV0dXJu
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3Rvcihz
ZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIHZpc2l0ZWRNYXRjaFR5cGUsIGVsZW1lbnRTdHls
ZSwgZWxlbWVudFBhcmVudFN0eWxlKTsKKyAgICAgICAgaGlzdG9yeUNvbnRleHQuaXNTdWJTZWxl
Y3RvciA9IHRydWU7CisgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKGhpc3RvcnlDb250ZXh0
LCBkeW5hbWljUHNldWRvKTsKKwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRh
bnQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUqIHNoYWRvd0hvc3ROb2RlID0gZS0+c2hh
ZG93QW5jZXN0b3JOb2RlKCk7Ci0gICAgICAgICAgICBpZiAoc2hhZG93SG9zdE5vZGUgPT0gZSB8
fCAhc2hhZG93SG9zdE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIE5vZGUqIHNo
YWRvd0hvc3ROb2RlID0gY29udGV4dC5lbGVtZW50LT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAg
ICAgICAgICAgIGlmIChzaGFkb3dIb3N0Tm9kZSA9PSBjb250ZXh0LmVsZW1lbnQgfHwgIXNoYWRv
d0hvc3ROb2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVj
dG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
PihzaGFkb3dIb3N0Tm9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWws
IGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICAgICAgICAg
IGhpc3RvcnlDb250ZXh0LnNldENvbXBvdW5kU2VsZWN0b3IoKTsKKyAgICAgICAgICAgIGhpc3Rv
cnlDb250ZXh0LmVsZW1lbnQgPSB0b0VsZW1lbnQoc2hhZG93SG9zdE5vZGUpOworICAgICAgICAg
ICAgcmV0dXJuIGNoZWNrU2VsZWN0b3IoaGlzdG9yeUNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOwog
ICAgICAgICB9CiAgICAgfQogCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJu
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogfQogCkBAIC02ODYsOSArNjkxLDEzIEBAIHN0YXRp
YyBib29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzLCBDU1NT
ZWxlY3Rvcjo6TWF0Y2ggbWF0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQ
c2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBWaXNpdGVkTWF0Y2hU
eXBlIHZpc2l0ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRlclN0
eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUHNl
dWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CiB7CisgICAgRWxlbWVudCogY29uc3QgJiBlID0g
Y29udGV4dC5lbGVtZW50OworICAgIENTU1NlbGVjdG9yKiBjb25zdCAmIHNlbCA9IGNvbnRleHQu
c2VsZWN0b3I7CiAgICAgQVNTRVJUKGUpOworICAgIEFTU0VSVChzZWwpOworCiAgICAgaWYgKCFT
ZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZSwgc2VsKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC03MTUsMTUgKzcyNCwxNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVT
ZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAg
ICAvLyBIYW5kbGUgOm5vdCB1cCBmcm9udC4KICAgICAgICAgaWYgKHNlbC0+cHNldWRvVHlwZSgp
ID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpIHsKICAgICAgICAgICAgIEFTU0VSVChzZWwtPnNl
bGVjdG9yTGlzdCgpKTsKLSAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbCA9IHNl
bC0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YlNlbDsgc3ViU2VsID0gc3ViU2VsLT50YWdI
aXN0b3J5KCkpIHsKKyAgICAgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHN1YkNvbnRl
eHQoY29udGV4dCk7CisgICAgICAgICAgICBzdWJDb250ZXh0LmlzU3ViU2VsZWN0b3IgPSB0cnVl
OworICAgICAgICAgICAgZm9yIChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2VsLT5zZWxlY3Rvckxp
c3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9
IHN1YkNvbnRleHQuc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewogICAgICAgICAgICAgICAgIC8v
IDpub3QgY2Fubm90IG5lc3QuIEkgZG9uJ3QgcmVhbGx5IGtub3cgd2h5IHRoaXMgaXMgYQogICAg
ICAgICAgICAgICAgIC8vIHJlc3RyaWN0aW9uIGluIENTUzMsIGJ1dCBpdCBpcywgc28gbGV0J3Mg
aG9ub3IgaXQuCiAgICAgICAgICAgICAgICAgLy8gdGhlIHBhcnNlciBlbmZvcmNlcyB0aGF0IHRo
aXMgbmV2ZXIgb2NjdXJzCi0gICAgICAgICAgICAgICAgQVNTRVJUKHN1YlNlbC0+cHNldWRvVHlw
ZSgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpOworICAgICAgICAgICAgICAgIEFTU0VSVChz
dWJDb250ZXh0LnNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkgIT0gQ1NTU2VsZWN0b3I6OlBzZXVkb05v
dCk7CiAgICAgICAgICAgICAgICAgLy8gV2Ugc2VsZWN0IGJldHdlZW4gOnZpc2l0ZWQgYW5kIDps
aW5rIHdoZW4gYXBwbHlpbmcuIFdlIGRvbid0IGtub3cgd2hpY2ggb25lIGFwcGxpZWQgKG9yIG5v
dCkgeWV0LgotICAgICAgICAgICAgICAgIGlmIChzdWJTZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NT
ZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCB8fCAoc3ViU2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0xpbmsgJiYgdmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hFbmFi
bGVkKSkKKyAgICAgICAgICAgICAgICBpZiAoc3ViQ29udGV4dC5zZWxlY3Rvci0+cHNldWRvVHlw
ZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkIHx8IChzdWJDb250ZXh0LnNlbGVjdG9y
LT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbmsgJiYgc3ViQ29udGV4dC52
aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Io
c3ViU2VsLCBlLCBkeW5hbWljUHNldWRvLCB0cnVlLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50
U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCisgICAgICAgICAgICAgICAgaWYgKCFjaGVja09u
ZVNlbGVjdG9yKHN1YkNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChkeW5hbWlj
UHNldWRvICE9IE5PUFNFVURPICYmIChSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxl
UmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWlj
UHNldWRvID09IFJFU0laRVIpKSB7CkBAIC03NTcsOCArNzY4LDggQEAgYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNl
dWRvSWQmIGQKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50
U3R5bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQuZWxlbWVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVt
ZW50U3R5bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSAmJiAoZS0+ZG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdSdWxl
cygpIHx8IGUtPnJlbmRlclN0eWxlKCktPnVuaXF1ZSgpKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKICAgICAgICAgICAg
ICAgICB9CkBAIC03NzEsOCArNzgyLDggQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAg
ICAgICAgICAgICBpZiAoIWUtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkKICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0
aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0
eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxl
ID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwor
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxl
bWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOworICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1l
bnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5y
ZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmly
c3RDaGlsZFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRT
dHlsZSkKQEAgLTc5Myw3ICs4MDQsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVT
ZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICgh
bV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+
cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVu
dFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTgwNSw4ICs4MTYsOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9J
ZCYgZAogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRF
bGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHBhcmVudEVsZW1lbnQt
PmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiAhZS0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7
CiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgewotICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVs
ZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6
IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRl
clN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1l
bnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50
UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRT
dHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdCAmJiBjaGlsZFN0eWxlKQpAQCAtODE5LDcgKzgzMCw3IEBAIGJv
b2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVs
ZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hl
cyB0aGUgbGFzdCBlbGVtZW50IG9mIGl0cyB0eXBlCiAgICAgICAgICAgICBpZiAoRWxlbWVudCog
cGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGlm
ICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDog
cGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1l
bnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTgzOSw4ICs4NTAsOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9J
ZCYgZAogICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxkID0gZmlyc3RDaGlsZCAmJiBwYXJl
bnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgIWUtPm5leHRFbGVtZW50
U2libGluZygpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25s
eSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1l
bnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQ
YXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBj
b250ZXh0LmVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29u
dGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlMYXN0Q2hpbGRSdWxlcygpOwpAQCAtODU3LDcgKzg2OCw3IEBAIGJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBz
ZXVkb0lkJiBkCiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzZWxlY3RvciBpcyB2ZXJ5IHNs
b3cuCiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVs
ZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkp
IHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVu
dFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4
dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1l
bnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0
ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygp
OwpAQCAtODkzLDggKzkwNCw4IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVj
dG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkg
ewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1lbnRT
dHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJl
bnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250
ZXh0LmVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4
dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoY2hpbGRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkU3R5bGUtPnNldENoaWxkSW5kZXgoY291bnQpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAocGFyZW50U3R5bGUpCkBAIC05MTYsNyArOTI3LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQm
IGQKICAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxl
bWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5
bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0
eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9z
aXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtOTMwLDcgKzk0MSw3IEBAIGJv
b2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVs
ZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewogICAg
ICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVu
dFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUg
PyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxl
KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0
aW9uYWxSdWxlcygpOwogICAgICAgICAgICAgICAgIH0KQEAgLTk0OCw3ICs5NTksNyBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVt
ZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
aWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQ
YXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8g
Y29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgp
OwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlv
bmFsUnVsZXMoKTsKICAgICAgICAgICAgICAgICB9CkBAIC05NjksOSArOTgwLDEzIEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1l
bnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55OgotICAgICAg
ICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWwtPnNlbGVjdG9yTGlzdCgpLT5m
aXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0
b3IpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsIGUsIGR5
bmFtaWNQc2V1ZG8sIHRydWUsIHZpc2l0ZWRNYXRjaFR5cGUsIGVsZW1lbnRTdHlsZSwgZWxlbWVu
dFBhcmVudFN0eWxlKSA9PSBTZWxlY3Rvck1hdGNoZXMpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAgICAgICAgc3ViQ29udGV4
dC5pc1N1YlNlbGVjdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHN1YkNvbnRleHQu
c2VsZWN0b3IgPSBzZWwtPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJDb250ZXh0LnNlbGVj
dG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YkNvbnRl
eHQuc2VsZWN0b3IpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHN1
YkNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9B
dXRvZmlsbDoKQEAgLTk4NiwxMCArMTAwMSwxMCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAog
ICAgICAgICAgICAgcmV0dXJuIGUtPmlzTGluaygpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9WaXNpdGVkOgogICAgICAgICAgICAgLy8gLi4uZXhjZXB0IGlmIDp2aXNpdGVkIG1h
dGNoaW5nIGlzIGRpc2FibGVkIGZvciBhbmNlc3Rvci9zaWJsaW5nIG1hdGNoaW5nLgotICAgICAg
ICAgICAgcmV0dXJuIGUtPmlzTGluaygpICYmIHZpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1h
dGNoRW5hYmxlZDsKKyAgICAgICAgICAgIHJldHVybiBlLT5pc0xpbmsoKSAmJiBjb250ZXh0LnZp
c2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoRW5hYmxlZDsKICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRHJhZzoKLSAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0gICAg
ICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5RHJhZ1J1bGVzKHRydWUpOwor
ICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQorICAgICAgICAgICAgICAgIGNv
bnRleHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5RHJhZ1J1bGVzKHRydWUpOwogICAgICAg
ICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSkKICAgICAgICAgICAgICAgICBlLT5yZW5k
ZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5RHJhZ1J1bGVzKHRydWUpOwogICAgICAgICAgICAgaWYg
KGUtPnJlbmRlcmVyKCkgJiYgZS0+cmVuZGVyZXIoKS0+aXNEcmFnZ2luZygpKQpAQCAtMTAwMCw5
ICsxMDE1LDkgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2Vs
ZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvSG92ZXI6CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9k
ZSwgdGhlbiBob3ZlciBzaG91bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAg
ICAgICAvLyBocmVmIGFuZCAqOmhvdmVyIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuIFRoaXMg
aXMgaW1wb3J0YW50IGZvciBzaXRlcyBsaWtlIHdzai5jb20uCi0gICAgICAgICAgICBpZiAobV9z
dHJpY3RQYXJzaW5nIHx8IGlzU3ViU2VsZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhh
c1RhZ05hbWUoYVRhZykpIHx8IGUtPmlzTGluaygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVs
ZW1lbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZlY3Rl
ZEJ5SG92ZXJSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwg
Y29udGV4dC5pc1N1YlNlbGVjdG9yIHx8IChzZWwtPmhhc1RhZygpICYmICFlLT5oYXNUYWdOYW1l
KGFUYWcpKSB8fCBlLT5pc0xpbmsoKSkgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVs
ZW1lbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNl
dEFmZmVjdGVkQnlIb3ZlclJ1bGVzKHRydWUpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUt
PnJlbmRlclN0eWxlKCkpCiAgICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNl
dEFmZmVjdGVkQnlIb3ZlclJ1bGVzKHRydWUpOwogICAgICAgICAgICAgICAgIGlmIChlLT5ob3Zl
cmVkKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGUsIENT
U1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcikpCkBAIC0xMDEyLDkgKzEwMjcsOSBAQCBib29sIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBl
LCBQc2V1ZG9JZCYgZAogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CiAg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiA6YWN0aXZlIHNob3Vs
ZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGggbm8KICAgICAgICAgICAgIC8vIGhyZWYgYW5kICo6
YWN0aXZlIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuCi0gICAgICAgICAgICBpZiAobV9zdHJp
Y3RQYXJzaW5nIHx8IGlzU3ViU2VsZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhhc1Rh
Z05hbWUoYVRhZykpIHx8IGUtPmlzTGluaygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1l
bnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5
QWN0aXZlUnVsZXModHJ1ZSk7CisgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGNv
bnRleHQuaXNTdWJTZWxlY3RvciB8fCAoc2VsLT5oYXNUYWcoKSAmJiAhZS0+aGFzVGFnTmFtZShh
VGFnKSkgfHwgZS0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVt
ZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRB
ZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+
cmVuZGVyU3R5bGUoKSkKICAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0
QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwogICAgICAgICAgICAgICAgIGlmIChlLT5hY3Rp
dmUoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NT
U2VsZWN0b3I6OlBzZXVkb0FjdGl2ZSkpCkBAIC0xMTQ0LDcgKzExNTksNyBAQCBib29sIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBl
LCBQc2V1ZG9JZCYgZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChzZWwt
Pm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKLSAgICAgICAgaWYgKCFl
bGVtZW50U3R5bGUgJiYgIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KQorICAgICAgICBpZiAoIWNv
bnRleHQuZWxlbWVudFN0eWxlICYmICFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAoc2VsLT5pc1Vua25vd25Qc2V1ZG9FbGVt
ZW50KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCAzZjk0NjllNWQ3
OWIwOWM5YWI4NDJlNzQyZDg1ZmFkNzE3Yjk0NzFmLi5mMzhmMGY2YjFmNDI4MzAyOGJlZjk4M2E5
MDk5MDc0NGJjYTg1NTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC01
MSw4ICs1MSwzNCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFNlbGVjdG9yTWF0Y2ggeyBTZWxlY3Rv
ck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxlY3RvckZhaWxzQWxsU2libGluZ3Ms
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5IH07CiAgICAgZW51bSBWaXNpdGVkTWF0Y2hUeXBlIHsg
VmlzaXRlZE1hdGNoRGlzYWJsZWQsIFZpc2l0ZWRNYXRjaEVuYWJsZWQgfTsKKworICAgIHN0cnVj
dCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCB7CisgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0KENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc1N1YlNl
bGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiBl
bGVtZW50U3R5bGUsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpCisgICAgICAgICAg
ICA6IHNlbGVjdG9yKHNlbGVjdG9yKQorICAgICAgICAgICAgLCBlbGVtZW50KGVsZW1lbnQpCisg
ICAgICAgICAgICAsIGlzU3ViU2VsZWN0b3IoaXNTdWJTZWxlY3RvcikKKyAgICAgICAgICAgICwg
dmlzaXRlZE1hdGNoVHlwZSh2aXNpdGVkTWF0Y2hUeXBlKQorICAgICAgICAgICAgLCBlbGVtZW50
U3R5bGUoZWxlbWVudFN0eWxlKQorICAgICAgICAgICAgLCBlbGVtZW50UGFyZW50U3R5bGUoZWxl
bWVudFBhcmVudFN0eWxlKQorICAgICAgICB7IH0KKworICAgICAgICBpbmxpbmUgdm9pZCBzZXRD
b21wb3VuZFNlbGVjdG9yKCkKKyAgICAgICAgeworICAgICAgICAgICAgaXNTdWJTZWxlY3RvciA9
IGZhbHNlOworICAgICAgICAgICAgZWxlbWVudFN0eWxlID0gMDsKKyAgICAgICAgICAgIGVsZW1l
bnRQYXJlbnRTdHlsZSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3I7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7CisgICAgICAgIGJvb2wgaXNTdWJTZWxl
Y3RvcjsKKyAgICAgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOworICAgICAg
ICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlOworICAgICAgICBSZW5kZXJTdHlsZSogZWxlbWVu
dFBhcmVudFN0eWxlOworICAgIH07CisKICAgICBib29sIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0
b3IqLCBFbGVtZW50KiwgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3RvciA9IGZhbHNlKSBjb25z
dDsKLSAgICBTZWxlY3Rvck1hdGNoIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50
KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRlZE1h
dGNoVHlwZSwgUmVuZGVyU3R5bGUqID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHls
ZSA9IDApIGNvbnN0OworICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3Rvcihjb25zdCBTZWxl
Y3RvckNoZWNraW5nQ29udGV4dCYsIFBzZXVkb0lkJikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wg
aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKICAgICBib29sIGZh
c3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCopIGNvbnN0
OwogCkBAIC05Niw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5l
U2VsZWN0b3JTY29wZXMoY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiwgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29w
ZXMpOwogCiBwcml2YXRlOgotICAgIGJvb2wgY2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvcios
IEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBW
aXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50
U3R5bGUpIGNvbnN0OworICAgIGJvb2wgY2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNo
ZWNraW5nQ29udGV4dCYsIFBzZXVkb0lkJikgY29uc3Q7CiAgICAgYm9vbCBjaGVja1Njcm9sbGJh
clBzZXVkb0NsYXNzKENTU1NlbGVjdG9yKiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0
OwogICAgIHN0YXRpYyBib29sIGlzRnJhbWVGb2N1c2VkKGNvbnN0IEVsZW1lbnQqKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126011</attachid>
            <date>2012-02-07 22:52:49 -0800</date>
            <delta_ts>2012-02-08 18:15:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77525-20120208155247.patch</filename>
            <type>text/plain</type>
            <size>50892</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2Nzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTdlZWI3OWNmOWI2YWE2
MDZjM2ViZmRjZjkwMzk2NTc5MDQxZjIyZS4uY2U0MDVmODMxNzk1NWQyY2JjMGFiZDYxZTAyOGFm
YTY0NzI4MzcxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAyLTA2ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcjogbW92ZSBwYXJhbWV0ZXJzIGludG8gYSBzdHJ1Y3QK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTI1CisK
KyAgICAgICAgQWRkZWQgJ1NlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JyBzdHJ1Y3QgdG8gaG9sZCBw
YXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uCisgICAgICAgIEFkYXB0ZWQgY2FsbGluZyBzaXRl
cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIChyZWZhY3RvcmluZykKKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3Ip
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAg
ICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCk6CisgICAgICAgIChTZWxlY3RvckNo
ZWNrZXIpOgorCiAyMDEyLTAyLTA1ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZW5hbWUgW0pTQ0N1c3RvbSpdIElETCB0byBbSlNDdXN0b20qXSBJREwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA4NmIwYWMzZTQ2NWVl
OGQ3MGFiYWM3NjBmNmU4OTgxMGRhZGI2MDM2Li4yYjZkZjhmMWVjMDVmNzczNmVjOTBmMmNhZDk0
YmVkNmJjMDI1ZTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBA
IC0yMDI4LDcgKzIwMjgsOCBAQCBpbmxpbmUgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1Nl
bGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKICAgICB9CiAKICAgICAvLyBTbG93IHBh
dGguCi0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2Vy
LmNoZWNrU2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFtaWNQ
c2V1ZG8sIGZhbHNlLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQsIHN0eWxl
KCksIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDApOworICAg
IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0
YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5h
YmxlZCwgc3R5bGUoKSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgp
IDogMCk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVj
a2VyLmNoZWNrU2VsZWN0b3IoY29udGV4dCwgbV9keW5hbWljUHNldWRvKTsKICAgICBpZiAobWF0
Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpZiAobV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8gJiYgbV9j
aGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gbV9keW5hbWljUHNldWRvKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCA1ODY3NzQ2NDdhMDg3ZDNhMGMyZDdmMjgyY2IzYmIw
MzM2Zjk0NDA1Li4wMzZlNWNjNTY1ZmJhMGNkYWE4YjY0NGZmMzI2MzEwYWIyMTc5NTUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtMjY4LDEzICsyNjgsMTQgQEAg
RUluc2lkZUxpbmsgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShF
bGVtZW50KiBlbGVtZW50KSBjb25zdAogCiBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxl
Y3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlbGVtZW50LCBib29sIGlzRmFzdENoZWNr
YWJsZVNlbGVjdG9yKSBjb25zdAogewotICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BT
RVVETzsKICAgICBpZiAoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgJiYgIWVsZW1lbnQtPmlzU1ZH
RWxlbWVudCgpKSB7CiAgICAgICAgIGlmICghZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3Ioc2Vs
LCBlbGVtZW50LCBWaXNpdGVkTWF0Y2hEaXNhYmxlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIHJldHVybiBmYXN0Q2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQpOwogICAg
IH0KLSAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIGR5bmFtaWNQc2V1ZG8s
IGZhbHNlLCBWaXNpdGVkTWF0Y2hEaXNhYmxlZCkgPT0gU2VsZWN0b3JNYXRjaGVzOworCisgICAg
UHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgIHJldHVybiBjaGVja1NlbGVj
dG9yKFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHNlbCwgZWxlbWVudCwgU2VsZWN0b3JDaGVja2Vy
OjpWaXNpdGVkTWF0Y2hEaXNhYmxlZCksIGR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hl
czsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTQ0MiwxMDIgKzQ0MywxMTAgQEAgYm9vbCBTZWxlY3Rv
ckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvcikKIC8vICogU2VsZWN0b3JGYWlsc0xvY2FsbHkgICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxz
IGZvciB0aGUgZWxlbWVudCBlCiAvLyAqIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyAtIHRoZSBz
ZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb2YgZQogLy8gKiBTZWxlY3RvckZh
aWxzQ29tcGxldGVseSAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5n
IG9yIGFuY2VzdG9yIG9mIGUKLVNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3Rv
ckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNl
dWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlw
ZSB2aXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHls
ZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAorU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1h
dGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5n
Q29udGV4dCYgY29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CiB7CiAjaWYg
RU5BQkxFKFNWRykKICAgICAvLyBTcGVjOiBDU1MyIHNlbGVjdG9ycyBjYW5ub3QgYmUgYXBwbGll
ZCB0byB0aGUgKGNvbmNlcHR1YWxseSkgY2xvbmVkIERPTSB0cmVlCiAgICAgLy8gYmVjYXVzZSBp
dHMgY29udGVudHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBmb3JtYWwgZG9jdW1lbnQgc3RydWN0dXJl
LgotICAgIGlmIChlLT5pc1NWR1NoYWRvd1Jvb3QoKSkKKyAgICBpZiAoY29udGV4dC5lbGVtZW50
LT5pc1NWR1NoYWRvd1Jvb3QoKSkKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5OwogI2VuZGlmCiAKICAgICAvLyBmaXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2gKLSAgICBp
ZiAoIWNoZWNrT25lU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9y
LCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCisg
ICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pKQogICAgICAg
ICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAKICAgICAvLyBUaGUgcmVzdCBvZiB0aGUg
c2VsZWN0b3JzIGhhcyB0byBtYXRjaAotICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlv
biA9IHNlbC0+cmVsYXRpb24oKTsKKyAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24g
PSBjb250ZXh0LnNlbGVjdG9yLT5yZWxhdGlvbigpOwogCi0gICAgLy8gUHJlcGFyZSBuZXh0IHNl
bAotICAgIHNlbCA9IHNlbC0+dGFnSGlzdG9yeSgpOwotICAgIGlmICghc2VsKQorICAgIC8vIFBy
ZXBhcmUgbmV4dCBzZWxlY3RvcgorICAgIENTU1NlbGVjdG9yKiBoaXN0b3J5U2VsZWN0b3IgPSBj
b250ZXh0LnNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CisgICAgaWYgKCFoaXN0b3J5U2VsZWN0b3Ip
CiAgICAgICAgIHJldHVybiBTZWxlY3Rvck1hdGNoZXM7CiAKKyAgICBWaXNpdGVkTWF0Y2hUeXBl
IG5ld1Zpc2l0ZWRNYXRjaFR5cGUgPSBjb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGU7CiAgICAgaWYg
KHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikgewogICAgICAgICAvLyBCYWls
LW91dCBpZiB0aGlzIHNlbGVjdG9yIGlzIGlycmVsZXZhbnQgZm9yIHRoZSBwc2V1ZG9TdHlsZQog
ICAgICAgICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX3BzZXVkb1N0eWxlICE9
IGR5bmFtaWNQc2V1ZG8pCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHk7CiAKICAgICAgICAgLy8gRGlzYWJsZSA6dmlzaXRlZCBtYXRjaGluZyB3aGVuIHdlIHNlZSB0
aGUgZmlyc3QgbGluayBvciB0cnkgdG8gbWF0Y2ggYW55dGhpbmcgZWxzZSB0aGFuIGFuIGFuY2Vz
dG9ycy4KLSAgICAgICAgaWYgKCFpc1N1YlNlbGVjdG9yICYmIChlLT5pc0xpbmsoKSB8fCAocmVs
YXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0
b3I6OkNoaWxkKSkpCi0gICAgICAgICAgICB2aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRlZE1hdGNo
RGlzYWJsZWQ7CisgICAgICAgIGlmICghY29udGV4dC5pc1N1YlNlbGVjdG9yICYmIChjb250ZXh0
LmVsZW1lbnQtPmlzTGluaygpIHx8IChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFu
dCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6Q2hpbGQpKSkKKyAgICAgICAgICAgIG5ld1Zp
c2l0ZWRNYXRjaFR5cGUgPSBWaXNpdGVkTWF0Y2hEaXNhYmxlZDsKICAgICB9CiAKICAgICBzd2l0
Y2ggKHJlbGF0aW9uKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKLSAgICAg
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBlLT5wYXJl
bnROb2RlKCk7Ci0gICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAg
ICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgU2VsZWN0b3JNYXRj
aCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlz
aXRlZE1hdGNoVHlwZSk7Ci0gICAgICAgICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVz
IHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQotICAgICAgICAgICAgICAgIHJl
dHVybiBtYXRjaDsKKyAgICAgICAgeworICAgICAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRl
eHQgY29tcG91bmRDb250ZXh0KGNvbnRleHQsIGhpc3RvcnlTZWxlY3RvciwgY29udGV4dC5lbGVt
ZW50LT5wYXJlbnRFbGVtZW50KCksIG5ld1Zpc2l0ZWRNYXRjaFR5cGUpOworICAgICAgICAgICAg
Zm9yICg7IGNvbXBvdW5kQ29udGV4dC5lbGVtZW50OyBjb21wb3VuZENvbnRleHQuZWxlbWVudCA9
IGNvbXBvdW5kQ29udGV4dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3Rvcihjb21wb3VuZENvbnRleHQs
IGR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9PSBTZWxlY3Rvck1h
dGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKwogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgogICAgICAgICB7Ci0gICAgICAgICAgICBDb250YWlu
ZXJOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5p
c0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb21w
b3VuZENvbnRleHQoY29udGV4dCwgaGlzdG9yeVNlbGVjdG9yLCBjb250ZXh0LmVsZW1lbnQtPnBh
cmVudEVsZW1lbnQoKSwgbmV3VmlzaXRlZE1hdGNoVHlwZSk7CisgICAgICAgICAgICBpZiAoIWNv
bXBvdW5kQ29udGV4dC5lbGVtZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZh
aWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7
Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8s
IGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVj
dG9yKGNvbXBvdW5kQ29udGV4dCwgZHluYW1pY1BzZXVkbyk7CiAgICAgICAgIH0KKwogICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50OgogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJl
bnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBh
cmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3Rp
bmdSdWxlc09ubHkgJiYgY29udGV4dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHls
ZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogY29udGV4dC5lbGVtZW50LT5wYXJlbnRO
b2RlKCktPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQog
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGly
ZWN0QWRqYWNlbnRSdWxlcygpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZSA9IGUtPnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGlmICghZSkKKyAgICAgICAgICAg
IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNvbXBvdW5kQ29udGV4dChjb250ZXh0LCBoaXN0b3J5
U2VsZWN0b3IsIGNvbnRleHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpLCBuZXdW
aXNpdGVkTWF0Y2hUeXBlKTsKKyAgICAgICAgICAgIGlmICghY29tcG91bmRDb250ZXh0LmVsZW1l
bnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKLSAg
ICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFs
c2UsIHZpc2l0ZWRNYXRjaFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Io
Y29tcG91bmRDb250ZXh0LCBkeW5hbWljUHNldWRvKTsKICAgICAgICAgfQorCiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGlu
Z1J1bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1l
bnROb2RlKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1l
bnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5
bGUoKTsKLSAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICBwYXJl
bnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYmIGNv
bnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1l
bnRQYXJlbnRTdHlsZSA6IGNvbnRleHQuZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHls
ZSgpOworICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAg
ICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVs
ZXMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
IGNvbXBvdW5kQ29udGV4dChjb250ZXh0LCBoaXN0b3J5U2VsZWN0b3IsIGNvbnRleHQuZWxlbWVu
dC0+cHJldmlvdXNFbGVtZW50U2libGluZygpLCBuZXdWaXNpdGVkTWF0Y2hUeXBlKTsKKyAgICAg
ICAgICAgIGZvciAoOyBjb21wb3VuZENvbnRleHQuZWxlbWVudDsgY29tcG91bmRDb250ZXh0LmVs
ZW1lbnQgPSBjb21wb3VuZENvbnRleHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygp
KSB7CisgICAgICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Io
Y29tcG91bmRDb250ZXh0LCBkeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgICAgICBpZiAobWF0
Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5n
cyB8fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiBTZWxl
Y3RvckZhaWxzQWxsU2libGluZ3M7CiAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgICAgICAgIGUgPSBlLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7Ci0gICAgICAgICAg
ICBpZiAoIWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5n
czsKLSAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBjaGVja1NlbGVjdG9yKHNlbCwg
ZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIHZpc2l0ZWRNYXRjaFR5cGUpOwotICAgICAgICAgICAg
aWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQWxs
U2libGluZ3MgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1hdGNoOwotICAgICAgICB9OwotICAgICAgICBicmVhazsKKwogICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOgotICAgICAgICAvLyBhIHNlbGVjdG9yIGlzIGlu
dmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAotICAgICAgICAvLyBX
ZSBtYWtlIGFuIGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBhbmQgYWxs
b3cgYSBzZXQgb2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCi0gICAgICAgIC8v
IHRvIGZvbGxvdyB0aGUgcHNldWRvIGVsZW1lbnRzLgotICAgICAgICBpZiAoKGVsZW1lbnRTdHls
ZSB8fCBtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVE
TyAmJiBkeW5hbWljUHNldWRvICE9IFNFTEVDVElPTgotICAgICAgICAgICAgICYmICEoKFJlbmRl
clNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9
PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYgc2VsLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCi0gICAgICAgICAgICByZXR1cm4g
U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNl
bCwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxl
LCBlbGVtZW50UGFyZW50U3R5bGUpOworICAgICAgICB7CisgICAgICAgICAgICAvLyBhIHNlbGVj
dG9yIGlzIGludmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAorICAg
ICAgICAgICAgLy8gV2UgbWFrZSBhbiBleGNlcHRpb24gZm9yIHNjcm9sbGJhciBwc2V1ZG8gZWxl
bWVudHMgYW5kIGFsbG93IGEgc2V0IG9mIHBzZXVkbyBjbGFzc2VzIChidXQgbm90aGluZyBlbHNl
KQorICAgICAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBwc2V1ZG8gZWxlbWVudHMuCisgICAgICAg
ICAgICBpZiAoKGNvbnRleHQuZWxlbWVudFN0eWxlIHx8IG1faXNDb2xsZWN0aW5nUnVsZXNPbmx5
KSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIGR5bmFtaWNQc2V1ZG8gIT0gU0VMRUNU
SU9OCisgICAgICAgICAgICAgICAgICYmICEoKFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9y
U3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5
bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYgY29udGV4dC5zZWxlY3Rvci0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQorICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHN1
YkNvbnRleHQoY29udGV4dCwgaGlzdG9yeVNlbGVjdG9yLCBuZXdWaXNpdGVkTWF0Y2hUeXBlKTsK
KyAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHN1YkNvbnRleHQsIGR5bmFtaWNQc2V1
ZG8pOworICAgICAgICB9CisKICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50
OgogICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlKiBzaGFkb3dIb3N0Tm9kZSA9IGUtPnNoYWRv
d0FuY2VzdG9yTm9kZSgpOwotICAgICAgICAgICAgaWYgKHNoYWRvd0hvc3ROb2RlID09IGUgfHwg
IXNoYWRvd0hvc3ROb2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBOb2RlKiBzaGFk
b3dIb3N0Tm9kZSA9IGNvbnRleHQuZWxlbWVudC0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAg
ICAgICAgICBpZiAoc2hhZG93SG9zdE5vZGUgPT0gY29udGV4dC5lbGVtZW50IHx8ICFzaGFkb3dI
b3N0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
c2hhZG93SG9zdE5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBl
LCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7CisgICAgICAgICAgICBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb21wb3VuZENvbnRleHQoY29udGV4dCwgaGlzdG9yeVNl
bGVjdG9yLCB0b0VsZW1lbnQoc2hhZG93SG9zdE5vZGUpLCBuZXdWaXNpdGVkTWF0Y2hUeXBlKTsK
KyAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKGNvbXBvdW5kQ29udGV4dCwgZHluYW1p
Y1BzZXVkbyk7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CiB9CiAKQEAgLTY4Niw2NCArNjk1
LDY4IEBAIHN0YXRpYyBib29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoTmFtZWROb2RlTWFwKiBhdHRy
aWJ1dGVzLCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBF
bGVtZW50KiBlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBW
aXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5
bGUsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0Citib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYg
Y29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGUp
OwotICAgIGlmICghU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKGUsIHNlbCkpCisgICAgRWxl
bWVudCogY29uc3QgJiBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50OworICAgIENTU1NlbGVjdG9y
KiBjb25zdCAmIHNlbGVjdG9yID0gY29udGV4dC5zZWxlY3RvcjsKKyAgICBBU1NFUlQoZWxlbWVu
dCk7CisgICAgQVNTRVJUKHNlbGVjdG9yKTsKKworICAgIGlmICghU2VsZWN0b3JDaGVja2VyOjp0
YWdNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCi0gICAgICAgIHJldHVy
biBlLT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlKS0+Y2xhc3NO
YW1lcygpLmNvbnRhaW5zKHNlbC0+dmFsdWUoKSk7CisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpDbGFzcykKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0NsYXNz
KCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCku
Y29udGFpbnMoc2VsZWN0b3ItPnZhbHVlKCkpOwogCi0gICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6SWQpCi0gICAgICAgIHJldHVybiBlLT5oYXNJRCgpICYmIGUtPmlkRm9yU3R5
bGVSZXNvbHV0aW9uKCkgPT0gc2VsLT52YWx1ZSgpOworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6SWQpCisgICAgICAgIHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYm
IGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gc2VsZWN0b3ItPnZhbHVlKCk7CiAK
LSAgICBpZiAoc2VsLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpIHsKLSAgICAgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ciA9IHNlbC0+YXR0cmlidXRlKCk7CisgICAgaWYgKHNlbGVjdG9yLT5p
c0F0dHJpYnV0ZVNlbGVjdG9yKCkpIHsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ciA9IHNlbGVjdG9yLT5hdHRyaWJ1dGUoKTsKIAotICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJp
YnV0ZXMgPSBlLT51cGRhdGVkQXR0cmlidXRlcygpOworICAgICAgICBOYW1lZE5vZGVNYXAqIGF0
dHJpYnV0ZXMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOwogICAgICAgICBpZiAoIWF0
dHJpYnV0ZXMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgYm9vbCBjYXNl
U2Vuc2l0aXZlID0gIW1fZG9jdW1lbnRJc0hUTUwgfHwgIWh0bWxBdHRyaWJ1dGVIYXNDYXNlSW5z
ZW5zaXRpdmVWYWx1ZShhdHRyKTsKIAotICAgICAgICBpZiAoIWFueUF0dHJpYnV0ZU1hdGNoZXMo
YXR0cmlidXRlcywgc3RhdGljX2Nhc3Q8Q1NTU2VsZWN0b3I6Ok1hdGNoPihzZWwtPm1fbWF0Y2gp
LCBhdHRyLCBzZWwtPnZhbHVlKCksIGNhc2VTZW5zaXRpdmUpKQorICAgICAgICBpZiAoIWFueUF0
dHJpYnV0ZU1hdGNoZXMoYXR0cmlidXRlcywgc3RhdGljX2Nhc3Q8Q1NTU2VsZWN0b3I6Ok1hdGNo
PihzZWxlY3Rvci0+bV9tYXRjaCksIGF0dHIsIHNlbGVjdG9yLT52YWx1ZSgpLCBjYXNlU2Vuc2l0
aXZlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoc2VsLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykgeworICAgIGlmIChzZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKICAgICAgICAgLy8gSGFuZGxl
IDpub3QgdXAgZnJvbnQuCi0gICAgICAgIGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvTm90KSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2VsLT5zZWxlY3Rvckxpc3Qo
KSk7Ci0gICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzdWJTZWwgPSBzZWwtPnNlbGVjdG9y
TGlzdCgpLT5maXJzdCgpOyBzdWJTZWw7IHN1YlNlbCA9IHN1YlNlbC0+dGFnSGlzdG9yeSgpKSB7
CisgICAgICAgIGlmIChzZWxlY3Rvci0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1
ZG9Ob3QpIHsKKyAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkpOwor
ICAgICAgICAgICAgZm9yIChTZWxlY3RvckNoZWNraW5nQ29udGV4dCBzdWJDb250ZXh0KGNvbnRl
eHQsIHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKSwgY29udGV4dC52aXNpdGVkTWF0
Y2hUeXBlKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IHN1YkNv
bnRleHQuc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewogICAgICAgICAgICAgICAgIC8vIDpub3Qg
Y2Fubm90IG5lc3QuIEkgZG9uJ3QgcmVhbGx5IGtub3cgd2h5IHRoaXMgaXMgYQogICAgICAgICAg
ICAgICAgIC8vIHJlc3RyaWN0aW9uIGluIENTUzMsIGJ1dCBpdCBpcywgc28gbGV0J3MgaG9ub3Ig
aXQuCiAgICAgICAgICAgICAgICAgLy8gdGhlIHBhcnNlciBlbmZvcmNlcyB0aGF0IHRoaXMgbmV2
ZXIgb2NjdXJzCi0gICAgICAgICAgICAgICAgQVNTRVJUKHN1YlNlbC0+cHNldWRvVHlwZSgpICE9
IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdWJDb250
ZXh0LnNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkgIT0gQ1NTU2VsZWN0b3I6OlBzZXVkb05vdCk7CiAg
ICAgICAgICAgICAgICAgLy8gV2Ugc2VsZWN0IGJldHdlZW4gOnZpc2l0ZWQgYW5kIDpsaW5rIHdo
ZW4gYXBwbHlpbmcuIFdlIGRvbid0IGtub3cgd2hpY2ggb25lIGFwcGxpZWQgKG9yIG5vdCkgeWV0
LgotICAgICAgICAgICAgICAgIGlmIChzdWJTZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvVmlzaXRlZCB8fCAoc3ViU2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0xpbmsgJiYgdmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkKSkK
KyAgICAgICAgICAgICAgICBpZiAoc3ViQ29udGV4dC5zZWxlY3Rvci0+cHNldWRvVHlwZSgpID09
IENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkIHx8IChzdWJDb250ZXh0LnNlbGVjdG9yLT5wc2V1
ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbmsgJiYgc3ViQ29udGV4dC52aXNpdGVk
TWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc3ViU2Vs
LCBlLCBkeW5hbWljUHNldWRvLCB0cnVlLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5bGUs
IGVsZW1lbnRQYXJlbnRTdHlsZSkpCisgICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVj
dG9yKHN1YkNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChkeW5hbWljUHNldWRv
ICE9IE5PUFNFVURPICYmIChSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2
ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRv
ID09IFJFU0laRVIpKSB7CiAgICAgICAgICAgICAvLyBDU1Mgc2Nyb2xsYmFycyBtYXRjaCBhIHNw
ZWNpZmljIHN1YnNldCBvZiBwc2V1ZG8gY2xhc3NlcywgYW5kIHRoZXkgaGF2ZSBzcGVjaWFsaXpl
ZCBydWxlcyBmb3IgZWFjaAogICAgICAgICAgICAgLy8gKHNpbmNlIHRoZXJlIGFyZSBubyBlbGVt
ZW50cyBpbnZvbHZlZCkuCi0gICAgICAgICAgICByZXR1cm4gY2hlY2tTY3JvbGxiYXJQc2V1ZG9D
bGFzcyhzZWwsIGR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2Nyb2xs
YmFyUHNldWRvQ2xhc3Moc2VsZWN0b3IsIGR5bmFtaWNQc2V1ZG8pOwogICAgICAgICB9IGVsc2Ug
aWYgKGR5bmFtaWNQc2V1ZG8gPT0gU0VMRUNUSU9OKSB7Ci0gICAgICAgICAgICBpZiAoc2VsLT5w
c2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1dpbmRvd0luYWN0aXZlKQorICAgICAg
ICAgICAgaWYgKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1dp
bmRvd0luYWN0aXZlKQogICAgICAgICAgICAgICAgIHJldHVybiAhbV9kb2N1bWVudC0+cGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IE5vcm1hbCBlbGVtZW50IHBzZXVkbyBjbGFzcyBjaGVja2luZy4KLSAgICAgICAgc3dpdGNoIChz
ZWwtPnBzZXVkb1R5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBl
KCkpIHsKICAgICAgICAgICAgIC8vIFBzZXVkbyBjbGFzc2VzOgogICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9Ob3Q6CiAgICAgICAgICAgICBicmVhazsgLy8gQWxyZWFkeSBoYW5kbGVk
IHVwIGFib3ZlLgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbXB0eToKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgZm9yIChOb2RlKiBuID0gZS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxp
bmcoKSkgeworICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGVsZW1lbnQtPmZpcnN0Q2hp
bGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KG4tPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTc1NywyMiArNzcwLDIy
IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBz
ZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25s
eSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRFbXB0eVN0YXRlKHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkgJiYgKGUtPmRvY3VtZW50KCkt
PnVzZXNTaWJsaW5nUnVsZXMoKSB8fCBlLT5yZW5kZXJTdHlsZSgpLT51bmlxdWUoKSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRFbXB0eVN0YXRlKHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRTdHlsZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRFbXB0eVN0YXRlKHJl
c3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPnJlbmRlclN0eWxl
KCkgJiYgKGVsZW1lbnQtPmRvY3VtZW50KCktPnVzZXNTaWJsaW5nUnVsZXMoKSB8fCBlbGVtZW50
LT5yZW5kZXJTdHlsZSgpLT51bmlxdWUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50LT5yZW5kZXJTdHlsZSgpLT5zZXRFbXB0eVN0YXRlKHJlc3VsdCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0Q2hpbGQ6CiAgICAgICAgICAgICAvLyBm
aXJzdC1jaGlsZCBtYXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKLSAg
ICAgICAgICAgIGlmIChlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChlbGVt
ZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZh
bHNlOwotICAgICAgICAgICAgICAgIGlmICghZS0+cHJldmlvdXNFbGVtZW50U2libGluZygpKQor
ICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKQog
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmICgh
bV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJT
dHlsZSgpOwotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBl
bGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRl
clN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0g
Y29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJl
bmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBl
bGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCAmJiBjaGlsZFN0eWxlKQpAQCAtNzgzLDE3ICs3OTYsMTcgQEAgYm9vbCBT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVu
dCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZToKICAgICAgICAgICAgIC8vIGZpcnN0LW9mLXR5cGUg
bWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQotICAgICAgICAgICAgaWYgKGUt
PnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPnBhcmVudEVsZW1l
bnQoKSkgewogICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlLT5wcmV2aW91c0VsZW1lbnRT
aWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJs
aW5nKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZWxl
bWVudC0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNp
YmxpbmcgPSBlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxp
bmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUg
OiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5l
bGVtZW50UGFyZW50U3R5bGUgOiBlbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25h
bFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtODAyLDExICs4MTUsMTEgQEAgYm9vbCBT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVu
dCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9MYXN0Q2hpbGQ6CiAgICAgICAgICAgICAvLyBsYXN0LWNoaWxkIG1hdGNo
ZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50Ci0gICAgICAgICAgICBpZiAoRWxl
bWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAg
ICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJl
bigpICYmICFlLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKKyAgICAgICAgICAgIGlmIChFbGVtZW50
KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYm9vbCByZXN1bHQgPSBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxk
cmVuKCkgJiYgIWVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOwogICAgICAgICAgICAgICAg
IGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5y
ZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5y
ZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHls
ZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50
LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxl
IDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENo
aWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQgJiYgY2hpbGRTdHlsZSkKQEAgLTgxNywxNiArODMwLDE2IEBAIGJvb2wgU2VsZWN0
b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUs
IFBzZXVkb0lkJiBkCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvTGFzdE9mVHlwZToKICAgICAgICAgICAgIC8vIGxhc3Qtb2YtdHlwZSBtYXRjaGVz
IHRoZSBsYXN0IGVsZW1lbnQgb2YgaXRzIHR5cGUKLSAgICAgICAgICAgIGlmIChFbGVtZW50KiBw
YXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoRWxl
bWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAg
ICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBh
cmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBj
b250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9u
YWxSdWxlcygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXBhcmVu
dEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5
cGUgPSBlLT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCog
c2libGluZyA9IGUtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2li
bGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAgICAgICBm
b3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmco
KTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KQEAgLTgz
NCwxMyArODQ3LDEzIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENT
U1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seUNo
aWxkOgotICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRF
bGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSAhZS0+cHJldmlv
dXNFbGVtZW50U2libGluZygpOwotICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxkID0gZmly
c3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYg
IWUtPm5leHRFbGVtZW50U2libGluZygpOworICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVu
dEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBi
b29sIGZpcnN0Q2hpbGQgPSAhZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOworICAg
ICAgICAgICAgICAgIGJvb2wgb25seUNoaWxkID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50
LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgIWVsZW1lbnQtPm5leHRFbGVtZW50U2li
bGluZygpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkg
ewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1lbnRT
dHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJl
bnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250
ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8g
Y29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgp
OwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVs
ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFm
ZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpOwpAQCAtODU1LDkgKzg2OCw5IEBAIGJvb2wgU2VsZWN0
b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUs
IFBzZXVkb0lkJiBkCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvT25seU9mVHlwZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlbGVjdG9y
IGlzIHZlcnkgc2xvdy4KLSAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0g
ZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxl
bWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGlmICgh
bV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFy
ZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQ
YXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYXJlbnRTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlC
YWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwpAQCAtODY1LDEyICs4NzgsMTIgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCog
ZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFw
YXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1l
JiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1l
bnQqIHNpYmxpbmcgPSBlLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxp
bmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5wcmV2aW91
c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0Vs
ZW1lbnRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1Rh
Z05hbWUodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGlu
ZyA9IGUtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+
bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1l
bnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2li
bGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KQEAgLTg3OCwxMSArODkxLDExIEBA
IGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWws
IEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoQ2hpbGQ6Ci0gICAgICAgICAg
ICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKKyAgICAgICAgICAgIGlmICghc2VsZWN0b3ItPnBhcnNl
TnRoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoRWxlbWVudCog
cGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAg
ICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgRWxl
bWVudCogc2libGluZyA9IGUtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2li
bGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVu
dFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNp
YmxpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcyA9IHNpYmxpbmct
PnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gcyA/
IHMtPmNoaWxkSW5kZXgoKSA6IDA7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCkgewpA
QCAtODkzLDIwOCArOTA2LDIwOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxl
Y3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkp
IHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50
U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFy
ZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29u
dGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/
IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUo
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkU3R5bGUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGlsZFN0eWxlLT5zZXRDaGlsZEluZGV4KGNvdW50KTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5
bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoc2VsLT5tYXRjaE50aChjb3VudCkp
CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aE9mVHlwZToKLSAgICAgICAg
ICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFy
c2VOdGgoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChFbGVtZW50
KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAo
RWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAg
ICAgICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25z
dCBFbGVtZW50KiBzaWJsaW5nID0gZS0+cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5n
OyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGVsZW1lbnQtPnRhZ1FOYW1lKCk7
CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+
cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5n
LT5oYXNUYWdOYW1lKHR5cGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgKytjb3VudDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVz
T25seSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBl
bGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJT
dHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBj
b250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50
RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0
eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZm
ZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBpZiAoc2VsLT5tYXRjaE50aChjb3VudCkpCisgICAgICAgICAgICAgICAg
aWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RDaGlsZDoKLSAgICAgICAgICAgIGlmICghc2VsLT5w
YXJzZU50aCgpKQorICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50
ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50
RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGlm
ICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDog
cGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1l
bnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlz
RmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgZm9y
IChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZS0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxp
bmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkKKyAgICAgICAgICAg
ICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNp
YmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygp
KQogICAgICAgICAgICAgICAgICAgICArK2NvdW50OwotICAgICAgICAgICAgICAgIGlmIChzZWwt
Pm1hdGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoTnRo
KGNvdW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRo
TGFzdE9mVHlwZToKLSAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQorICAgICAgICAg
ICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgp
KSB7CisgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBh
cmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxl
c09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
ZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
Y29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVu
dEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRT
dHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFm
ZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRy
ZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAg
IGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlw
ZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBz
aWJsaW5nID0gZS0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJs
aW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50LT50YWdRTmFtZSgpOworICAgICAgICAgICAgICAgIGZv
ciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygp
OyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoc2VsLT5tYXRjaE50aChjb3VudCkpCisgICAgICAgICAgICAgICAgaWYgKHNlbGVj
dG9yLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb1RhcmdldDoKLSAgICAgICAgICAgIGlmIChlID09IGUtPmRvY3VtZW50KCktPmNz
c1RhcmdldCgpKQorICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55OgotICAgICAgICAg
ICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWwtPnNlbGVjdG9yTGlzdCgpLT5maXJz
dCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3Ip
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsIGUsIGR5bmFt
aWNQc2V1ZG8sIHRydWUsIHZpc2l0ZWRNYXRjaFR5cGUsIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBh
cmVudFN0eWxlKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICBmb3IgKFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCwgc2VsZWN0b3ItPnNlbGVjdG9yTGlz
dCgpLT5maXJzdCgpLCBjb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUpOyBzdWJDb250ZXh0LnNlbGVj
dG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YkNvbnRl
eHQuc2VsZWN0b3IpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3Ioc3ViQ29u
dGV4dCwgZHluYW1pY1BzZXVkbykgPT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BdXRvZmlsbDoKLSAgICAgICAgICAgIGlmICgh
ZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGlmICghZWxlbWVu
dCB8fCAhZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBl
LT50b0lucHV0RWxlbWVudCgpKQorICAgICAgICAgICAgaWYgKEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGlucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVkKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55TGluazoKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvTGluazoKICAgICAgICAgICAgIC8vIDp2aXNpdGVkIGFuZCA6bGlu
ayBtYXRjaGVzIGFyZSBzZXBhcmF0ZWQgbGF0ZXIgd2hlbiBhcHBseWluZyB0aGUgc3R5bGUuIEhl
cmUgYm90aCBjbGFzc2VzIG1hdGNoIGFsbCBsaW5rcy4uLgotICAgICAgICAgICAgcmV0dXJuIGUt
PmlzTGluaygpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzTGluaygpOwogICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgogICAgICAgICAgICAgLy8gLi4uZXhj
ZXB0IGlmIDp2aXNpdGVkIG1hdGNoaW5nIGlzIGRpc2FibGVkIGZvciBhbmNlc3Rvci9zaWJsaW5n
IG1hdGNoaW5nLgotICAgICAgICAgICAgcmV0dXJuIGUtPmlzTGluaygpICYmIHZpc2l0ZWRNYXRj
aFR5cGUgPT0gVmlzaXRlZE1hdGNoRW5hYmxlZDsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50
LT5pc0xpbmsoKSAmJiBjb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoRW5h
YmxlZDsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRHJhZzoKLSAgICAgICAgICAg
IGlmIChlbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZl
Y3RlZEJ5RHJhZ1J1bGVzKHRydWUpOwotICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5
bGUoKSkKLSAgICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5RHJh
Z1J1bGVzKHRydWUpOwotICAgICAgICAgICAgaWYgKGUtPnJlbmRlcmVyKCkgJiYgZS0+cmVuZGVy
ZXIoKS0+aXNEcmFnZ2luZygpKQorICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxl
KQorICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5RHJh
Z1J1bGVzKHRydWUpOworICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+cmVuZGVyU3R5bGUo
KSkKKyAgICAgICAgICAgICAgICBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5
RHJhZ1J1bGVzKHRydWUpOworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkgJiYg
ZWxlbWVudC0+cmVuZGVyZXIoKS0+aXNEcmFnZ2luZygpKQogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0ZvY3VzOgotICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGUp
OworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGVsZW1lbnQpOwog
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjoKICAgICAgICAgICAgIC8vIElm
IHdlJ3JlIGluIHF1aXJrcyBtb2RlLCB0aGVuIGhvdmVyIHNob3VsZCBuZXZlciBtYXRjaCBhbmNo
b3JzIHdpdGggbm8KICAgICAgICAgICAgIC8vIGhyZWYgYW5kICo6aG92ZXIgc2hvdWxkIG5vdCBt
YXRjaCBhbnl0aGluZy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHNpdGVzIGxpa2Ugd3NqLmNvbS4K
LSAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwgaXNTdWJTZWxlY3RvciB8fCAoc2Vs
LT5oYXNUYWcoKSAmJiAhZS0+aGFzVGFnTmFtZShhVGFnKSkgfHwgZS0+aXNMaW5rKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50U3R5bGUtPnNldEFmZmVjdGVkQnlIb3ZlclJ1bGVzKHRydWUpOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgICAgIGUtPnJlbmRl
clN0eWxlKCktPnNldEFmZmVjdGVkQnlIb3ZlclJ1bGVzKHRydWUpOwotICAgICAgICAgICAgICAg
IGlmIChlLT5ob3ZlcmVkKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVk
b1N0YXRlKGUsIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcikpCisgICAgICAgICAgICBpZiAobV9z
dHJpY3RQYXJzaW5nIHx8IGNvbnRleHQuaXNTdWJTZWxlY3RvciB8fCAoc2VsZWN0b3ItPmhhc1Rh
ZygpICYmICFlbGVtZW50LT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBlbGVtZW50LT5pc0xpbmsoKSkg
eworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRTdHlsZSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlIb3ZlclJ1bGVzKHRy
dWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPnJlbmRlclN0eWxlKCkpCisg
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlI
b3ZlclJ1bGVzKHRydWUpOworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkg
fHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGVsZW1lbnQsIENT
U1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0FjdGl2ZToKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGluIHF1aXJrcyBt
b2RlLCB0aGVuIDphY3RpdmUgc2hvdWxkIG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0aCBubwogICAg
ICAgICAgICAgLy8gaHJlZiBhbmQgKjphY3RpdmUgc2hvdWxkIG5vdCBtYXRjaCBhbnl0aGluZy4K
LSAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwgaXNTdWJTZWxlY3RvciB8fCAoc2Vs
LT5oYXNUYWcoKSAmJiAhZS0+aGFzVGFnTmFtZShhVGFnKSkgfHwgZS0+aXNMaW5rKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50U3R5bGUtPnNldEFmZmVjdGVkQnlBY3RpdmVSdWxlcyh0cnVlKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpKQotICAgICAgICAgICAgICAgICAgICBlLT5yZW5k
ZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGUtPmFjdGl2ZSgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1
ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlKSkKKyAgICAgICAgICAgIGlmICht
X3N0cmljdFBhcnNpbmcgfHwgY29udGV4dC5pc1N1YlNlbGVjdG9yIHx8IChzZWxlY3Rvci0+aGFz
VGFnKCkgJiYgIWVsZW1lbnQtPmhhc1RhZ05hbWUoYVRhZykpIHx8IGVsZW1lbnQtPmlzTGluaygp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQorICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVz
KHRydWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPnJlbmRlclN0eWxlKCkp
CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVk
QnlBY3RpdmVSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+YWN0aXZl
KCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGVsZW1lbnQs
IENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9FbmFibGVkOgotICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNGb3Jt
Q29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZS0+aXNFbmFibGVkRm9y
bUNvbnRyb2woKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzRW5hYmxl
ZEZvcm1Db250cm9sKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRnVsbFBhZ2VNZWRpYToKLSAgICAgICAgICAgIHJldHVybiBlICYmIGUtPmRv
Y3VtZW50KCkgJiYgZS0+ZG9jdW1lbnQoKS0+aXNNZWRpYURvY3VtZW50KCk7CisgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpICYmIGVsZW1lbnQtPmRvY3Vt
ZW50KCktPmlzTWVkaWFEb2N1bWVudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZSAmJiBl
LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudCAm
JiBlbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCk7CiAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0Rpc2FibGVkOgotICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gIWUtPmlzRW5hYmxlZEZvcm1D
b250cm9sKCk7CisgICAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAhZWxlbWVudC0+aXNFbmFibGVk
Rm9ybUNvbnRyb2woKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9SZWFkT25seToKLSAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNG
b3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICByZXR1cm4gZS0+aXNUZXh0Rm9ybUNvbnRyb2woKSAmJiBlLT5pc1JlYWRPbmx5Rm9y
bUNvbnRyb2woKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5pc1RleHRGb3JtQ29udHJv
bCgpICYmIGVsZW1lbnQtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgpOwogICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9SZWFkV3JpdGU6Ci0gICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1l
bnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgcmV0dXJuIGUtPmlzVGV4dEZvcm1Db250cm9sKCkgJiYgIWUtPmlzUmVh
ZE9ubHlGb3JtQ29udHJvbCgpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzVGV4dEZv
cm1Db250cm9sKCkgJiYgIWVsZW1lbnQtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgpOwogICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9PcHRpb25hbDoKLSAgICAgICAgICAgIHJldHVybiBl
ICYmIGUtPmlzT3B0aW9uYWxGb3JtQ29udHJvbCgpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1l
bnQgJiYgZWxlbWVudC0+aXNPcHRpb25hbEZvcm1Db250cm9sKCk7CiAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb1JlcXVpcmVkOgotICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+aXNS
ZXF1aXJlZEZvcm1Db250cm9sKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVt
ZW50LT5pc1JlcXVpcmVkRm9ybUNvbnRyb2woKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvVmFsaWQ6Ci0gICAgICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICBpZiAoIWVsZW1l
bnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZS0+ZG9jdW1l
bnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKLSAgICAgICAgICAgIHJldHVy
biBlLT53aWxsVmFsaWRhdGUoKSAmJiBlLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCk7Cisg
ICAgICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVS
dWxlcygpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPndpbGxWYWxpZGF0ZSgpICYmIGVs
ZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKTsKICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvSW52YWxpZDoKLSAgICAgICAgICAgIGlmICghZSkKKyAgICAgICAgICAgIGlm
ICghZWxlbWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBl
LT5kb2N1bWVudCgpLT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOwotICAgICAgICAg
ICAgcmV0dXJuIChlLT53aWxsVmFsaWRhdGUoKSAmJiAhZS0+aXNWYWxpZEZvcm1Db250cm9sRWxl
bWVudCgpKSB8fCBlLT5oYXNVbmFjY2VwdGFibGVWYWx1ZSgpOworICAgICAgICAgICAgZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKKyAgICAgICAg
ICAgIHJldHVybiAoZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkgJiYgIWVsZW1lbnQtPmlzVmFsaWRG
b3JtQ29udHJvbEVsZW1lbnQoKSkgfHwgZWxlbWVudC0+aGFzVW5hY2NlcHRhYmxlVmFsdWUoKTsK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2hlY2tlZDoKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisg
ICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAvLyBF
dmVuIHRob3VnaCBXaW5JRSBhbGxvd3MgY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZSB0byBjby1l
eGlzdCwgdGhlIENTUyBzZWxlY3RvciBzcGVjIHNheXMgdGhhdAogICAgICAgICAgICAgICAgIC8v
IHlvdSBjYW4ndCBiZSBib3RoIGNoZWNrZWQgYW5kIGluZGV0ZXJtaW5hdGUuIFdlIHdpbGwgYmVo
YXZlIGxpa2UgV2luSUUgYmVoaW5kIHRoZSBzY2VuZXMgYW5kIGp1c3QKICAgICAgICAgICAgICAg
ICAvLyBvYmV5IHRoZSBDU1Mgc3BlYyBoZXJlIGluIHRoZSB0ZXN0IGZvciBtYXRjaGluZyB0aGUg
cHNldWRvLgotICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IGUtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICAgICAgICAgICAg
ICBpZiAoaW5wdXRFbGVtZW50ICYmIGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgp
ICYmICFpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShvcHRpb25U
YWcpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZSktPnNlbGVjdGVkKCkpCisgICAgICAgICAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSAmJiB0b0hUTUxPcHRpb25FbGVt
ZW50KGVsZW1lbnQpLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvSW5kZXRlcm1pbmF0ZToKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAg
ICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotICAg
ICAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgewotICAgICAgICAg
ICAgICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBwcm9ncmVzcyA9IHN0YXRpY19jYXN0PEhU
TUxQcm9ncmVzc0VsZW1lbnQqPihlKTsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShwcm9ncmVzc1RhZykpIHsKKyAgICAgICAgICAgICAgICAgICAgSFRNTFByb2dyZXNz
RWxlbWVudCogcHJvZ3Jlc3MgPSBzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oZWxl
bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyAmJiAhcHJvZ3Jlc3MtPmlz
RGV0ZXJtaW5hdGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAg
ICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxl
bWVudCgpOworICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxl
bWVudCAmJiBpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUm9vdDoKLSAgICAgICAgICAgIGlmIChl
ID09IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICAgICAgaWYgKGVs
ZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvTGFuZzoKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBB
dG9taWNTdHJpbmcgdmFsdWUgPSBlLT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsKLSAgICAg
ICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyZ3VtZW50ID0gc2VsLT5hcmd1bWVudCgp
OworICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyB2YWx1ZSA9IGVsZW1lbnQtPmNvbXB1dGVJ
bmhlcml0ZWRMYW5ndWFnZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
YXJndW1lbnQgPSBzZWxlY3Rvci0+YXJndW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAodmFs
dWUuaXNFbXB0eSgpIHx8ICF2YWx1ZS5zdGFydHNXaXRoKGFyZ3VtZW50LCBmYWxzZSkpCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgo
KSAhPSBhcmd1bWVudC5sZW5ndGgoKSAmJiB2YWx1ZVthcmd1bWVudC5sZW5ndGgoKV0gIT0gJy0n
KQpAQCAtMTEwNywzNCArMTEyMCwzNCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVT
ZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAg
ICAgICAgLy8gZWxlbWVudCBpcyBhbiBlbGVtZW50IGluIHRoZSBkb2N1bWVudCwgdGhlICdmdWxs
LXNjcmVlbicgcHNldWRvY2xhc3MgYXBwbGllcyB0bwogICAgICAgICAgICAgLy8gdGhhdCBlbGVt
ZW50LiBBbHNvLCBhbiA8aWZyYW1lPiwgPG9iamVjdD4gb3IgPGVtYmVkPiBlbGVtZW50IHdob3Nl
IGNoaWxkIGJyb3dzaW5nCiAgICAgICAgICAgICAvLyBjb250ZXh0J3MgRG9jdW1lbnQgaXMgaW4g
dGhlIGZ1bGxzY3JlZW4gc3RhdGUgaGFzIHRoZSAnZnVsbC1zY3JlZW4nIHBzZXVkb2NsYXNzIGFw
cGxpZWQuCi0gICAgICAgICAgICBpZiAoZS0+aXNGcmFtZUVsZW1lbnRCYXNlKCkgJiYgc3RhdGlj
X2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2UqPihlKS0+Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVu
dCgpKQorICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzRnJhbWVFbGVtZW50QmFzZSgpICYmIHN0
YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4oZWxlbWVudCktPmNvbnRhaW5zRnVsbFNj
cmVlbkVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IGlmICghZS0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2NyZWVuKCkpCisgICAgICAgICAgICBp
ZiAoIWVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBlID09IGUtPmRvY3VtZW50
KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpOworICAgICAgICAgICAgcmV0dXJu
IGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5F
bGVtZW50KCk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FuaW1hdGluZ0Z1bGxT
Y3JlZW5UcmFuc2l0aW9uOgotICAgICAgICAgICAgaWYgKGUgIT0gZS0+ZG9jdW1lbnQoKS0+d2Vi
a2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkpCisgICAgICAgICAgICBpZiAoZWxlbWVudCAh
PSBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gZS0+ZG9j
dW1lbnQoKS0+aXNBbmltYXRpbmdGdWxsU2NyZWVuKCk7CisgICAgICAgICAgICByZXR1cm4gZWxl
bWVudC0+ZG9jdW1lbnQoKS0+aXNBbmltYXRpbmdGdWxsU2NyZWVuKCk7CiAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0Z1bGxTY3JlZW5BbmNlc3RvcjoKLSAgICAgICAgICAgIHJldHVy
biBlLT5jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCk7CisgICAgICAgICAgICByZXR1cm4gZWxl
bWVudC0+Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpOwogICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9GdWxsU2NyZWVuRG9jdW1lbnQ6CiAgICAgICAgICAgICAvLyBXaGlsZSBhIERv
Y3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlLCB0aGUgJ2Z1bGwtc2NyZWVuLWRvY3Vt
ZW50JyBwc2V1ZG9jbGFzcyBhcHBsaWVzCiAgICAgICAgICAgICAvLyB0byBhbGwgZWxlbWVudHMg
b2YgdGhhdCBEb2N1bWVudC4KLSAgICAgICAgICAgIGlmICghZS0+ZG9jdW1lbnQoKS0+d2Via2l0
SXNGdWxsU2NyZWVuKCkpCisgICAgICAgICAgICBpZiAoIWVsZW1lbnQtPmRvY3VtZW50KCktPndl
YmtpdElzRnVsbFNjcmVlbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0luUmFuZ2U6Ci0gICAgICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICBpZiAoIWVsZW1l
bnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZS0+ZG9jdW1l
bnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKLSAgICAgICAgICAgIHJldHVy
biBlLT5pc0luUmFuZ2UoKTsKKyAgICAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnNldENv
bnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+
aXNJblJhbmdlKCk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb091dE9mUmFuZ2U6
Ci0gICAgICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0Q29u
dGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKLSAgICAgICAgICAgIHJldHVybiBlLT5pc091dE9m
UmFuZ2UoKTsKKyAgICAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFs
aWRpdHlTdHlsZVJ1bGVzKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNPdXRPZlJh
bmdlKCk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Vua25vd246CiAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb05vdFBhcnNlZDoKICAgICAgICAgZGVmYXVsdDoKQEAg
LTExNDMsMTggKzExNTYsMTggQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKLSAgICAgICAgaWYgKCFlbGVtZW50U3R5bGUgJiYg
IW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KQorICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkgeworICAgICAgICBpZiAoIWNvbnRleHQuZWxlbWVu
dFN0eWxlICYmICFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICBpZiAoc2VsLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCkpIHsKKyAg
ICAgICAgaWYgKHNlbGVjdG9yLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCkpIHsKICAgICAgICAg
ICAgIG1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVy
biBlLT5zaGFkb3dQc2V1ZG9JZCgpID09IHNlbC0+dmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVy
biBlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpID09IHNlbGVjdG9yLT52YWx1ZSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQo
c2VsLT5wc2V1ZG9UeXBlKCkpOworICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IENTU1NlbGVj
dG9yOjpwc2V1ZG9JZChzZWxlY3Rvci0+cHNldWRvVHlwZSgpKTsKICAgICAgICAgaWYgKHBzZXVk
b0lkID09IEZJUlNUX0xFVFRFUikgewotICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVu
dCA9IGUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZWxlbWVudC0+ZG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICBkb2N1bWVudC0+c2V0VXNlc0Zp
cnN0TGV0dGVyUnVsZXModHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHBzZXVkb0lkICE9
IE5PUFNFVURPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IDNmOTQ2OWU1
ZDc5YjA5YzlhYjg0MmU3NDJkODVmYWQ3MTdiOTQ3MWYuLmE4NDFiOGM5MWVjODcxYTE2NTA1ZDVj
MGQ4M2Q1NDgwYWI4NTE1OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKQEAg
LTUxLDggKzUxLDQ4IEBAIHB1YmxpYzoKIAogICAgIGVudW0gU2VsZWN0b3JNYXRjaCB7IFNlbGVj
dG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5n
cywgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKICAgICBlbnVtIFZpc2l0ZWRNYXRjaFR5cGUg
eyBWaXNpdGVkTWF0Y2hEaXNhYmxlZCwgVmlzaXRlZE1hdGNoRW5hYmxlZCB9OworCisgICAgc3Ry
dWN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHsKKyAgICAgICAgLy8gSW5pdGlhbCBzZWxlY3Rv
ciBjb25zdHJ1Y3RvcgorICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dChDU1NTZWxlY3Rv
ciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1h
dGNoVHlwZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSA9IDAsIFJlbmRlclN0eWxlKiBlbGVt
ZW50UGFyZW50U3R5bGUgPSAwKQorICAgICAgICAgICAgOiBzZWxlY3RvcihzZWxlY3RvcikKKyAg
ICAgICAgICAgICwgZWxlbWVudChlbGVtZW50KQorICAgICAgICAgICAgLCB2aXNpdGVkTWF0Y2hU
eXBlKHZpc2l0ZWRNYXRjaFR5cGUpCisgICAgICAgICAgICAsIGVsZW1lbnRTdHlsZShlbGVtZW50
U3R5bGUpCisgICAgICAgICAgICAsIGVsZW1lbnRQYXJlbnRTdHlsZShlbGVtZW50UGFyZW50U3R5
bGUpCisgICAgICAgICAgICAsIGlzU3ViU2VsZWN0b3IoZmFsc2UpCisgICAgICAgIHsgfQorCisg
ICAgICAgIC8vIFN1Yi1zZWxlY3RvciBjb25zdHJ1Y3RvcgorICAgICAgICBTZWxlY3RvckNoZWNr
aW5nQ29udGV4dChjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgQ1NTU2Vs
ZWN0b3IqIHN1YlNlbGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlIG5ld01hdGNoVHlwZSkKKyAgICAg
ICAgICAgIDogc2VsZWN0b3Ioc3ViU2VsZWN0b3IpCisgICAgICAgICAgICAsIGVsZW1lbnQoY29u
dGV4dC5lbGVtZW50KQorICAgICAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKG5ld01hdGNoVHlw
ZSkKKyAgICAgICAgICAgICwgZWxlbWVudFN0eWxlKGNvbnRleHQuZWxlbWVudFN0eWxlKQorICAg
ICAgICAgICAgLCBlbGVtZW50UGFyZW50U3R5bGUoY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUp
CisgICAgICAgICAgICAsIGlzU3ViU2VsZWN0b3IodHJ1ZSkKKyAgICAgICAgeyB9CisKKyAgICAg
ICAgLy8gQ29tcG91bmQgc2VsZWN0b3IgY29uc3RydWN0b3IKKyAgICAgICAgU2VsZWN0b3JDaGVj
a2luZ0NvbnRleHQoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBDU1NTZWxlY3Rvciog
Y29tcG91bmRTZWxlY3RvciwgRWxlbWVudCogbmV3RWxlbWVudCwgVmlzaXRlZE1hdGNoVHlwZSBu
ZXdNYXRjaFR5cGUpCisgICAgICAgICAgICA6IHNlbGVjdG9yKGNvbXBvdW5kU2VsZWN0b3IpCisg
ICAgICAgICAgICAsIGVsZW1lbnQobmV3RWxlbWVudCkKKyAgICAgICAgICAgICwgdmlzaXRlZE1h
dGNoVHlwZShuZXdNYXRjaFR5cGUpCisgICAgICAgICAgICAsIGVsZW1lbnRTdHlsZSgwKQorICAg
ICAgICAgICAgLCBlbGVtZW50UGFyZW50U3R5bGUoMCkKKyAgICAgICAgICAgICwgaXNTdWJTZWxl
Y3RvcihmYWxzZSkKKyAgICAgICAgeyB9CisKKyAgICAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
OworICAgICAgICBFbGVtZW50KiBlbGVtZW50OworICAgICAgICBWaXNpdGVkTWF0Y2hUeXBlIHZp
c2l0ZWRNYXRjaFR5cGU7CisgICAgICAgIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGU7CisgICAg
ICAgIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGU7CisgICAgICAgIGJvb2wgaXNTdWJT
ZWxlY3RvcjsKKyAgICB9OworCiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwg
RWxlbWVudCosIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgPSBmYWxzZSkgY29uc3Q7Ci0g
ICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIFBz
ZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIFZpc2l0ZWRNYXRjaFR5
cGUsIFJlbmRlclN0eWxlKiA9IDAsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUgPSAw
KSBjb25zdDsKKyAgICBTZWxlY3Rvck1hdGNoIGNoZWNrU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JD
aGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYpIGNvbnN0OwogICAgIHN0YXRpYyBib29sIGlzRmFz
dENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKik7CiAgICAgYm9vbCBmYXN0Q2hl
Y2tTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqKSBjb25zdDsKIApA
QCAtOTYsNyArMTM2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGRldGVybWluZVNlbGVj
dG9yU2NvcGVzKGNvbnN0IENTU1NlbGVjdG9yTGlzdCYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKTsK
IAogcHJpdmF0ZToKLSAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVt
ZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRl
ZE1hdGNoVHlwZSwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxl
KSBjb25zdDsKKyAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQmLCBQc2V1ZG9JZCYpIGNvbnN0OwogICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1
ZG9DbGFzcyhDU1NTZWxlY3RvciosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKSBjb25zdDsKICAg
ICBzdGF0aWMgYm9vbCBpc0ZyYW1lRm9jdXNlZChjb25zdCBFbGVtZW50Kik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126213</attachid>
            <date>2012-02-08 18:15:50 -0800</date>
            <delta_ts>2012-02-08 22:00:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77525-20120209111548.patch</filename>
            <type>text/plain</type>
            <size>50629</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2Nzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTdlZWI3OWNmOWI2YWE2
MDZjM2ViZmRjZjkwMzk2NTc5MDQxZjIyZS4uOTcxYjkwM2NiZGU0ODZhNGE3MTQyOTAxNTliZTky
MzRjNzljM2M0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAyLTA4ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcjogbW92ZSBwYXJhbWV0ZXJzIGludG8gYSBzdHJ1Y3QK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTI1CisK
KyAgICAgICAgQWRkZWQgJ1NlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JyBzdHJ1Y3QgdG8gaG9sZCBw
YXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uCisgICAgICAgIEFkYXB0ZWQgY2FsbGluZyBzaXRl
cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIChyZWZhY3RvcmluZykKKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3Ip
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAg
ICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0OjpjcmVhdGVTdWJDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQ6OmNyZWF0ZUNvbXBvdW5kQ29udGV4dCk6CisgICAgICAgIChTZWxlY3RvckNoZWNrZXIp
OgorCiAyMDEyLTAyLTA1ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZW5hbWUgW0pTQ0N1c3RvbSpdIElETCB0byBbSlNDdXN0b20qXSBJREwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA4NmIwYWMzZTQ2NWVlOGQ3MGFi
YWM3NjBmNmU4OTgxMGRhZGI2MDM2Li4yYjZkZjhmMWVjMDVmNzczNmVjOTBmMmNhZDk0YmVkNmJj
MDI1ZTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC0yMDI4
LDcgKzIwMjgsOCBAQCBpbmxpbmUgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9y
KGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKICAgICB9CiAKICAgICAvLyBTbG93IHBhdGguCi0g
ICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNr
U2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFtaWNQc2V1ZG8s
IGZhbHNlLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQsIHN0eWxlKCksIG1f
cGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDApOworICAgIFNlbGVj
dG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0YS5zZWxl
Y3RvcigpLCBtX2VsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCwg
c3R5bGUoKSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMCk7
CisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNo
ZWNrU2VsZWN0b3IoY29udGV4dCwgbV9keW5hbWljUHNldWRvKTsKICAgICBpZiAobWF0Y2ggIT0g
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAobV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8gJiYgbV9jaGVja2Vy
LnBzZXVkb1N0eWxlKCkgIT0gbV9keW5hbWljUHNldWRvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmNwcAppbmRleCA1ODY3NzQ2NDdhMDg3ZDNhMGMyZDdmMjgyY2IzYmIwMzM2Zjk0
NDA1Li5mY2Q3NGQ4YjI0ODU2Yjc1ZGU2NDczNGYwOGU3M2U3YWJiMmI5YmU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtMjY4LDEzICsyNjgsMTQgQEAgRUluc2lk
ZUxpbmsgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50
KiBlbGVtZW50KSBjb25zdAogCiBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlbGVtZW50LCBib29sIGlzRmFzdENoZWNrYWJsZVNl
bGVjdG9yKSBjb25zdAogewotICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsK
ICAgICBpZiAoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgJiYgIWVsZW1lbnQtPmlzU1ZHRWxlbWVu
dCgpKSB7CiAgICAgICAgIGlmICghZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3Ioc2VsLCBlbGVt
ZW50LCBWaXNpdGVkTWF0Y2hEaXNhYmxlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIHJldHVybiBmYXN0Q2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQpOwogICAgIH0KLSAg
ICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIGR5bmFtaWNQc2V1ZG8sIGZhbHNl
LCBWaXNpdGVkTWF0Y2hEaXNhYmxlZCkgPT0gU2VsZWN0b3JNYXRjaGVzOworCisgICAgUHNldWRv
SWQgZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgIHJldHVybiBjaGVja1NlbGVjdG9yKFNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0KHNlbCwgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNp
dGVkTWF0Y2hEaXNhYmxlZCksIGR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlczsKIH0K
IAogbmFtZXNwYWNlIHsKQEAgLTQ0MiwxMDIgKzQ0MywxMDYgQEAgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikK
IC8vICogU2VsZWN0b3JGYWlsc0xvY2FsbHkgICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciB0
aGUgZWxlbWVudCBlCiAvLyAqIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyAtIHRoZSBzZWxlY3Rv
ciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb2YgZQogLy8gKiBTZWxlY3RvckZhaWxzQ29t
cGxldGVseSAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5nIG9yIGFu
Y2VzdG9yIG9mIGUKLVNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQm
IGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSB2aXNp
dGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxl
bWVudFBhcmVudFN0eWxlKSBjb25zdAorU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4
dCYgY29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CiB7CiAjaWYgRU5BQkxF
KFNWRykKICAgICAvLyBTcGVjOiBDU1MyIHNlbGVjdG9ycyBjYW5ub3QgYmUgYXBwbGllZCB0byB0
aGUgKGNvbmNlcHR1YWxseSkgY2xvbmVkIERPTSB0cmVlCiAgICAgLy8gYmVjYXVzZSBpdHMgY29u
dGVudHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBmb3JtYWwgZG9jdW1lbnQgc3RydWN0dXJlLgotICAg
IGlmIChlLT5pc1NWR1NoYWRvd1Jvb3QoKSkKKyAgICBpZiAoY29udGV4dC5lbGVtZW50LT5pc1NW
R1NoYWRvd1Jvb3QoKSkKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5Owog
I2VuZGlmCiAKICAgICAvLyBmaXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2gKLSAgICBpZiAoIWNo
ZWNrT25lU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCB2aXNp
dGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCisgICAgaWYg
KCFjaGVja09uZVNlbGVjdG9yKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pKQogICAgICAgICByZXR1
cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAKICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgc2VsZWN0
b3JzIGhhcyB0byBtYXRjaAotICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9IHNl
bC0+cmVsYXRpb24oKTsKKyAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24gPSBjb250
ZXh0LnNlbGVjdG9yLT5yZWxhdGlvbigpOwogCi0gICAgLy8gUHJlcGFyZSBuZXh0IHNlbAotICAg
IHNlbCA9IHNlbC0+dGFnSGlzdG9yeSgpOwotICAgIGlmICghc2VsKQorICAgIC8vIFByZXBhcmUg
bmV4dCBzZWxlY3RvcgorICAgIENTU1NlbGVjdG9yKiBoaXN0b3J5U2VsZWN0b3IgPSBjb250ZXh0
LnNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CisgICAgaWYgKCFoaXN0b3J5U2VsZWN0b3IpCiAgICAg
ICAgIHJldHVybiBTZWxlY3Rvck1hdGNoZXM7CiAKKyAgICBWaXNpdGVkTWF0Y2hUeXBlIG5ld1Zp
c2l0ZWRNYXRjaFR5cGUgPSBjb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGU7CiAgICAgaWYgKHJlbGF0
aW9uICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikgewogICAgICAgICAvLyBCYWlsLW91dCBp
ZiB0aGlzIHNlbGVjdG9yIGlzIGlycmVsZXZhbnQgZm9yIHRoZSBwc2V1ZG9TdHlsZQogICAgICAg
ICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX3BzZXVkb1N0eWxlICE9IGR5bmFt
aWNQc2V1ZG8pCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CiAK
ICAgICAgICAgLy8gRGlzYWJsZSA6dmlzaXRlZCBtYXRjaGluZyB3aGVuIHdlIHNlZSB0aGUgZmly
c3QgbGluayBvciB0cnkgdG8gbWF0Y2ggYW55dGhpbmcgZWxzZSB0aGFuIGFuIGFuY2VzdG9ycy4K
LSAgICAgICAgaWYgKCFpc1N1YlNlbGVjdG9yICYmIChlLT5pc0xpbmsoKSB8fCAocmVsYXRpb24g
IT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNo
aWxkKSkpCi0gICAgICAgICAgICB2aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRlZE1hdGNoRGlzYWJs
ZWQ7CisgICAgICAgIGlmICghY29udGV4dC5pc1N1YlNlbGVjdG9yICYmIChjb250ZXh0LmVsZW1l
bnQtPmlzTGluaygpIHx8IChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiBy
ZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6Q2hpbGQpKSkKKyAgICAgICAgICAgIG5ld1Zpc2l0ZWRN
YXRjaFR5cGUgPSBWaXNpdGVkTWF0Y2hEaXNhYmxlZDsKICAgICB9CiAKICAgICBzd2l0Y2ggKHJl
bGF0aW9uKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKLSAgICAgICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBlLT5wYXJlbnROb2Rl
KCk7Ci0gICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICBlID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRj
aCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1h
dGNoVHlwZSk7Ci0gICAgICAgICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1h
dGNoID09IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQotICAgICAgICAgICAgICAgIHJldHVybiBt
YXRjaDsKKyAgICAgICAgeworICAgICAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29t
cG91bmRDb250ZXh0ID0gY29udGV4dC5jcmVhdGVDb21wb3VuZENvbnRleHQoaGlzdG9yeVNlbGVj
dG9yLCBjb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSwgbmV3VmlzaXRlZE1hdGNoVHlw
ZSk7CisgICAgICAgICAgICBmb3IgKDsgY29tcG91bmRDb250ZXh0LmVsZW1lbnQ7IGNvbXBvdW5k
Q29udGV4dC5lbGVtZW50ID0gY29tcG91bmRDb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBjaGVja1NlbGVjdG9y
KGNvbXBvdW5kQ29udGV4dCwgZHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICAgICAgaWYgKG1h
dGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVs
eSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOworCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6CiAgICAgICAgIHsKLSAg
ICAgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAg
ICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIFNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0IGNvbXBvdW5kQ29udGV4dCA9IGNvbnRleHQuY3JlYXRlQ29tcG91bmRDb250
ZXh0KGhpc3RvcnlTZWxlY3RvciwgY29udGV4dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCksIG5l
d1Zpc2l0ZWRNYXRjaFR5cGUpOworICAgICAgICAgICAgaWYgKCFjb21wb3VuZENvbnRleHQuZWxl
bWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0g
ICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgcmV0
dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1h
dGNoVHlwZSk7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3Rvcihjb21wb3VuZENvbnRl
eHQsIGR5bmFtaWNQc2V1ZG8pOwogICAgICAgICB9CisKICAgICBjYXNlIENTU1NlbGVjdG9yOjpE
aXJlY3RBZGphY2VudDoKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGlu
Z1J1bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1l
bnROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBl
bGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRl
clN0eWxlKCk7CisgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYmIGNv
bnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1l
bnRQYXJlbnRTdHlsZSA6IGNvbnRleHQuZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHls
ZSgpOwogICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMo
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGUgPSBlLT5wcmV2aW91c0VsZW1lbnRTaWJs
aW5nKCk7Ci0gICAgICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICBTZWxlY3RvckNoZWNraW5n
Q29udGV4dCBjb21wb3VuZENvbnRleHQgPSBjb250ZXh0LmNyZWF0ZUNvbXBvdW5kQ29udGV4dCho
aXN0b3J5U2VsZWN0b3IsIGNvbnRleHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygp
LCBuZXdWaXNpdGVkTWF0Y2hUeXBlKTsKKyAgICAgICAgICAgIGlmICghY29tcG91bmRDb250ZXh0
LmVsZW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5n
czsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVk
bywgZmFsc2UsIHZpc2l0ZWRNYXRjaFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2Vs
ZWN0b3IoY29tcG91bmRDb250ZXh0LCBkeW5hbWljUHNldWRvKTsKICAgICAgICAgfQorCiAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgaWYgKCFtX2lzQ29s
bGVjdGluZ1J1bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5p
c0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVu
ZGVyU3R5bGUoKTsKLSAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgICAg
ICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxl
cygpOworICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5
ICYmIGNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0
LmVsZW1lbnRQYXJlbnRTdHlsZSA6IGNvbnRleHQuZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZW5k
ZXJTdHlsZSgpOworICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAg
ICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlv
bmFsUnVsZXMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0IGNvbXBvdW5kQ29udGV4dCA9IGNvbnRleHQuY3JlYXRlQ29tcG91bmRDb250ZXh0KGhp
c3RvcnlTZWxlY3RvciwgY29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCks
IG5ld1Zpc2l0ZWRNYXRjaFR5cGUpOworICAgICAgICAgICAgZm9yICg7IGNvbXBvdW5kQ29udGV4
dC5lbGVtZW50OyBjb21wb3VuZENvbnRleHQuZWxlbWVudCA9IGNvbXBvdW5kQ29udGV4dC5lbGVt
ZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBTZWxlY3Rv
ck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3Rvcihjb21wb3VuZENvbnRleHQsIGR5bmFtaWNQc2V1
ZG8pOworICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0
Y2ggPT0gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHND
b21wbGV0ZWx5KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKICAgICAg
ICAgfQotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgZSA9IGUtPnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGlmICghZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzOwotICAgICAgICAgICAgU2VsZWN0b3JNYXRj
aCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlz
aXRlZE1hdGNoVHlwZSk7Ci0gICAgICAgICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVz
IHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyB8fCBtYXRjaCA9PSBTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7Ci0gICAgICAg
IH07Ci0gICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I6
CiAgICAgICAgIC8vIGEgc2VsZWN0b3IgaXMgaW52YWxpZCBpZiBzb21ldGhpbmcgZm9sbG93cyBh
IHBzZXVkby1lbGVtZW50CiAgICAgICAgIC8vIFdlIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBzY3Jv
bGxiYXIgcHNldWRvIGVsZW1lbnRzIGFuZCBhbGxvdyBhIHNldCBvZiBwc2V1ZG8gY2xhc3NlcyAo
YnV0IG5vdGhpbmcgZWxzZSkKICAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBwc2V1ZG8gZWxlbWVu
dHMuCi0gICAgICAgIGlmICgoZWxlbWVudFN0eWxlIHx8IG1faXNDb2xsZWN0aW5nUnVsZXNPbmx5
KSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIGR5bmFtaWNQc2V1ZG8gIT0gU0VMRUNU
SU9OCi0gICAgICAgICAgICAgJiYgISgoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHls
ZVJlc29sdmUoKSB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwgZHluYW1p
Y1BzZXVkbyA9PSBSRVNJWkVSKSAmJiBzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzKSkKKyAgICAgICAgaWYgKChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBtX2lzQ29sbGVj
dGluZ1J1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBkeW5hbWljUHNl
dWRvICE9IFNFTEVDVElPTgorICAgICAgICAgICAgICYmICEoKFJlbmRlclNjcm9sbGJhcjo6c2Ny
b2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09S
TkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYgY29udGV4dC5zZWxlY3Rvci0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQogICAgICAgICAgICAgcmV0dXJuIFNl
bGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWws
IGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIHZpc2l0ZWRNYXRjaFR5cGUsIGVsZW1lbnRTdHlsZSwg
ZWxlbWVudFBhcmVudFN0eWxlKTsKKyAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3IoY29udGV4
dC5jcmVhdGVTdWJDb250ZXh0KGhpc3RvcnlTZWxlY3RvciwgbmV3VmlzaXRlZE1hdGNoVHlwZSks
IGR5bmFtaWNQc2V1ZG8pOworCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFu
dDoKICAgICAgICAgewotICAgICAgICAgICAgTm9kZSogc2hhZG93SG9zdE5vZGUgPSBlLT5zaGFk
b3dBbmNlc3Rvck5vZGUoKTsKLSAgICAgICAgICAgIGlmIChzaGFkb3dIb3N0Tm9kZSA9PSBlIHx8
ICFzaGFkb3dIb3N0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgTm9kZSogc2hh
ZG93SG9zdE5vZGUgPSBjb250ZXh0LmVsZW1lbnQtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAg
ICAgICAgICAgaWYgKHNoYWRvd0hvc3ROb2RlID09IGNvbnRleHQuZWxlbWVudCB8fCAhc2hhZG93
SG9zdE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KHNoYWRvd0hvc3ROb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwg
ZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIHZpc2l0ZWRNYXRjaFR5cGUpOworICAgICAgICAgICAg
cmV0dXJuIGNoZWNrU2VsZWN0b3IoY29udGV4dC5jcmVhdGVDb21wb3VuZENvbnRleHQoaGlzdG9y
eVNlbGVjdG9yLCB0b0VsZW1lbnQoc2hhZG93SG9zdE5vZGUpLCBuZXdWaXNpdGVkTWF0Y2hUeXBl
KSwgZHluYW1pY1BzZXVkbyk7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CiB9CiAKQEAgLTY4
Niw2NCArNjkxLDY4IEBAIHN0YXRpYyBib29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoTmFtZWROb2Rl
TWFwKiBhdHRyaWJ1dGVzLCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rv
ciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNl
bGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiBl
bGVtZW50U3R5bGUsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0Citib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5n
Q29udGV4dCYgY29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKGUpOwotICAgIGlmICghU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKGUsIHNlbCkp
CisgICAgRWxlbWVudCogY29uc3QgJiBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50OworICAgIENT
U1NlbGVjdG9yKiBjb25zdCAmIHNlbGVjdG9yID0gY29udGV4dC5zZWxlY3RvcjsKKyAgICBBU1NF
UlQoZWxlbWVudCk7CisgICAgQVNTRVJUKHNlbGVjdG9yKTsKKworICAgIGlmICghU2VsZWN0b3JD
aGVja2VyOjp0YWdNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCi0gICAg
ICAgIHJldHVybiBlLT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihl
KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbC0+dmFsdWUoKSk7CisgICAgaWYgKHNlbGVjdG9y
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQt
Pmhhc0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFz
c05hbWVzKCkuY29udGFpbnMoc2VsZWN0b3ItPnZhbHVlKCkpOwogCi0gICAgaWYgKHNlbC0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCi0gICAgICAgIHJldHVybiBlLT5oYXNJRCgpICYmIGUt
PmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gc2VsLT52YWx1ZSgpOworICAgIGlmIChzZWxlY3Rv
ci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCisgICAgICAgIHJldHVybiBlbGVtZW50LT5o
YXNJRCgpICYmIGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gc2VsZWN0b3ItPnZh
bHVlKCk7CiAKLSAgICBpZiAoc2VsLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpIHsKLSAgICAgICAg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ciA9IHNlbC0+YXR0cmlidXRlKCk7CisgICAgaWYgKHNl
bGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpIHsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ciA9IHNlbGVjdG9yLT5hdHRyaWJ1dGUoKTsKIAotICAgICAgICBOYW1lZE5vZGVN
YXAqIGF0dHJpYnV0ZXMgPSBlLT51cGRhdGVkQXR0cmlidXRlcygpOworICAgICAgICBOYW1lZE5v
ZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOwogICAgICAg
ICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
Ym9vbCBjYXNlU2Vuc2l0aXZlID0gIW1fZG9jdW1lbnRJc0hUTUwgfHwgIWh0bWxBdHRyaWJ1dGVI
YXNDYXNlSW5zZW5zaXRpdmVWYWx1ZShhdHRyKTsKIAotICAgICAgICBpZiAoIWFueUF0dHJpYnV0
ZU1hdGNoZXMoYXR0cmlidXRlcywgc3RhdGljX2Nhc3Q8Q1NTU2VsZWN0b3I6Ok1hdGNoPihzZWwt
Pm1fbWF0Y2gpLCBhdHRyLCBzZWwtPnZhbHVlKCksIGNhc2VTZW5zaXRpdmUpKQorICAgICAgICBp
ZiAoIWFueUF0dHJpYnV0ZU1hdGNoZXMoYXR0cmlidXRlcywgc3RhdGljX2Nhc3Q8Q1NTU2VsZWN0
b3I6Ok1hdGNoPihzZWxlY3Rvci0+bV9tYXRjaCksIGF0dHIsIHNlbGVjdG9yLT52YWx1ZSgpLCBj
YXNlU2Vuc2l0aXZlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBp
ZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykgeworICAgIGlmIChz
ZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKICAgICAgICAg
Ly8gSGFuZGxlIDpub3QgdXAgZnJvbnQuCi0gICAgICAgIGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90KSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2VsLT5zZWxl
Y3Rvckxpc3QoKSk7Ci0gICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzdWJTZWwgPSBzZWwt
PnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJTZWw7IHN1YlNlbCA9IHN1YlNlbC0+dGFnSGlz
dG9yeSgpKSB7CisgICAgICAgIGlmIChzZWxlY3Rvci0+cHNldWRvVHlwZSgpID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9Ob3QpIHsKKyAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rvci0+c2VsZWN0b3JM
aXN0KCkpOworICAgICAgICAgICAgZm9yIChTZWxlY3RvckNoZWNraW5nQ29udGV4dCBzdWJDb250
ZXh0ID0gY29udGV4dC5jcmVhdGVTdWJDb250ZXh0KHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+
Zmlyc3QoKSk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzdWJD
b250ZXh0LnNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKICAgICAgICAgICAgICAgICAvLyA6bm90
IGNhbm5vdCBuZXN0LiBJIGRvbid0IHJlYWxseSBrbm93IHdoeSB0aGlzIGlzIGEKICAgICAgICAg
ICAgICAgICAvLyByZXN0cmljdGlvbiBpbiBDU1MzLCBidXQgaXQgaXMsIHNvIGxldCdzIGhvbm9y
IGl0LgogICAgICAgICAgICAgICAgIC8vIHRoZSBwYXJzZXIgZW5mb3JjZXMgdGhhdCB0aGlzIG5l
dmVyIG9jY3VycwotICAgICAgICAgICAgICAgIEFTU0VSVChzdWJTZWwtPnBzZXVkb1R5cGUoKSAh
PSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3ViQ29u
dGV4dC5zZWxlY3Rvci0+cHNldWRvVHlwZSgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpOwog
ICAgICAgICAgICAgICAgIC8vIFdlIHNlbGVjdCBiZXR3ZWVuIDp2aXNpdGVkIGFuZCA6bGluayB3
aGVuIGFwcGx5aW5nLiBXZSBkb24ndCBrbm93IHdoaWNoIG9uZSBhcHBsaWVkIChvciBub3QpIHll
dC4KLSAgICAgICAgICAgICAgICBpZiAoc3ViU2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb1Zpc2l0ZWQgfHwgKHN1YlNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9MaW5rICYmIHZpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoRW5hYmxlZCkp
CisgICAgICAgICAgICAgICAgaWYgKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCB8fCAoc3ViQ29udGV4dC5zZWxlY3Rvci0+cHNl
dWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rICYmIHN1YkNvbnRleHQudmlzaXRl
ZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHN1YlNl
bCwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxl
LCBlbGVtZW50UGFyZW50U3R5bGUpKQorICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmVTZWxl
Y3RvcihzdWJDb250ZXh0LCBkeW5hbWljUHNldWRvKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoZHluYW1pY1BzZXVk
byAhPSBOT1BTRVVETyAmJiAoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJlc29s
dmUoKSB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwgZHluYW1pY1BzZXVk
byA9PSBSRVNJWkVSKSkgewogICAgICAgICAgICAgLy8gQ1NTIHNjcm9sbGJhcnMgbWF0Y2ggYSBz
cGVjaWZpYyBzdWJzZXQgb2YgcHNldWRvIGNsYXNzZXMsIGFuZCB0aGV5IGhhdmUgc3BlY2lhbGl6
ZWQgcnVsZXMgZm9yIGVhY2gKICAgICAgICAgICAgIC8vIChzaW5jZSB0aGVyZSBhcmUgbm8gZWxl
bWVudHMgaW52b2x2ZWQpLgotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2Nyb2xsYmFyUHNldWRv
Q2xhc3Moc2VsLCBkeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIHJldHVybiBjaGVja1Njcm9s
bGJhclBzZXVkb0NsYXNzKHNlbGVjdG9yLCBkeW5hbWljUHNldWRvKTsKICAgICAgICAgfSBlbHNl
IGlmIChkeW5hbWljUHNldWRvID09IFNFTEVDVElPTikgewotICAgICAgICAgICAgaWYgKHNlbC0+
cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9XaW5kb3dJbmFjdGl2ZSkKKyAgICAg
ICAgICAgIGlmIChzZWxlY3Rvci0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9X
aW5kb3dJbmFjdGl2ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gIW1fZG9jdW1lbnQtPnBhZ2Uo
KS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBOb3JtYWwgZWxlbWVudCBwc2V1ZG8gY2xhc3MgY2hlY2tpbmcuCi0gICAgICAgIHN3aXRjaCAo
c2VsLT5wc2V1ZG9UeXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvVHlw
ZSgpKSB7CiAgICAgICAgICAgICAvLyBQc2V1ZG8gY2xhc3NlczoKICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvTm90OgogICAgICAgICAgICAgYnJlYWs7IC8vIEFscmVhZHkgaGFuZGxl
ZCB1cCBhYm92ZS4KICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW1wdHk6CiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGZvciAoTm9kZSogbiA9IGUtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJs
aW5nKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBlbGVtZW50LT5maXJzdENo
aWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChuLT5pc0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03NTcsMjIgKzc2Niwy
MiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciog
c2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09u
bHkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0RW1wdHlTdGF0ZShyZXN1bHQpOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpICYmIChlLT5kb2N1bWVudCgp
LT51c2VzU2libGluZ1J1bGVzKCkgfHwgZS0+cmVuZGVyU3R5bGUoKS0+dW5pcXVlKCkpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0RW1wdHlTdGF0ZShyZXN1
bHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0RW1wdHlTdGF0ZShy
ZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5yZW5kZXJTdHls
ZSgpICYmIChlbGVtZW50LT5kb2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkgfHwgZWxlbWVu
dC0+cmVuZGVyU3R5bGUoKS0+dW5pcXVlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bWVudC0+cmVuZGVyU3R5bGUoKS0+c2V0RW1wdHlTdGF0ZShyZXN1bHQpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdENoaWxkOgogICAgICAgICAgICAgLy8g
Zmlyc3QtY2hpbGQgbWF0Y2hlcyB0aGUgZmlyc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50Ci0g
ICAgICAgICAgICBpZiAoZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoZWxl
bWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoIWUtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkK
KyAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkK
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAo
IW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVy
U3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
ZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5yZW5k
ZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9
IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5y
ZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDog
ZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQgJiYgY2hpbGRTdHlsZSkKQEAgLTc4MywxNyArNzkyLDE3IEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1l
bnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRmlyc3RPZlR5cGU6CiAgICAgICAgICAgICAvLyBmaXJzdC1vZi10eXBl
IG1hdGNoZXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgaXRzIHR5cGUKLSAgICAgICAgICAgIGlmIChl
LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAgICAg
ICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZS0+cHJldmlvdXNFbGVtZW50
U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2li
bGluZygpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGVs
ZW1lbnQtPnRhZ1FOYW1lKCk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBz
aWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJs
aW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxl
IDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQu
ZWxlbWVudFBhcmVudFN0eWxlIDogZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgp
OwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9u
YWxSdWxlcygpOwogICAgICAgICAgICAgICAgIH0KQEAgLTgwMiwxMSArODExLDExIEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1l
bnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvTGFzdENoaWxkOgogICAgICAgICAgICAgLy8gbGFzdC1jaGlsZCBtYXRj
aGVzIHRoZSBsYXN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVudAotICAgICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAg
ICAgICBib29sIHJlc3VsdCA9IHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRy
ZW4oKSAmJiAhZS0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7CisgICAgICAgICAgICBpZiAoRWxlbWVu
dCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGls
ZHJlbigpICYmICFlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJl
bmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+
cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+
cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5
bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVu
dC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHls
ZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRD
aGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0ICYmIGNoaWxkU3R5bGUpCkBAIC04MTcsMTYgKzgyNiwxNiBAQCBib29sIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBl
LCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0xhc3RPZlR5cGU6CiAgICAgICAgICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hl
cyB0aGUgbGFzdCBlbGVtZW50IG9mIGl0cyB0eXBlCi0gICAgICAgICAgICBpZiAoRWxlbWVudCog
cGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQ
YXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8g
Y29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgp
OwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlv
bmFsUnVsZXMoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJl
bnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0
eXBlID0gZS0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQq
IHNpYmxpbmcgPSBlLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNp
YmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgdHlwZSA9IGVsZW1lbnQtPnRhZ1FOYW1lKCk7CisgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5n
KCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgewog
ICAgICAgICAgICAgICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC04
MzQsMTMgKzg0MywxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlD
aGlsZDoKLSAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50
RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBmaXJzdENoaWxkID0gIWUtPnByZXZp
b3VzRWxlbWVudFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICBib29sIG9ubHlDaGlsZCA9IGZp
cnN0Q2hpbGQgJiYgcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYm
ICFlLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJl
bnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAg
Ym9vbCBmaXJzdENoaWxkID0gIWVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKKyAg
ICAgICAgICAgICAgICBib29sIG9ubHlDaGlsZCA9IGZpcnN0Q2hpbGQgJiYgcGFyZW50RWxlbWVu
dC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYmICFlbGVtZW50LT5uZXh0RWxlbWVudFNp
YmxpbmcoKTsKIAogICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkp
IHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50
U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFy
ZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29u
dGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/
IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUo
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1
bGVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5B
ZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKQEAgLTg1NSw5ICs4NjQsOSBAQCBib29sIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBl
LCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb09ubHlPZlR5cGU6CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzZWxlY3Rv
ciBpcyB2ZXJ5IHNsb3cuCi0gICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9
IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
IW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBh
cmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50
UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAocGFyZW50U3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKQEAgLTg2NSwxMiArODc0LDEyIEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQq
IGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICgh
cGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVt
ZW50KiBzaWJsaW5nID0gZS0+cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJs
aW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGVsZW1lbnQtPnRhZ1FOYW1lKCk7CisgICAg
ICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJldmlv
dXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNF
bGVtZW50U2libGluZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNU
YWdOYW1lKHR5cGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxp
bmcgPSBlLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmct
Pm5leHRFbGVtZW50U2libGluZygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVt
ZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNp
YmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC04NzgsMTEgKzg4NywxMSBA
QCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2Vs
LCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aENoaWxkOgotICAgICAgICAg
ICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCisgICAgICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJz
ZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKEVsZW1lbnQq
IHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChF
bGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAg
ICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVs
ZW1lbnQqIHNpYmxpbmcgPSBlLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNp
YmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5wcmV2aW91c0VsZW1l
bnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRT
aWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHMgPSBzaWJsaW5n
LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHMg
PyBzLT5jaGlsZEluZGV4KCkgOiAwOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXgpIHsK
QEAgLTg5MywyMDggKzkwMiwyMDggQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVu
dFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBh
cmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNv
bnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUg
PyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxl
KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFN0eWxlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY2hpbGRTdHlsZS0+c2V0Q2hpbGRJbmRleChjb3VudCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0
eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQp
KQorICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2hOdGgoY291bnQpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhPZlR5cGU6Ci0gICAgICAg
ICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKKyAgICAgICAgICAgIGlmICghc2VsZWN0b3ItPnBh
cnNlTnRoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoRWxlbWVu
dCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYg
KEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAg
ICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHR5cGUgPSBlLT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgRWxlbWVudCogc2libGluZyA9IGUtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGlu
Zzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAgICAg
ICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50LT50YWdRTmFtZSgp
OworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQt
PnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoc2libGlu
Zy0+aGFzVGFnTmFtZSh0eXBlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxl
c09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
ZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
Y29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVu
dEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRT
dHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFm
ZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQpKQorICAgICAgICAgICAgICAg
IGlmIChzZWxlY3Rvci0+bWF0Y2hOdGgoY291bnQpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0Q2hpbGQ6Ci0gICAgICAgICAgICBpZiAoIXNlbC0+
cGFyc2VOdGgoKSkKKyAgICAgICAgICAgIGlmICghc2VsZWN0b3ItPnBhcnNlTnRoKCkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVu
dCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVu
dEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6
IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVt
ZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5p
c0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgIGZv
ciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGUtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJs
aW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpCisgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRT
aWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmco
KSkKICAgICAgICAgICAgICAgICAgICAgKytjb3VudDsKLSAgICAgICAgICAgICAgICBpZiAoc2Vs
LT5tYXRjaE50aChjb3VudCkpCisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50
aChjb3VudCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050
aExhc3RPZlR5cGU6Ci0gICAgICAgICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKKyAgICAgICAg
ICAgIGlmICghc2VsZWN0b3ItPnBhcnNlTnRoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQo
KSkgeworICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5w
YXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVs
ZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRl
clN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJl
bnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50
U3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5B
ZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxk
cmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
ICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5
cGUgPSBlLT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCog
c2libGluZyA9IGUtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2li
bGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAgICAgICBm
b3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmco
KTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQpKQorICAgICAgICAgICAgICAgIGlmIChzZWxl
Y3Rvci0+bWF0Y2hOdGgoY291bnQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9UYXJnZXQ6Ci0gICAgICAgICAgICBpZiAoZSA9PSBlLT5kb2N1bWVudCgpLT5j
c3NUYXJnZXQoKSkKKyAgICAgICAgICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50
KCktPmNzc1RhcmdldCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueToKLSAgICAgICAg
ICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsLT5zZWxlY3Rvckxpc3QoKS0+Zmly
c3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9y
KSkgewotICAgICAgICAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHNlbGVjdG9yLCBlLCBkeW5h
bWljUHNldWRvLCB0cnVlLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQ
YXJlbnRTdHlsZSkgPT0gU2VsZWN0b3JNYXRjaGVzKQorICAgICAgICAgICAgZm9yIChTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCBzdWJDb250ZXh0ID0gY29udGV4dC5jcmVhdGVTdWJDb250ZXh0KHNl
bGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKSk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1
YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxl
Y3RvcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihzdWJDb250ZXh0LCBk
eW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0F1dG9maWxsOgotICAgICAgICAgICAgaWYgKCFlIHx8ICFl
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFl
bGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgaWYgKEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5w
dXRFbGVtZW50KCkpCisgICAgICAgICAgICBpZiAoSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
aW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgogICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9MaW5rOgogICAgICAgICAgICAgLy8gOnZpc2l0ZWQgYW5kIDpsaW5rIG1hdGNo
ZXMgYXJlIHNlcGFyYXRlZCBsYXRlciB3aGVuIGFwcGx5aW5nIHRoZSBzdHlsZS4gSGVyZSBib3Ro
IGNsYXNzZXMgbWF0Y2ggYWxsIGxpbmtzLi4uCi0gICAgICAgICAgICByZXR1cm4gZS0+aXNMaW5r
KCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCk7CiAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6CiAgICAgICAgICAgICAvLyAuLi5leGNlcHQgaWYg
OnZpc2l0ZWQgbWF0Y2hpbmcgaXMgZGlzYWJsZWQgZm9yIGFuY2VzdG9yL3NpYmxpbmcgbWF0Y2hp
bmcuCi0gICAgICAgICAgICByZXR1cm4gZS0+aXNMaW5rKCkgJiYgdmlzaXRlZE1hdGNoVHlwZSA9
PSBWaXNpdGVkTWF0Y2hFbmFibGVkOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzTGlu
aygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkOwog
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EcmFnOgotICAgICAgICAgICAgaWYgKGVs
ZW1lbnRTdHlsZSkKLSAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlE
cmFnUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpKQot
ICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlEcmFnUnVsZXMo
dHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoZS0+cmVuZGVyZXIoKSAmJiBlLT5yZW5kZXJlcigpLT5p
c0RyYWdnaW5nKCkpCisgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCisgICAg
ICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlEcmFnUnVsZXMo
dHJ1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQorICAg
ICAgICAgICAgICAgIGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlEcmFnUnVs
ZXModHJ1ZSk7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSAmJiBlbGVtZW50
LT5yZW5kZXJlcigpLT5pc0RyYWdnaW5nKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9j
dXM6Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZSk7CisgICAg
ICAgICAgICByZXR1cm4gbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCk7CiAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOgogICAgICAgICAgICAgLy8gSWYgd2UncmUg
aW4gcXVpcmtzIG1vZGUsIHRoZW4gaG92ZXIgc2hvdWxkIG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0
aCBubwogICAgICAgICAgICAgLy8gaHJlZiBhbmQgKjpob3ZlciBzaG91bGQgbm90IG1hdGNoIGFu
eXRoaW5nLiBUaGlzIGlzIGltcG9ydGFudCBmb3Igc2l0ZXMgbGlrZSB3c2ouY29tLgotICAgICAg
ICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBpc1N1YlNlbGVjdG9yIHx8IChzZWwtPmhhc1Rh
ZygpICYmICFlLT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBlLT5pc0xpbmsoKSkgewotICAgICAgICAg
ICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHls
ZS0+c2V0QWZmZWN0ZWRCeUhvdmVyUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoZS0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUo
KS0+c2V0QWZmZWN0ZWRCeUhvdmVyUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGUt
PmhvdmVyZWQoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUo
ZSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyKSkKKyAgICAgICAgICAgIGlmIChtX3N0cmljdFBh
cnNpbmcgfHwgY29udGV4dC5pc1N1YlNlbGVjdG9yIHx8IChzZWxlY3Rvci0+aGFzVGFnKCkgJiYg
IWVsZW1lbnQtPmhhc1RhZ05hbWUoYVRhZykpIHx8IGVsZW1lbnQtPmlzTGluaygpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQorICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVyUnVsZXModHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+cmVuZGVyU3R5bGUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeUhvdmVyUnVs
ZXModHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSB8fCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZWxlbWVudCwgQ1NTU2VsZWN0
b3I6OlBzZXVkb0hvdmVyKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQWN0aXZlOgogICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRo
ZW4gOmFjdGl2ZSBzaG91bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAg
ICAvLyBocmVmIGFuZCAqOmFjdGl2ZSBzaG91bGQgbm90IG1hdGNoIGFueXRoaW5nLgotICAgICAg
ICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBpc1N1YlNlbGVjdG9yIHx8IChzZWwtPmhhc1Rh
ZygpICYmICFlLT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBlLT5pc0xpbmsoKSkgewotICAgICAgICAg
ICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHls
ZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGUtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxl
KCktPnNldEFmZmVjdGVkQnlBY3RpdmVSdWxlcyh0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAo
ZS0+YWN0aXZlKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRl
KGUsIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmUpKQorICAgICAgICAgICAgaWYgKG1fc3RyaWN0
UGFyc2luZyB8fCBjb250ZXh0LmlzU3ViU2VsZWN0b3IgfHwgKHNlbGVjdG9yLT5oYXNUYWcoKSAm
JiAhZWxlbWVudC0+aGFzVGFnTmFtZShhVGFnKSkgfHwgZWxlbWVudC0+aXNMaW5rKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+cmVuZGVyU3R5bGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeUFjdGl2
ZVJ1bGVzKHRydWUpOworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5hY3RpdmUoKSB8fCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZWxlbWVudCwgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0FjdGl2ZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0VuYWJsZWQ6Ci0gICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0Zvcm1Db250cm9s
RWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBlLT5pc0VuYWJsZWRGb3JtQ29udHJv
bCgpOworICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNFbmFibGVkRm9ybUNv
bnRyb2woKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9GdWxsUGFnZU1lZGlhOgotICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+ZG9jdW1lbnQo
KSAmJiBlLT5kb2N1bWVudCgpLT5pc01lZGlhRG9jdW1lbnQoKTsKKyAgICAgICAgICAgIHJldHVy
biBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+
aXNNZWRpYURvY3VtZW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlICYmIGUtPmlzRGVm
YXVsdEJ1dHRvbkZvckZvcm0oKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1l
bnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvRGlzYWJsZWQ6Ci0gICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAhZS0+aXNFbmFibGVkRm9ybUNvbnRyb2wo
KTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuICFlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29u
dHJvbCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb1JlYWRPbmx5OgotICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKQorICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHJldHVybiBlLT5pc1RleHRGb3JtQ29udHJvbCgpICYmIGUtPmlzUmVhZE9ubHlGb3JtQ29udHJv
bCgpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzVGV4dEZvcm1Db250cm9sKCkgJiYg
ZWxlbWVudC0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb1JlYWRXcml0ZToKLSAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNG
b3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICByZXR1cm4gZS0+aXNUZXh0Rm9ybUNvbnRyb2woKSAmJiAhZS0+aXNSZWFkT25seUZv
cm1Db250cm9sKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNUZXh0Rm9ybUNvbnRy
b2woKSAmJiAhZWxlbWVudC0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7CiAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb09wdGlvbmFsOgotICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+
aXNPcHRpb25hbEZvcm1Db250cm9sKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBl
bGVtZW50LT5pc09wdGlvbmFsRm9ybUNvbnRyb2woKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvUmVxdWlyZWQ6Ci0gICAgICAgICAgICByZXR1cm4gZSAmJiBlLT5pc1JlcXVpcmVk
Rm9ybUNvbnRyb2woKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQtPmlz
UmVxdWlyZWRGb3JtQ29udHJvbCgpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9W
YWxpZDoKLSAgICAgICAgICAgIGlmICghZSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5z
ZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOwotICAgICAgICAgICAgcmV0dXJuIGUtPndp
bGxWYWxpZGF0ZSgpICYmIGUtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICAgICAg
ICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7
CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkgJiYgZWxlbWVudC0+
aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9JbnZhbGlkOgotICAgICAgICAgICAgaWYgKCFlKQorICAgICAgICAgICAgaWYgKCFlbGVt
ZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGUtPmRvY3Vt
ZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7Ci0gICAgICAgICAgICByZXR1
cm4gKGUtPndpbGxWYWxpZGF0ZSgpICYmICFlLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkp
IHx8IGUtPmhhc1VuYWNjZXB0YWJsZVZhbHVlKCk7CisgICAgICAgICAgICBlbGVtZW50LT5kb2N1
bWVudCgpLT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOworICAgICAgICAgICAgcmV0
dXJuIChlbGVtZW50LT53aWxsVmFsaWRhdGUoKSAmJiAhZWxlbWVudC0+aXNWYWxpZEZvcm1Db250
cm9sRWxlbWVudCgpKSB8fCBlbGVtZW50LT5oYXNVbmFjY2VwdGFibGVWYWx1ZSgpOwogICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DaGVja2VkOgogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAg
ICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIC8vIEV2ZW4gdGhv
dWdoIFdpbklFIGFsbG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlIHRvIGNvLWV4aXN0LCB0
aGUgQ1NTIHNlbGVjdG9yIHNwZWMgc2F5cyB0aGF0CiAgICAgICAgICAgICAgICAgLy8geW91IGNh
bid0IGJlIGJvdGggY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZS4gV2Ugd2lsbCBiZWhhdmUgbGlr
ZSBXaW5JRSBiZWhpbmQgdGhlIHNjZW5lcyBhbmQganVzdAogICAgICAgICAgICAgICAgIC8vIG9i
ZXkgdGhlIENTUyBzcGVjIGhlcmUgaW4gdGhlIHRlc3QgZm9yIG1hdGNoaW5nIHRoZSBwc2V1ZG8u
Ci0gICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9J
bnB1dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwogICAgICAgICAgICAgICAgIGlmIChp
bnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkgJiYgIWlu
cHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKG9wdGlvblRhZykgJiYg
dG9IVE1MT3B0aW9uRWxlbWVudChlKS0+c2VsZWN0ZWQoKSkKKyAgICAgICAgICAgICAgICBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxl
bWVudCktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9JbmRldGVybWluYXRlOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBp
ZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgICAgICAg
ICAgICAgaWYgKGUtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEhUTUxQcm9ncmVzc0VsZW1lbnQqIHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dy
ZXNzRWxlbWVudCo+KGUpOworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KHByb2dyZXNzVGFnKSkgeworICAgICAgICAgICAgICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50
KiBwcm9ncmVzcyA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihlbGVtZW50KTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzICYmICFwcm9ncmVzcy0+aXNEZXRlcm1p
bmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAg
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCk7
CisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVu
dC0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYm
IGlucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Sb290OgotICAgICAgICAgICAgaWYgKGUgPT0gZS0+
ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBpZiAoZWxlbWVudCA9
PSBlbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9MYW5nOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEF0b21pY1N0
cmluZyB2YWx1ZSA9IGUtPmNvbXB1dGVJbmhlcml0ZWRMYW5ndWFnZSgpOwotICAgICAgICAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJndW1lbnQgPSBzZWwtPmFyZ3VtZW50KCk7CisgICAg
ICAgICAgICAgICAgQXRvbWljU3RyaW5nIHZhbHVlID0gZWxlbWVudC0+Y29tcHV0ZUluaGVyaXRl
ZExhbmd1YWdlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVu
dCA9IHNlbGVjdG9yLT5hcmd1bWVudCgpOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Vt
cHR5KCkgfHwgIXZhbHVlLnN0YXJ0c1dpdGgoYXJndW1lbnQsIGZhbHNlKSkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpICE9IGFy
Z3VtZW50Lmxlbmd0aCgpICYmIHZhbHVlW2FyZ3VtZW50Lmxlbmd0aCgpXSAhPSAnLScpCkBAIC0x
MTA3LDM0ICsxMTE2LDM0IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9y
KENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAv
LyBlbGVtZW50IGlzIGFuIGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50LCB0aGUgJ2Z1bGwtc2NyZWVu
JyBwc2V1ZG9jbGFzcyBhcHBsaWVzIHRvCiAgICAgICAgICAgICAvLyB0aGF0IGVsZW1lbnQuIEFs
c28sIGFuIDxpZnJhbWU+LCA8b2JqZWN0PiBvciA8ZW1iZWQ+IGVsZW1lbnQgd2hvc2UgY2hpbGQg
YnJvd3NpbmcKICAgICAgICAgICAgIC8vIGNvbnRleHQncyBEb2N1bWVudCBpcyBpbiB0aGUgZnVs
bHNjcmVlbiBzdGF0ZSBoYXMgdGhlICdmdWxsLXNjcmVlbicgcHNldWRvY2xhc3MgYXBwbGllZC4K
LSAgICAgICAgICAgIGlmIChlLT5pc0ZyYW1lRWxlbWVudEJhc2UoKSAmJiBzdGF0aWNfY2FzdDxI
VE1MRnJhbWVFbGVtZW50QmFzZSo+KGUpLT5jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkpCisg
ICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNGcmFtZUVsZW1lbnRCYXNlKCkgJiYgc3RhdGljX2Nh
c3Q8SFRNTEZyYW1lRWxlbWVudEJhc2UqPihlbGVtZW50KS0+Y29udGFpbnNGdWxsU2NyZWVuRWxl
bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKCFl
LT5kb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgICAgIGlmICghZWxl
bWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2NyZWVuKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIGUgPT0gZS0+ZG9jdW1lbnQoKS0+d2Vi
a2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVu
dCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQo
KTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW5pbWF0aW5nRnVsbFNjcmVlblRy
YW5zaXRpb246Ci0gICAgICAgICAgICBpZiAoZSAhPSBlLT5kb2N1bWVudCgpLT53ZWJraXRDdXJy
ZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChlbGVtZW50ICE9IGVsZW1l
bnQtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBlLT5kb2N1bWVudCgp
LT5pc0FuaW1hdGluZ0Z1bGxTY3JlZW4oKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5k
b2N1bWVudCgpLT5pc0FuaW1hdGluZ0Z1bGxTY3JlZW4oKTsKICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRnVsbFNjcmVlbkFuY2VzdG9yOgotICAgICAgICAgICAgcmV0dXJuIGUtPmNv
bnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5j
b250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0Z1bGxTY3JlZW5Eb2N1bWVudDoKICAgICAgICAgICAgIC8vIFdoaWxlIGEgRG9jdW1lbnQg
aXMgaW4gdGhlIGZ1bGxzY3JlZW4gc3RhdGUsIHRoZSAnZnVsbC1zY3JlZW4tZG9jdW1lbnQnIHBz
ZXVkb2NsYXNzIGFwcGxpZXMKICAgICAgICAgICAgIC8vIHRvIGFsbCBlbGVtZW50cyBvZiB0aGF0
IERvY3VtZW50LgotICAgICAgICAgICAgaWYgKCFlLT5kb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxT
Y3JlZW4oKSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0SXNG
dWxsU2NyZWVuKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSW5S
YW5nZToKLSAgICAgICAgICAgIGlmICghZSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5z
ZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOwotICAgICAgICAgICAgcmV0dXJuIGUtPmlz
SW5SYW5nZSgpOworICAgICAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNW
YWxpZGl0eVN0eWxlUnVsZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5pc0luUmFu
Z2UoKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT3V0T2ZSYW5nZToKLSAgICAg
ICAgICAgIGlmICghZSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRDb250YWluc1Zh
bGlkaXR5U3R5bGVSdWxlcygpOwotICAgICAgICAgICAgcmV0dXJuIGUtPmlzT3V0T2ZSYW5nZSgp
OworICAgICAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0
eWxlUnVsZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5pc091dE9mUmFuZ2UoKTsK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVW5rbm93bjoKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvTm90UGFyc2VkOgogICAgICAgICBkZWZhdWx0OgpAQCAtMTE0Mywx
OCArMTE1MiwxOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NT
ZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvRWxlbWVudCkgewotICAgICAgICBpZiAoIWVsZW1lbnRTdHlsZSAmJiAhbV9pc0Nv
bGxlY3RpbmdSdWxlc09ubHkpCisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50KSB7CisgICAgICAgIGlmICghY29udGV4dC5lbGVtZW50U3R5bGUg
JiYgIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIGlmIChzZWwtPmlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICBp
ZiAoc2VsZWN0b3ItPmlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSkgewogICAgICAgICAgICAgbV9o
YXNVbmtub3duUHNldWRvRWxlbWVudHMgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIGUtPnNo
YWRvd1BzZXVkb0lkKCkgPT0gc2VsLT52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1l
bnQtPnNoYWRvd1BzZXVkb0lkKCkgPT0gc2VsZWN0b3ItPnZhbHVlKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IENTU1NlbGVjdG9yOjpwc2V1ZG9JZChzZWwtPnBz
ZXVkb1R5cGUoKSk7CisgICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBz
ZXVkb0lkKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpOwogICAgICAgICBpZiAocHNldWRvSWQgPT0g
RklSU1RfTEVUVEVSKSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZS0+
ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBlbGVtZW50
LT5kb2N1bWVudCgpKQogICAgICAgICAgICAgICAgIGRvY3VtZW50LT5zZXRVc2VzRmlyc3RMZXR0
ZXJSdWxlcyh0cnVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAocHNldWRvSWQgIT0gTk9QU0VV
RE8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKaW5kZXggM2Y5NDY5ZTVkNzliMDlj
OWFiODQyZTc0MmQ4NWZhZDcxN2I5NDcxZi4uNGIwNDM1OThjOWRlNzQ4OTFkOWQ0NmE0ODYwZDIw
NzQwNjk2ZGU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtNTEsOCAr
NTEsNDEgQEAgcHVibGljOgogCiAgICAgZW51bSBTZWxlY3Rvck1hdGNoIHsgU2VsZWN0b3JNYXRj
aGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzLCBTZWxl
Y3RvckZhaWxzQ29tcGxldGVseSB9OwogICAgIGVudW0gVmlzaXRlZE1hdGNoVHlwZSB7IFZpc2l0
ZWRNYXRjaERpc2FibGVkLCBWaXNpdGVkTWF0Y2hFbmFibGVkIH07CisKKyAgICBzdHJ1Y3QgU2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQgeworICAgICAgICAvLyBJbml0aWFsIHNlbGVjdG9yIGNvbnN0
cnVjdG9yCisgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KENTU1NlbGVjdG9yKiBzZWxl
Y3RvciwgRWxlbWVudCogZWxlbWVudCwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBl
LCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJl
bnRTdHlsZSA9IDAsIGJvb2wgaXNTdWJTZWxlY3RvciA9IGZhbHNlKQorICAgICAgICAgICAgOiBz
ZWxlY3RvcihzZWxlY3RvcikKKyAgICAgICAgICAgICwgZWxlbWVudChlbGVtZW50KQorICAgICAg
ICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHZpc2l0ZWRNYXRjaFR5cGUpCisgICAgICAgICAgICAs
IGVsZW1lbnRTdHlsZShlbGVtZW50U3R5bGUpCisgICAgICAgICAgICAsIGVsZW1lbnRQYXJlbnRT
dHlsZShlbGVtZW50UGFyZW50U3R5bGUpCisgICAgICAgICAgICAsIGlzU3ViU2VsZWN0b3IoaXNT
dWJTZWxlY3RvcikKKyAgICAgICAgeyB9CisKKyAgICAgICAgaW5saW5lIFNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0IGNyZWF0ZVN1YkNvbnRleHQoQ1NTU2VsZWN0b3IqIHN1YlNlbGVjdG9yKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JDaGVja2luZ0NvbnRleHQo
c3ViU2VsZWN0b3IsIGVsZW1lbnQsIHZpc2l0ZWRNYXRjaFR5cGUsIGVsZW1lbnRTdHlsZSwgZWxl
bWVudFBhcmVudFN0eWxlLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBpbmxpbmUgU2VsZWN0
b3JDaGVja2luZ0NvbnRleHQgY3JlYXRlU3ViQ29udGV4dChDU1NTZWxlY3Rvciogc3ViU2VsZWN0
b3IsIFZpc2l0ZWRNYXRjaFR5cGUgbmV3TWF0Y2hUeXBlKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gU2VsZWN0b3JDaGVja2luZ0NvbnRleHQoc3ViU2VsZWN0b3IsIGVsZW1l
bnQsIG5ld01hdGNoVHlwZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUsIHRydWUp
OworICAgICAgICB9CisgICAgICAgIGlubGluZSBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjcmVh
dGVDb21wb3VuZENvbnRleHQoQ1NTU2VsZWN0b3IqIGNvbXBvdW5kU2VsZWN0b3IsIEVsZW1lbnQq
IG5ld0VsZW1lbnQsIFZpc2l0ZWRNYXRjaFR5cGUgbmV3TWF0Y2hUeXBlKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JDaGVja2luZ0NvbnRleHQoY29tcG91bmRT
ZWxlY3RvciwgbmV3RWxlbWVudCwgbmV3TWF0Y2hUeXBlKTsKKyAgICAgICAgfQorCisgICAgICAg
IENTU1NlbGVjdG9yKiBzZWxlY3RvcjsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudDsKKyAgICAg
ICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOworICAgICAgICBSZW5kZXJTdHls
ZSogZWxlbWVudFN0eWxlOworICAgICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxl
OworICAgICAgICBib29sIGlzU3ViU2VsZWN0b3I7CisgICAgfTsKKwogICAgIGJvb2wgY2hlY2tT
ZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVj
dG9yID0gZmFsc2UpIGNvbnN0OwotICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3RvcihDU1NT
ZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNl
bGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSogPSAwLCBSZW5kZXJTdHlsZSog
ZWxlbWVudFBhcmVudFN0eWxlID0gMCkgY29uc3Q7CisgICAgU2VsZWN0b3JNYXRjaCBjaGVja1Nl
bGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgUHNldWRvSWQmKSBjb25zdDsK
ICAgICBzdGF0aWMgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rv
ciopOwogICAgIGJvb2wgZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqLCBjb25z
dCBFbGVtZW50KikgY29uc3Q7CiAKQEAgLTk2LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgYm9vbCBkZXRlcm1pbmVTZWxlY3RvclNjb3Blcyhjb25zdCBDU1NTZWxlY3Rvckxpc3QmLCBI
YXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5n
SW1wbCo+JiBjbGFzc1Njb3Blcyk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjaGVja09uZVNlbGVj
dG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29s
IGlzU3ViU2VsZWN0b3IsIFZpc2l0ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5
bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3Q7CisgICAgYm9vbCBjaGVja09uZVNlbGVjdG9y
KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgUHNldWRvSWQmKSBjb25zdDsKICAgICBi
b29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9JZCYgZHlu
YW1pY1BzZXVkbykgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgaXNGcmFtZUZvY3VzZWQoY29uc3Qg
RWxlbWVudCopOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126239</attachid>
            <date>2012-02-08 22:00:42 -0800</date>
            <delta_ts>2012-02-09 03:08:07 -0800</delta_ts>
            <desc>patch for EWS</desc>
            <filename>bug-77525-20120209150040.patch</filename>
            <type>text/plain</type>
            <size>49739</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmVjNWEyNTNlNWQ0MDYy
NTdlZjBiMjQ2Yjk5NzViNWZlZDBjYzg3MC4uYmMxYTdkNzVkYzFkZWNhN2FkYTdjNzIxZWUyZjlh
MmE0MzY2ZGIzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAyLTA4ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcjogbW92ZSBwYXJhbWV0ZXJzIGludG8gYSBzdHJ1Y3QK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTI1CisK
KyAgICAgICAgQWRkZWQgJ1NlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JyBzdHJ1Y3QgdG8gaG9sZCBw
YXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uCisgICAgICAgIEFkYXB0ZWQgY2FsbGluZyBzaXRl
cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIChyZWZhY3RvcmluZykKKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3Ip
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAg
ICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCk6CisgICAgICAgIChTZWxlY3RvckNo
ZWNrZXIpOgorCiAyMDEyLTAyLTA4ICBBbmRyZWFzIEtsaW5nICA8YXdlc29tZWtsaW5nQGFwcGxl
LmNvbT4KIAogICAgICAgICBJbmNyZWFzZWQgc3R5bGUgc2hhcmluZyBmb3IgZWxlbWVudHMgd2l0
aCBwcmVzZW50YXRpb24gYXR0cmlidXRlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcAppbmRleCA3ZjE1OGY2MGRmOWIxNDQ3NTBlNDE5NDZkYjQyMTA1ZGExZTMxNTcwLi5l
OTIzOWQxMjNiYjRiZjEwZTFjNDIzMDZhNDMwMmNmYWJjMzVhZGYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC0yMDkzLDcgKzIwOTMsOCBAQCBpbmxpbmUgYm9v
bCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0
YSkKICAgICB9CiAKICAgICAvLyBTbG93IHBhdGguCi0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxl
Y3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocnVsZURhdGEuc2VsZWN0
b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFtaWNQc2V1ZG8sIGZhbHNlLCBTZWxlY3RvckNoZWNrZXI6
OlZpc2l0ZWRNYXRjaEVuYWJsZWQsIHN0eWxlKCksIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9k
ZS0+cmVuZGVyU3R5bGUoKSA6IDApOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVj
a2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQsIFNlbGVj
dG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCwgc3R5bGUoKSwgbV9wYXJlbnROb2RlID8g
bV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMCk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0b3IoY29udGV4dCwgbV9k
eW5hbWljUHNldWRvKTsKICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ck1hdGNoZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9jaGVja2VyLnBzZXVk
b1N0eWxlKCkgIT0gTk9QU0VVRE8gJiYgbV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gbV9keW5h
bWljUHNldWRvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCBiYzgy
NGUxYzA3ZDFjN2E3YjI0NTUxZjVmMTVkYWMzYjdlMGZkMjk1Li43YmIwYjc1NDJlZTMzMGRhMjk1
ZDU1N2Y1MjFiNzU3MzlhZTUxNzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcApAQCAtMjY4LDEzICsyNjgsMTQgQEAgRUluc2lkZUxpbmsgU2VsZWN0b3JDaGVja2VyOjpk
ZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAogCiBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50
KiBlbGVtZW50LCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKSBjb25zdAogewotICAgIFBz
ZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICBpZiAoaXNGYXN0Q2hlY2thYmxl
U2VsZWN0b3IgJiYgIWVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKSB7CiAgICAgICAgIGlmICghZmFz
dENoZWNrUmlnaHRtb3N0U2VsZWN0b3Ioc2VsLCBlbGVtZW50LCBWaXNpdGVkTWF0Y2hEaXNhYmxl
ZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBmYXN0Q2hlY2tT
ZWxlY3RvcihzZWwsIGVsZW1lbnQpOwogICAgIH0KLSAgICByZXR1cm4gY2hlY2tTZWxlY3Rvcihz
ZWwsIGVsZW1lbnQsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBWaXNpdGVkTWF0Y2hEaXNhYmxlZCkg
PT0gU2VsZWN0b3JNYXRjaGVzOworCisgICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5PUFNF
VURPOworICAgIHJldHVybiBjaGVja1NlbGVjdG9yKFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHNl
bCwgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hEaXNhYmxlZCksIGR5bmFt
aWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlczsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTQ0Miwx
MDIgKzQ0MywxMTcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVj
dG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIC8vICogU2VsZWN0b3JGYWlsc0xvY2Fs
bHkgICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciB0aGUgZWxlbWVudCBlCiAvLyAqIFNlbGVj
dG9yRmFpbHNBbGxTaWJsaW5ncyAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNp
Ymxpbmcgb2YgZQogLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVseSAgLSB0aGUgc2VsZWN0b3Ig
ZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5nIG9yIGFuY2VzdG9yIG9mIGUKLVNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2Vs
ZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNT
dWJTZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHls
ZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAor
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxl
Y3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUHNldWRvSWQmIGR5
bmFtaWNQc2V1ZG8pIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBTcGVjOiBDU1My
IHNlbGVjdG9ycyBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgKGNvbmNlcHR1YWxseSkgY2xvbmVk
IERPTSB0cmVlCiAgICAgLy8gYmVjYXVzZSBpdHMgY29udGVudHMgYXJlIG5vdCBwYXJ0IG9mIHRo
ZSBmb3JtYWwgZG9jdW1lbnQgc3RydWN0dXJlLgotICAgIGlmIChlLT5pc1NWR1NoYWRvd1Jvb3Qo
KSkKKyAgICBpZiAoY29udGV4dC5lbGVtZW50LT5pc1NWR1NoYWRvd1Jvb3QoKSkKICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogI2VuZGlmCiAKICAgICAvLyBmaXJzdCBz
ZWxlY3RvciBoYXMgdG8gbWF0Y2gKLSAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc2VsLCBlLCBk
eW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5
bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCisgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKGNvbnRl
eHQsIGR5bmFtaWNQc2V1ZG8pKQogICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7
CiAKICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgc2VsZWN0b3JzIGhhcyB0byBtYXRjaAotICAgIENT
U1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9IHNlbC0+cmVsYXRpb24oKTsKKyAgICBDU1NT
ZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24gPSBjb250ZXh0LnNlbGVjdG9yLT5yZWxhdGlvbigp
OwogCi0gICAgLy8gUHJlcGFyZSBuZXh0IHNlbAotICAgIHNlbCA9IHNlbC0+dGFnSGlzdG9yeSgp
OwotICAgIGlmICghc2VsKQorICAgIC8vIFByZXBhcmUgbmV4dCBzZWxlY3RvcgorICAgIENTU1Nl
bGVjdG9yKiBoaXN0b3J5U2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yLT50YWdIaXN0b3J5KCk7
CisgICAgaWYgKCFoaXN0b3J5U2VsZWN0b3IpCiAgICAgICAgIHJldHVybiBTZWxlY3Rvck1hdGNo
ZXM7CiAKKyAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBuZXh0Q29udGV4dChjb250ZXh0KTsK
KyAgICBuZXh0Q29udGV4dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxlY3RvcjsKKwogICAgIGlmIChy
ZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKICAgICAgICAgLy8gQmFpbC1v
dXQgaWYgdGhpcyBzZWxlY3RvciBpcyBpcnJlbGV2YW50IGZvciB0aGUgcHNldWRvU3R5bGUKICAg
ICAgICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSAhPSBk
eW5hbWljUHNldWRvKQogICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
OwogCiAgICAgICAgIC8vIERpc2FibGUgOnZpc2l0ZWQgbWF0Y2hpbmcgd2hlbiB3ZSBzZWUgdGhl
IGZpcnN0IGxpbmsgb3IgdHJ5IHRvIG1hdGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3Rv
cnMuCi0gICAgICAgIGlmICghaXNTdWJTZWxlY3RvciAmJiAoZS0+aXNMaW5rKCkgfHwgKHJlbGF0
aW9uICE9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ICYmIHJlbGF0aW9uICE9IENTU1NlbGVjdG9y
OjpDaGlsZCkpKQotICAgICAgICAgICAgdmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaERp
c2FibGVkOworICAgICAgICBpZiAoIWNvbnRleHQuaXNTdWJTZWxlY3RvciAmJiAoY29udGV4dC5l
bGVtZW50LT5pc0xpbmsoKSB8fCAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQg
JiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkKSkpCisgICAgICAgICAgICBuZXh0Q29u
dGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRlZE1hdGNoRGlzYWJsZWQ7CiAgICAgfQogCiAg
ICAgc3dpdGNoIChyZWxhdGlvbikgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6
Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBDb250YWluZXJOb2RlKiBuID0g
ZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAg
ICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIFNlbGVj
dG9yTWF0Y2ggbWF0Y2ggPSBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFs
c2UsIHZpc2l0ZWRNYXRjaFR5cGUpOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gY29u
dGV4dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgIG5leHRDb250ZXh0LmlzU3Vi
U2VsZWN0b3IgPSBmYWxzZTsKKyAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsK
KyAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlID0gMDsKKyAgICAgICAgZm9y
ICg7IG5leHRDb250ZXh0LmVsZW1lbnQ7IG5leHRDb250ZXh0LmVsZW1lbnQgPSBuZXh0Q29udGV4
dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2gg
bWF0Y2ggPSBjaGVja1NlbGVjdG9yKG5leHRDb250ZXh0LCBkeW5hbWljUHNldWRvKTsKICAgICAg
ICAgICAgIGlmIChtYXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JG
YWlsc0NvbXBsZXRlbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7
CisKICAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGlsZDoKLSAgICAgICAgewotICAgICAgICAgICAg
Q29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIGlmICghbiB8
fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZh
aWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7
Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8s
IGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKLSAgICAgICAgfQorICAgICAgICBuZXh0Q29udGV4
dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgIGlm
ICghbmV4dENvbnRleHQuZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxz
Q29tcGxldGVseTsKKyAgICAgICAgbmV4dENvbnRleHQuaXNTdWJTZWxlY3RvciA9IGZhbHNlOwor
ICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOworICAgICAgICBuZXh0Q29udGV4
dC5lbGVtZW50UGFyZW50U3R5bGUgPSAwOworICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3Rvcihu
ZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CisKICAgICBjYXNlIENTU1NlbGVjdG9yOjpEaXJl
Y3RBZGphY2VudDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1
bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnRO
b2RlKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVt
ZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0
eWxlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAgICAg
ICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxl
cygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZSA9IGUtPnByZXZpb3VzRWxlbWVudFNp
YmxpbmcoKTsKLSAgICAgICAgICAgIGlmICghZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0FsbFNpYmxpbmdzOwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Io
c2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7CisgICAgICAg
IGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkgJiYgY29udGV4dC5lbGVtZW50LT5wYXJlbnRF
bGVtZW50KCkpIHsKKyAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRl
eHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBjb250ZXh0LmVs
ZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGlmIChwYXJl
bnRTdHlsZSkKKyAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3Rl
ZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwogICAgICAgICB9CisgICAgICAgIG5leHRDb250ZXh0
LmVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKKyAg
ICAgICAgaWYgKCFuZXh0Q29udGV4dC5lbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIFNlbGVj
dG9yRmFpbHNBbGxTaWJsaW5nczsKKyAgICAgICAgbmV4dENvbnRleHQuaXNTdWJTZWxlY3RvciA9
IGZhbHNlOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOworICAgICAgICBu
ZXh0Q29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgPSAwOworICAgICAgICByZXR1cm4gY2hlY2tT
ZWxlY3RvcihuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CisKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpJbmRpcmVjdEFkamFjZW50OgotICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNP
bmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUo
KSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxl
ID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwor
ICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYmIGNvbnRleHQuZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUg
PSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogY29u
dGV4dC5lbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBp
ZiAocGFyZW50U3R5bGUpCiAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVu
QWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAgICAgICAgfQotICAgICAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgZSA9IGUtPnByZXZpb3VzRWxlbWVudFNpYmxpbmco
KTsKLSAgICAgICAgICAgIGlmICghZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JG
YWlsc0FsbFNpYmxpbmdzOwotICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNr
U2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7
CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKTsKKyAgICAgICAgbmV4dENvbnRleHQuaXNTdWJTZWxlY3RvciA9IGZh
bHNlOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOworICAgICAgICBuZXh0
Q29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgPSAwOworICAgICAgICBmb3IgKDsgbmV4dENvbnRl
eHQuZWxlbWVudDsgbmV4dENvbnRleHQuZWxlbWVudCA9IG5leHRDb250ZXh0LmVsZW1lbnQtPnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRj
aCA9IGNoZWNrU2VsZWN0b3IobmV4dENvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAg
ICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxz
QWxsU2libGluZ3MgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAgICB9OwotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKKwogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlN1YlNlbGVjdG9yOgogICAgICAgICAvLyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYgc29t
ZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAogICAgICAgICAvLyBXZSBtYWtlIGFuIGV4
Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBhbmQgYWxsb3cgYSBzZXQgb2Yg
cHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCiAgICAgICAgIC8vIHRvIGZvbGxvdyB0
aGUgcHNldWRvIGVsZW1lbnRzLgotICAgICAgICBpZiAoKGVsZW1lbnRTdHlsZSB8fCBtX2lzQ29s
bGVjdGluZ1J1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBkeW5hbWlj
UHNldWRvICE9IFNFTEVDVElPTgotICAgICAgICAgICAgICYmICEoKFJlbmRlclNjcm9sbGJhcjo6
c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJf
Q09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYgc2VsLT5tX21hdGNoID09IENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCisgICAgICAgIGlmICgoY29udGV4dC5lbGVtZW50U3R5
bGUgfHwgbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VV
RE8gJiYgZHluYW1pY1BzZXVkbyAhPSBTRUxFQ1RJT04KKyAgICAgICAgICAgICAmJiAhKChSZW5k
ZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8g
PT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIpICYmIGNvbnRl
eHQuc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSkKICAgICAg
ICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgcmV0dXJuIGNo
ZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCB0cnVlLCB2aXNpdGVkTWF0Y2hUeXBl
LCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSk7CisgICAgICAgIG5leHRDb250ZXh0
LmlzU3ViU2VsZWN0b3IgPSB0cnVlOworICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihuZXh0
Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CisKICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dE
ZXNjZW5kYW50OgogICAgICAgICB7Ci0gICAgICAgICAgICBOb2RlKiBzaGFkb3dIb3N0Tm9kZSA9
IGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOwotICAgICAgICAgICAgaWYgKHNoYWRvd0hvc3ROb2Rl
ID09IGUgfHwgIXNoYWRvd0hvc3ROb2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBO
b2RlKiBzaGFkb3dIb3N0Tm9kZSA9IGNvbnRleHQuZWxlbWVudC0+c2hhZG93QW5jZXN0b3JOb2Rl
KCk7CisgICAgICAgICAgICBpZiAoc2hhZG93SG9zdE5vZGUgPT0gY29udGV4dC5lbGVtZW50IHx8
ICFzaGFkb3dIb3N0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4oc2hhZG93SG9zdE5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0
b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7CisgICAg
ICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gdG9FbGVtZW50KHNoYWRvd0hvc3ROb2RlKTsK
KyAgICAgICAgICAgIG5leHRDb250ZXh0LmlzU3ViU2VsZWN0b3IgPSBmYWxzZTsKKyAgICAgICAg
ICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7CisgICAgICAgICAgICBuZXh0Q29udGV4
dC5lbGVtZW50UGFyZW50U3R5bGUgPSAwOworICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0
b3IobmV4dENvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOwogICAgICAgICB9CiAgICAgfQogCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
OwogfQogCkBAIC02ODcsNjMgKzcwMyw2OSBAQCBzdGF0aWMgYm9vbCBhbnlBdHRyaWJ1dGVNYXRj
aGVzKEVsZW1lbnQqIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpNYXRjaCBtYXRjaCwgY29ucwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8s
IGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlLCBS
ZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxl
KSBjb25zdAorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29uc3QgU2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKSBj
b25zdAogewotICAgIEFTU0VSVChlKTsKLSAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0
Y2hlcyhlLCBzZWwpKQorICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IGNvbnRleHQuZWxl
bWVudDsKKyAgICBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0
b3I7CisgICAgQVNTRVJUKGVsZW1lbnQpOworICAgIEFTU0VSVChzZWxlY3Rvcik7CisKKyAgICBp
ZiAoIVNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OkNsYXNzKQotICAgICAgICByZXR1cm4gZS0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxTdHls
ZWRFbGVtZW50Kj4oZSktPmNsYXNzTmFtZXMoKS5jb250YWlucyhzZWwtPnZhbHVlKCkpOworICAg
IGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCisgICAgICAgIHJl
dHVybiBlbGVtZW50LT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihl
bGVtZW50KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbGVjdG9yLT52YWx1ZSgpKTsKIAotICAg
IGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQotICAgICAgICByZXR1cm4gZS0+
aGFzSUQoKSAmJiBlLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IHNlbC0+dmFsdWUoKTsKKyAg
ICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQorICAgICAgICByZXR1
cm4gZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09
IHNlbGVjdG9yLT52YWx1ZSgpOwogCi0gICAgaWYgKHNlbC0+aXNBdHRyaWJ1dGVTZWxlY3Rvcigp
KSB7Ci0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWwtPmF0dHJpYnV0ZSgp
OworICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKSB7CisgICAgICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWxlY3Rvci0+YXR0cmlidXRlKCk7CiAKLSAgICAg
ICAgaWYgKCFlLT5oYXNBdHRyaWJ1dGVzKCkpCisgICAgICAgIGlmICghZWxlbWVudC0+aGFzQXR0
cmlidXRlcygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGJvb2wgY2Fz
ZVNlbnNpdGl2ZSA9ICFtX2RvY3VtZW50SXNIVE1MIHx8ICFodG1sQXR0cmlidXRlSGFzQ2FzZUlu
c2Vuc2l0aXZlVmFsdWUoYXR0cik7CiAKLSAgICAgICAgaWYgKCFhbnlBdHRyaWJ1dGVNYXRjaGVz
KGUsIHN0YXRpY19jYXN0PENTU1NlbGVjdG9yOjpNYXRjaD4oc2VsLT5tX21hdGNoKSwgYXR0ciwg
c2VsLT52YWx1ZSgpLCBjYXNlU2Vuc2l0aXZlKSkKKyAgICAgICAgaWYgKCFhbnlBdHRyaWJ1dGVN
YXRjaGVzKGVsZW1lbnQsIHN0YXRpY19jYXN0PENTU1NlbGVjdG9yOjpNYXRjaD4oc2VsZWN0b3It
Pm1fbWF0Y2gpLCBhdHRyLCBzZWxlY3Rvci0+dmFsdWUoKSwgY2FzZVNlbnNpdGl2ZSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7CiAgICAgICAgIC8vIEhhbmRsZSA6bm90IHVwIGZy
b250LgotICAgICAgICBpZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b05vdCkgewotICAgICAgICAgICAgQVNTRVJUKHNlbC0+c2VsZWN0b3JMaXN0KCkpOwotICAgICAg
ICAgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsID0gc2VsLT5zZWxlY3Rvckxpc3QoKS0+Zmly
c3QoKTsgc3ViU2VsOyBzdWJTZWwgPSBzdWJTZWwtPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBp
ZiAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90KSB7Cisg
ICAgICAgICAgICBBU1NFUlQoc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpKTsKKyAgICAgICAgICAg
IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAg
ICBzdWJDb250ZXh0LmlzU3ViU2VsZWN0b3IgPSB0cnVlOworICAgICAgICAgICAgZm9yIChzdWJD
b250ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJD
b250ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gc3ViQ29udGV4dC5zZWxlY3Rv
ci0+dGFnSGlzdG9yeSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gOm5vdCBjYW5ub3QgbmVzdC4g
SSBkb24ndCByZWFsbHkga25vdyB3aHkgdGhpcyBpcyBhCiAgICAgICAgICAgICAgICAgLy8gcmVz
dHJpY3Rpb24gaW4gQ1NTMywgYnV0IGl0IGlzLCBzbyBsZXQncyBob25vciBpdC4KICAgICAgICAg
ICAgICAgICAvLyB0aGUgcGFyc2VyIGVuZm9yY2VzIHRoYXQgdGhpcyBuZXZlciBvY2N1cnMKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoc3ViU2VsLT5wc2V1ZG9UeXBlKCkgIT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb05vdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN1YkNvbnRleHQuc2VsZWN0b3It
PnBzZXVkb1R5cGUoKSAhPSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90KTsKICAgICAgICAgICAgICAg
ICAvLyBXZSBzZWxlY3QgYmV0d2VlbiA6dmlzaXRlZCBhbmQgOmxpbmsgd2hlbiBhcHBseWluZy4g
V2UgZG9uJ3Qga25vdyB3aGljaCBvbmUgYXBwbGllZCAob3Igbm90KSB5ZXQuCi0gICAgICAgICAg
ICAgICAgaWYgKHN1YlNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNp
dGVkIHx8IChzdWJTZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluayAm
JiB2aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQpKQorICAgICAgICAgICAg
ICAgIGlmIChzdWJDb250ZXh0LnNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb1Zpc2l0ZWQgfHwgKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvTGluayAmJiBzdWJDb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPT0g
VmlzaXRlZE1hdGNoRW5hYmxlZCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzdWJTZWwsIGUsIGR5bmFtaWNQ
c2V1ZG8sIHRydWUsIHZpc2l0ZWRNYXRjaFR5cGUsIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVu
dFN0eWxlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc3ViQ29udGV4
dCwgZHluYW1pY1BzZXVkbykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8g
JiYgKFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1p
Y1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikp
IHsKICAgICAgICAgICAgIC8vIENTUyBzY3JvbGxiYXJzIG1hdGNoIGEgc3BlY2lmaWMgc3Vic2V0
IG9mIHBzZXVkbyBjbGFzc2VzLCBhbmQgdGhleSBoYXZlIHNwZWNpYWxpemVkIHJ1bGVzIGZvciBl
YWNoCiAgICAgICAgICAgICAvLyAoc2luY2UgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIGludm9sdmVk
KS4KLSAgICAgICAgICAgIHJldHVybiBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKHNlbCwgZHlu
YW1pY1BzZXVkbyk7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFz
cyhzZWxlY3RvciwgZHluYW1pY1BzZXVkbyk7CiAgICAgICAgIH0gZWxzZSBpZiAoZHluYW1pY1Bz
ZXVkbyA9PSBTRUxFQ1RJT04pIHsKLSAgICAgICAgICAgIGlmIChzZWwtPnBzZXVkb1R5cGUoKSA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUpCisgICAgICAgICAgICBpZiAoc2Vs
ZWN0b3ItPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLT5pc0FjdGl2ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIGVsZW1l
bnQgcHNldWRvIGNsYXNzIGNoZWNraW5nLgotICAgICAgICBzd2l0Y2ggKHNlbC0+cHNldWRvVHlw
ZSgpKSB7CisgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSkgewogICAgICAg
ICAgICAgLy8gUHNldWRvIGNsYXNzZXM6CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b05vdDoKICAgICAgICAgICAgIGJyZWFrOyAvLyBBbHJlYWR5IGhhbmRsZWQgdXAgYWJvdmUuCiAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VtcHR5OgogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmb3IgKE5v
ZGUqIG4gPSBlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CisgICAg
ICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0g
bi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50
Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzU3LDIyICs3NzksMjIgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCog
ZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBl
bGVtZW50U3R5bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSAmJiAoZS0+ZG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdS
dWxlcygpIHx8IGUtPnJlbmRlclN0eWxlKCktPnVuaXF1ZSgpKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+cmVuZGVyU3R5bGUoKSAmJiAoZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdSdWxlcygpIHx8IGVsZW1lbnQtPnJlbmRlclN0eWxl
KCktPnVuaXF1ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnJlbmRlclN0
eWxlKCktPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRmlyc3RDaGlsZDoKICAgICAgICAgICAgIC8vIGZpcnN0LWNoaWxkIG1h
dGNoZXMgdGhlIGZpcnN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVudAotICAgICAgICAgICAgaWYg
KGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPnBhcmVudEVs
ZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFlLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpCisgICAgICAgICAgICAg
ICAgaWYgKCFlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGlu
Z1J1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHls
ZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/
IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1l
bnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5l
bGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IGVsZW1lbnQtPnBhcmVu
dE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0
eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZm
ZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0
ICYmIGNoaWxkU3R5bGUpCkBAIC03ODMsMTcgKzgwNSwxNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9J
ZCYgZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0ZpcnN0T2ZUeXBlOgogICAgICAgICAgICAgLy8gZmlyc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBm
aXJzdCBlbGVtZW50IG9mIGl0cyB0eXBlCi0gICAgICAgICAgICBpZiAoZS0+cGFyZW50RWxlbWVu
dCgpKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAg
ICAgICAgICAgICAgYm9vbCByZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHR5cGUgPSBlLT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgRWxlbWVudCogc2libGluZyA9IGUtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2li
bGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAg
ICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50LT50YWdRTmFt
ZSgpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1l
bnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmct
PnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoc2li
bGluZy0+aGFzVGFnTmFtZSh0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xs
ZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IGUtPnBhcmVudE5v
ZGUoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRT
dHlsZSA6IGVsZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC04MDIsMTEgKzgyNCwxMSBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9J
ZCYgZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0xhc3RDaGlsZDoKICAgICAgICAgICAgIC8vIGxhc3QtY2hpbGQgbWF0Y2hlcyB0aGUgbGFzdCBj
aGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKLSAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRF
bGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXN1
bHQgPSBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgIWUtPm5l
eHRFbGVtZW50U2libGluZygpOworICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1l
bnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBib29sIHJl
c3VsdCA9IHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiAhZWxl
bWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29s
bGVjdGluZ1J1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hp
bGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7
Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRT
dHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7
CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5l
bGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxl
KCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRl
eHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVt
ZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUp
CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3Rl
ZEJ5TGFzdENoaWxkUnVsZXMoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBj
aGlsZFN0eWxlKQpAQCAtODE3LDE2ICs4MzksMTYgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0
T2ZUeXBlOgogICAgICAgICAgICAgLy8gbGFzdC1vZi10eXBlIG1hdGNoZXMgdGhlIGxhc3QgZWxl
bWVudCBvZiBpdHMgdHlwZQotICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQg
PSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRF
bGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBw
YXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVu
dFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNG
aW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FO
YW1lKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZS0+
bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxl
bWVudFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5
cGUgPSBlbGVtZW50LT50YWdRTmFtZSgpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgRWxl
bWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBz
aWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQpAQCAtODM0LDEzICs4NTYsMTMg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNl
bCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Pbmx5Q2hpbGQ6Ci0gICAgICAg
ICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewot
ICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RDaGlsZCA9ICFlLT5wcmV2aW91c0VsZW1lbnRTaWJs
aW5nKCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBvbmx5Q2hpbGQgPSBmaXJzdENoaWxkICYmIHBh
cmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiAhZS0+bmV4dEVsZW1l
bnRTaWJsaW5nKCk7CisgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RDaGls
ZCA9ICFlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAg
Ym9vbCBvbmx5Q2hpbGQgPSBmaXJzdENoaWxkICYmIHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQ
YXJzaW5nQ2hpbGRyZW4oKSAmJiAhZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7CiAKICAg
ICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVu
dFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFy
ZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0
eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1l
bnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RD
aGlsZFJ1bGVzKCk7CkBAIC04NTUsOSArODc3LDkgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Pbmx5
T2ZUeXBlOgogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2VsZWN0b3IgaXMgdmVyeSBzbG93
LgotICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVt
ZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVu
dC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGlu
Z1J1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5y
ZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDog
cGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBh
cmVudFN0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hp
bGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRp
b25hbFJ1bGVzKCk7CkBAIC04NjUsMTIgKzg4NywxMiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYg
ZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQt
PmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlLT50
YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9
IGUtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmct
PnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50LT50YWdRTmFtZSgpOworICAgICAgICAgICAgICAgIGZv
ciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxp
bmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmco
KSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZS0+bmV4dEVs
ZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNp
YmxpbmcoKSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9
IGVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGlu
Zy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxp
bmctPmhhc1RhZ05hbWUodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgfQpAQCAtODc4LDExICs5MDAsMTEgQEAgYm9vbCBTZWxlY3Rv
ckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwg
UHNldWRvSWQmIGQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhDaGlsZDoKLSAgICAgICAgICAgIGlmICghc2VsLT5w
YXJzZU50aCgpKQorICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50
ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50
RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGlu
dCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5n
ID0gZS0+cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGlu
Zy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOyBz
aWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzID0gc2libGluZy0+cmVuZGVyU3R5bGUo
KTsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzID8gcy0+Y2hpbGRJbmRl
eCgpIDogMDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4KSB7CkBAIC04OTMsMjA4ICs5
MTUsMjEyIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVj
dG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgewotICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1l
bnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBh
cmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRT
dHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVt
ZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk
U3R5bGUtPnNldENoaWxkSW5kZXgoY291bnQpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFy
ZW50U3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRy
ZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAg
ICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoTnRoKGNvdW50KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoT2ZUeXBlOgotICAgICAgICAgICAgaWYgKCFzZWwt
PnBhcnNlTnRoKCkpCisgICAgICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1l
bnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJl
bnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAg
aW50IGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBl
ID0gZS0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNp
YmxpbmcgPSBlLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBz
aWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5wcmV2aW91c0VsZW1l
bnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRT
aWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUo
dHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/
IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAg
ICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVu
dFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5k
ZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2Fy
ZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3It
Pm1hdGNoTnRoKGNvdW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvTnRoTGFzdENoaWxkOgotICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCisg
ICAgICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRF
bGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxl
bWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVj
dGluZ1J1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50
LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxl
IDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENo
aWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNp
bmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgaW50IGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1l
bnQqIHNpYmxpbmcgPSBlLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9
IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKQorICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJs
aW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpCiAgICAgICAgICAg
ICAgICAgICAgICsrY291bnQ7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291
bnQpKQorICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2hOdGgoY291bnQpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0T2ZUeXBlOgot
ICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCisgICAgICAgICAgICBpZiAoIXNlbGVj
dG9yLT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYg
KEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAg
ICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgewotICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUg
PyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1l
bnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVu
ZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3
YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0g
MTsKLSAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5h
bWUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlLT5u
ZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVt
ZW50U2libGluZygpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlw
ZSA9IGVsZW1lbnQtPnRhZ1FOYW1lKCk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVt
ZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNp
YmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICsrY291bnQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzZWwt
Pm1hdGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoTnRo
KGNvdW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVGFy
Z2V0OgotICAgICAgICAgICAgaWYgKGUgPT0gZS0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCisg
ICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Bbnk6Ci0gICAgICAgICAgICBmb3IgKENTU1Nl
bGVjdG9yKiBzZWxlY3RvciA9IHNlbC0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHNlbGVjdG9y
OyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgZSwgZHluYW1pY1BzZXVkbywgdHJ1
ZSwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpID09
IFNlbGVjdG9yTWF0Y2hlcykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc3ViQ29u
dGV4dChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBzdWJDb250ZXh0LmlzU3ViU2VsZWN0b3Ig
PSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3RvciA9IHNlbGVj
dG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsgc3ViQ29u
dGV4dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250ZXh0LnNlbGVjdG9y
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihzdWJDb250ZXh0LCBk
eW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQXV0b2ZpbGw6Ci0g
ICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAg
ICAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoSFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueUxpbms6
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6CiAgICAgICAgICAgICAvLyA6
dmlzaXRlZCBhbmQgOmxpbmsgbWF0Y2hlcyBhcmUgc2VwYXJhdGVkIGxhdGVyIHdoZW4gYXBwbHlp
bmcgdGhlIHN0eWxlLiBIZXJlIGJvdGggY2xhc3NlcyBtYXRjaCBhbGwgbGlua3MuLi4KLSAgICAg
ICAgICAgIHJldHVybiBlLT5pc0xpbmsoKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5p
c0xpbmsoKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoKICAgICAg
ICAgICAgIC8vIC4uLmV4Y2VwdCBpZiA6dmlzaXRlZCBtYXRjaGluZyBpcyBkaXNhYmxlZCBmb3Ig
YW5jZXN0b3Ivc2libGluZyBtYXRjaGluZy4KLSAgICAgICAgICAgIHJldHVybiBlLT5pc0xpbmso
KSAmJiB2aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQ7CisgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCkgJiYgY29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID09
IFZpc2l0ZWRNYXRjaEVuYWJsZWQ7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ry
YWc6Ci0gICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQotICAgICAgICAgICAgICAgIGVsZW1l
bnRTdHlsZS0+c2V0QWZmZWN0ZWRCeURyYWdSdWxlcyh0cnVlKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGUtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+
c2V0QWZmZWN0ZWRCeURyYWdSdWxlcyh0cnVlKTsKLSAgICAgICAgICAgIGlmIChlLT5yZW5kZXJl
cigpICYmIGUtPnJlbmRlcmVyKCktPmlzRHJhZ2dpbmcoKSkKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LmVsZW1lbnRTdHlsZSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+
c2V0QWZmZWN0ZWRCeURyYWdSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1l
bnQtPnJlbmRlclN0eWxlKCkpCisgICAgICAgICAgICAgICAgZWxlbWVudC0+cmVuZGVyU3R5bGUo
KS0+c2V0QWZmZWN0ZWRCeURyYWdSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50
LT5yZW5kZXJlcigpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCktPmlzRHJhZ2dpbmcoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9Gb2N1czoKLSAgICAgICAgICAgIHJldHVybiBtYXRjaGVzRm9j
dXNQc2V1ZG9DbGFzcyhlKTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzRm9jdXNQc2V1ZG9D
bGFzcyhlbGVtZW50KTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6CiAg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91bGQg
bmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAvLyBocmVmIGFuZCAqOmhv
dmVyIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzaXRl
cyBsaWtlIHdzai5jb20uCi0gICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGlzU3Vi
U2VsZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhhc1RhZ05hbWUoYVRhZykpIHx8IGUt
PmlzTGluaygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkKLSAgICAgICAg
ICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxlcyh0cnVlKTsK
LSAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpKQotICAgICAgICAgICAg
ICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxlcyh0cnVlKTsK
LSAgICAgICAgICAgICAgICBpZiAoZS0+aG92ZXJlZCgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXIpKQorICAg
ICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBjb250ZXh0LmlzU3ViU2VsZWN0b3IgfHwg
KHNlbGVjdG9yLT5oYXNUYWcoKSAmJiAhZWxlbWVudC0+aGFzVGFnTmFtZShhVGFnKSkgfHwgZWxl
bWVudC0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5
bGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3Rl
ZEJ5SG92ZXJSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5y
ZW5kZXJTdHlsZSgpKQorICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5yZW5kZXJTdHlsZSgp
LT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZWxl
bWVudC0+aG92ZXJlZCgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9T
dGF0ZShlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXIpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CiAgICAgICAgICAgICAvLyBJZiB3
ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiA6YWN0aXZlIHNob3VsZCBuZXZlciBtYXRjaCBhbmNo
b3JzIHdpdGggbm8KICAgICAgICAgICAgIC8vIGhyZWYgYW5kICo6YWN0aXZlIHNob3VsZCBub3Qg
bWF0Y2ggYW55dGhpbmcuCi0gICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGlzU3Vi
U2VsZWN0b3IgfHwgKHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhhc1RhZ05hbWUoYVRhZykpIHx8IGUt
PmlzTGluaygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkKLSAgICAgICAg
ICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUp
OwotICAgICAgICAgICAgICAgIGlmIChlLT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZSkpCisg
ICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGNvbnRleHQuaXNTdWJTZWxlY3RvciB8
fCAoc2VsZWN0b3ItPmhhc1RhZygpICYmICFlbGVtZW50LT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBl
bGVtZW50LT5pc0xpbmsoKSkgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRT
dHlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEFmZmVj
dGVkQnlBY3RpdmVSdWxlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50
LT5yZW5kZXJTdHlsZSgpKQorICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5yZW5kZXJTdHls
ZSgpLT5zZXRBZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYg
KGVsZW1lbnQtPmFjdGl2ZSgpIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1
ZG9TdGF0ZShlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW5hYmxlZDoKLSAgICAgICAgICAgIGlm
IChlICYmIGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCk7CisgICAgICAgICAgICBpZiAoZWxlbWVudCAmJiBl
bGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Z1bGxQYWdlTWVkaWE6Ci0gICAgICAgICAgICBy
ZXR1cm4gZSAmJiBlLT5kb2N1bWVudCgpICYmIGUtPmRvY3VtZW50KCktPmlzTWVkaWFEb2N1bWVu
dCgpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKSAm
JiBlbGVtZW50LT5kb2N1bWVudCgpLT5pc01lZGlhRG9jdW1lbnQoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGUgJiYgZS0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpOworICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpOwogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EaXNhYmxlZDoKLSAgICAgICAgICAgIGlmIChl
ICYmIGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICFl
LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOworICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxl
bWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gIWVs
ZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVhZE9ubHk6Ci0gICAgICAgICAgICBpZiAoIWUg
fHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBpZiAoIWVsZW1lbnQg
fHwgIWVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIGUtPmlzVGV4dEZvcm1Db250cm9sKCkgJiYg
ZS0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+
aXNUZXh0Rm9ybUNvbnRyb2woKSAmJiBlbGVtZW50LT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVhZFdyaXRlOgotICAgICAgICAgICAg
aWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgaWYgKCFl
bGVtZW50IHx8ICFlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBlLT5pc1RleHRGb3JtQ29udHJv
bCgpICYmICFlLT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsKKyAgICAgICAgICAgIHJldHVybiBl
bGVtZW50LT5pc1RleHRGb3JtQ29udHJvbCgpICYmICFlbGVtZW50LT5pc1JlYWRPbmx5Rm9ybUNv
bnRyb2woKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT3B0aW9uYWw6Ci0gICAg
ICAgICAgICByZXR1cm4gZSAmJiBlLT5pc09wdGlvbmFsRm9ybUNvbnRyb2woKTsKKyAgICAgICAg
ICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQtPmlzT3B0aW9uYWxGb3JtQ29udHJvbCgpOwog
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZXF1aXJlZDoKLSAgICAgICAgICAgIHJl
dHVybiBlICYmIGUtPmlzUmVxdWlyZWRGb3JtQ29udHJvbCgpOworICAgICAgICAgICAgcmV0dXJu
IGVsZW1lbnQgJiYgZWxlbWVudC0+aXNSZXF1aXJlZEZvcm1Db250cm9sKCk7CiAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1ZhbGlkOgotICAgICAgICAgICAgaWYgKCFlKQorICAgICAg
ICAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGUtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZS0+d2lsbFZhbGlkYXRlKCkgJiYgZS0+aXNWYWxpZEZvcm1Db250
cm9sRWxlbWVudCgpOworICAgICAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Q29udGFp
bnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT53aWxs
VmFsaWRhdGUoKSAmJiBlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ludmFsaWQ6Ci0gICAgICAgICAgICBpZiAoIWUp
CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVs
ZXMoKTsKLSAgICAgICAgICAgIHJldHVybiAoZS0+d2lsbFZhbGlkYXRlKCkgJiYgIWUtPmlzVmFs
aWRGb3JtQ29udHJvbEVsZW1lbnQoKSkgfHwgZS0+aGFzVW5hY2NlcHRhYmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1
bGVzKCk7CisgICAgICAgICAgICByZXR1cm4gKGVsZW1lbnQtPndpbGxWYWxpZGF0ZSgpICYmICFl
bGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpIHx8IGVsZW1lbnQtPmhhc1VuYWNj
ZXB0YWJsZVZhbHVlKCk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NoZWNrZWQ6
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+
aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggV2luSUUgYWxsb3dzIGNoZWNrZWQgYW5kIGluZGV0
ZXJtaW5hdGUgdG8gY28tZXhpc3QsIHRoZSBDU1Mgc2VsZWN0b3Igc3BlYyBzYXlzIHRoYXQKICAg
ICAgICAgICAgICAgICAvLyB5b3UgY2FuJ3QgYmUgYm90aCBjaGVja2VkIGFuZCBpbmRldGVybWlu
YXRlLiBXZSB3aWxsIGJlaGF2ZSBsaWtlIFdpbklFIGJlaGluZCB0aGUgc2NlbmVzIGFuZCBqdXN0
CiAgICAgICAgICAgICAgICAgLy8gb2JleSB0aGUgQ1NTIHNwZWMgaGVyZSBpbiB0aGUgdGVzdCBm
b3IgbWF0Y2hpbmcgdGhlIHBzZXVkby4KLSAgICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpOworICAgICAgICAgICAgICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7
CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPnNob3Vs
ZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKGUtPmhh
c1RhZ05hbWUob3B0aW9uVGFnKSAmJiB0b0hUTUxPcHRpb25FbGVtZW50KGUpLT5zZWxlY3RlZCgp
KQorICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykgJiYg
dG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KS0+c2VsZWN0ZWQoKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0luZGV0ZXJtaW5hdGU6CiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVu
dCgpKQorICAgICAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKFBS
T0dSRVNTX1RBRykKLSAgICAgICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShwcm9ncmVzc1Rh
ZykpIHsKLSAgICAgICAgICAgICAgICAgICAgSFRNTFByb2dyZXNzRWxlbWVudCogcHJvZ3Jlc3Mg
PSBzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oZSk7CisgICAgICAgICAgICAgICAg
aWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgICAgICAgICAg
ICAgIEhUTUxQcm9ncmVzc0VsZW1lbnQqIHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dy
ZXNzRWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3Mg
JiYgIXByb2dyZXNzLT5pc0RldGVybWluYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogI2VuZGlmCi0gICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
ID0gZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwogICAgICAgICAgICAg
ICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Jvb3Q6Ci0g
ICAgICAgICAgICBpZiAoZSA9PSBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKKyAg
ICAgICAgICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhbmc6CiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIHZhbHVlID0gZS0+Y29tcHV0ZUluaGVyaXRlZExh
bmd1YWdlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVudCA9
IHNlbC0+YXJndW1lbnQoKTsKKyAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgdmFsdWUgPSBl
bGVtZW50LT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGFyZ3VtZW50ID0gc2VsZWN0b3ItPmFyZ3VtZW50KCk7CiAgICAgICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCAhdmFsdWUuc3RhcnRzV2l0aChhcmd1bWVu
dCwgZmFsc2UpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBp
ZiAodmFsdWUubGVuZ3RoKCkgIT0gYXJndW1lbnQubGVuZ3RoKCkgJiYgdmFsdWVbYXJndW1lbnQu
bGVuZ3RoKCldICE9ICctJykKQEAgLTExMDcsMzQgKzExMzMsMzQgQEAgYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNl
dWRvSWQmIGQKICAgICAgICAgICAgIC8vIGVsZW1lbnQgaXMgYW4gZWxlbWVudCBpbiB0aGUgZG9j
dW1lbnQsIHRoZSAnZnVsbC1zY3JlZW4nIHBzZXVkb2NsYXNzIGFwcGxpZXMgdG8KICAgICAgICAg
ICAgIC8vIHRoYXQgZWxlbWVudC4gQWxzbywgYW4gPGlmcmFtZT4sIDxvYmplY3Q+IG9yIDxlbWJl
ZD4gZWxlbWVudCB3aG9zZSBjaGlsZCBicm93c2luZwogICAgICAgICAgICAgLy8gY29udGV4dCdz
IERvY3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlIGhhcyB0aGUgJ2Z1bGwtc2NyZWVu
JyBwc2V1ZG9jbGFzcyBhcHBsaWVkLgotICAgICAgICAgICAgaWYgKGUtPmlzRnJhbWVFbGVtZW50
QmFzZSgpICYmIHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4oZSktPmNvbnRhaW5z
RnVsbFNjcmVlbkVsZW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc0ZyYW1lRWxl
bWVudEJhc2UoKSAmJiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KGVsZW1lbnQp
LT5jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICBpZiAoIWUtPmRvY3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigp
KQorICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxTY3Jl
ZW4oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4g
ZSA9PSBlLT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdEN1
cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9BbmltYXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlvbjoKLSAgICAgICAgICAgIGlmIChlICE9IGUt
PmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAgICAgICAg
ICAgaWYgKGVsZW1lbnQgIT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxT
Y3JlZW5FbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgcmV0dXJuIGUtPmRvY3VtZW50KCktPmlzQW5pbWF0aW5nRnVsbFNjcmVlbigpOworICAgICAg
ICAgICAgcmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCktPmlzQW5pbWF0aW5nRnVsbFNjcmVlbigp
OwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsU2NyZWVuQW5jZXN0b3I6Ci0g
ICAgICAgICAgICByZXR1cm4gZS0+Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpOworICAgICAg
ICAgICAgcmV0dXJuIGVsZW1lbnQtPmNvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQoKTsKICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVsbFNjcmVlbkRvY3VtZW50OgogICAgICAgICAg
ICAgLy8gV2hpbGUgYSBEb2N1bWVudCBpcyBpbiB0aGUgZnVsbHNjcmVlbiBzdGF0ZSwgdGhlICdm
dWxsLXNjcmVlbi1kb2N1bWVudCcgcHNldWRvY2xhc3MgYXBwbGllcwogICAgICAgICAgICAgLy8g
dG8gYWxsIGVsZW1lbnRzIG9mIHRoYXQgRG9jdW1lbnQuCi0gICAgICAgICAgICBpZiAoIWUtPmRv
Y3VtZW50KCktPndlYmtpdElzRnVsbFNjcmVlbigpKQorICAgICAgICAgICAgaWYgKCFlbGVtZW50
LT5kb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxTY3JlZW4oKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9JblJhbmdlOgotICAgICAgICAgICAgaWYgKCFlKQorICAgICAg
ICAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGUtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZS0+aXNJblJhbmdlKCk7CisgICAgICAgICAgICBlbGVtZW50LT5k
b2N1bWVudCgpLT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOworICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnQtPmlzSW5SYW5nZSgpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9PdXRPZlJhbmdlOgotICAgICAgICAgICAgaWYgKCFlKQorICAgICAgICAgICAgaWYgKCFl
bGVtZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGUtPmRv
Y3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZS0+aXNPdXRPZlJhbmdlKCk7CisgICAgICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgp
LT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOworICAgICAgICAgICAgcmV0dXJuIGVs
ZW1lbnQtPmlzT3V0T2ZSYW5nZSgpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9V
bmtub3duOgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3RQYXJzZWQ6CiAgICAg
ICAgIGRlZmF1bHQ6CkBAIC0xMTQzLDE4ICsxMTY5LDE4IEBAIGJvb2wgU2VsZWN0b3JDaGVja2Vy
OjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lk
JiBkCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoc2Vs
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7Ci0gICAgICAgIGlmICgh
ZWxlbWVudFN0eWxlICYmICFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkKKyAgICBpZiAoc2VsZWN0
b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKKyAgICAgICAgaWYg
KCFjb250ZXh0LmVsZW1lbnRTdHlsZSAmJiAhbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKHNlbC0+aXNVbmtub3duUHNldWRv
RWxlbWVudCgpKSB7CisgICAgICAgIGlmIChzZWxlY3Rvci0+aXNVbmtub3duUHNldWRvRWxlbWVu
dCgpKSB7CiAgICAgICAgICAgICBtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyA9IHRydWU7Ci0g
ICAgICAgICAgICByZXR1cm4gZS0+c2hhZG93UHNldWRvSWQoKSA9PSBzZWwtPnZhbHVlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSA9PSBzZWxlY3Rvci0+
dmFsdWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2Vs
ZWN0b3I6OnBzZXVkb0lkKHNlbC0+cHNldWRvVHlwZSgpKTsKKyAgICAgICAgUHNldWRvSWQgcHNl
dWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQoc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSk7CiAg
ICAgICAgIGlmIChwc2V1ZG9JZCA9PSBGSVJTVF9MRVRURVIpIHsKLSAgICAgICAgICAgIGlmIChE
b2N1bWVudCogZG9jdW1lbnQgPSBlLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgaWYgKERvY3Vt
ZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgZG9j
dW1lbnQtPnNldFVzZXNGaXJzdExldHRlclJ1bGVzKHRydWUpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChwc2V1ZG9JZCAhPSBOT1BTRVVETykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
aAppbmRleCA0ODcyODQ3MzY0ZjZjNTUwNjJlYjI1NjdjOWJkYWNmMWQzODFiODk3Li4wNmI2MTlk
ODdkYzgzZTNhMDQxMzY0YzIxZDA5MWU1YWE1NGYxZTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5oCkBAIC01MSw4ICs1MSwyOCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFNlbGVj
dG9yTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxlY3Rv
ckZhaWxzQWxsU2libGluZ3MsIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5IH07CiAgICAgZW51bSBW
aXNpdGVkTWF0Y2hUeXBlIHsgVmlzaXRlZE1hdGNoRGlzYWJsZWQsIFZpc2l0ZWRNYXRjaEVuYWJs
ZWQgfTsKKworICAgIHN0cnVjdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCB7CisgICAgICAgIC8v
IEluaXRpYWwgc2VsZWN0b3IgY29uc3RydWN0b3IKKyAgICAgICAgU2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBWaXNpdGVkTWF0
Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUgPSAwLCBS
ZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlID0gMCkKKyAgICAgICAgICAgIDogc2VsZWN0
b3Ioc2VsZWN0b3IpCisgICAgICAgICAgICAsIGVsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgICAg
ICwgdmlzaXRlZE1hdGNoVHlwZSh2aXNpdGVkTWF0Y2hUeXBlKQorICAgICAgICAgICAgLCBlbGVt
ZW50U3R5bGUoZWxlbWVudFN0eWxlKQorICAgICAgICAgICAgLCBlbGVtZW50UGFyZW50U3R5bGUo
ZWxlbWVudFBhcmVudFN0eWxlKQorICAgICAgICAgICAgLCBpc1N1YlNlbGVjdG9yKGZhbHNlKQor
ICAgICAgICB7IH0KKworICAgICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CisgICAgICAgIEVs
ZW1lbnQqIGVsZW1lbnQ7CisgICAgICAgIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlw
ZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZTsKKyAgICAgICAgUmVuZGVyU3R5
bGUqIGVsZW1lbnRQYXJlbnRTdHlsZTsKKyAgICAgICAgYm9vbCBpc1N1YlNlbGVjdG9yOworICAg
IH07CisKICAgICBib29sIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgYm9v
bCBpc0Zhc3RDaGVja2FibGVTZWxlY3RvciA9IGZhbHNlKSBjb25zdDsKLSAgICBTZWxlY3Rvck1h
dGNoIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgUHNldWRvSWQmIGR5bmFt
aWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSwgUmVuZGVyU3R5
bGUqID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSA9IDApIGNvbnN0OworICAg
IFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4
dCYsIFBzZXVkb0lkJikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKICAgICBib29sIGZhc3RDaGVja1NlbGVjdG9yKGNv
bnN0IENTU1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogCkBAIC05Niw3ICsxMTYs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5lU2VsZWN0b3JTY29wZXMoY29u
c3QgQ1NTU2VsZWN0b3JMaXN0JiwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVz
LCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpOwogCiBwcml2YXRlOgot
ICAgIGJvb2wgY2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9J
ZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlLCBS
ZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0OworICAg
IGJvb2wgY2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIFBz
ZXVkb0lkJikgY29uc3Q7CiAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1Nl
bGVjdG9yKiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0OwogICAgIHN0YXRpYyBib29s
IGlzRnJhbWVGb2N1c2VkKGNvbnN0IEVsZW1lbnQqKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126268</attachid>
            <date>2012-02-09 03:08:15 -0800</date>
            <delta_ts>2012-02-09 03:08:15 -0800</delta_ts>
            <desc>patch for EWS</desc>
            <filename>bug-77525-20120209200813.patch</filename>
            <type>text/plain</type>
            <size>49818</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MjA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYThmMjgwZTAyYjRjYjE5
MGQxM2EzM2EzZTU2NDdlOWE5Nzk5OTc1OC4uMGFhMzIzOGYzYTM4ZWIyNWNkOWY2ZjlkMGMxZWYw
MDQzNWRmMjY1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI4IEBACiAyMDEyLTAyLTA5ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcjogbW92ZSBwYXJhbWV0ZXJzIGludG8gYSBzdHJ1Y3QK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTI1CisK
KyAgICAgICAgQWRkZWQgJ1NlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JyBzdHJ1Y3QgdG8gaG9sZCBw
YXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uCisgICAgICAgIEFkYXB0ZWQgY2FsbGluZyBzaXRl
cy4KKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIChyZWZhY3RvcmluZykKKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3Ip
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAg
ICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCk6CisgICAgICAgIChTZWxlY3RvckNo
ZWNrZXIpOgorCisyMDEyLTAyLTA5ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hy
b21pdW0ub3JnPgorCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDcxOTcuCiAg
ICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEwNzE5NwogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1MjUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCBlZDQ1MjhjY2I0Y2UwODRmMzI4YzY2ZGY1
YzA0MzFiZDAyYWE2YmJiLi43ZDg0YTgxYTU1NTlhZWRhODZjZmVlN2Q1NWIyOWYzYzlmZjFjYWQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC0yMDkyLDcgKzIw
OTIsOCBAQCBpbmxpbmUgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKGNvbnN0
IFJ1bGVEYXRhJiBydWxlRGF0YSkKICAgICB9CiAKICAgICAvLyBTbG93IHBhdGguCi0gICAgU2Vs
ZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0
b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFtaWNQc2V1ZG8sIGZhbHNl
LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQsIHN0eWxlKCksIG1fcGFyZW50
Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDApOworICAgIFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0YS5zZWxlY3Rvcigp
LCBtX2VsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCwgc3R5bGUo
KSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMCk7CisgICAg
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2Vs
ZWN0b3IoY29udGV4dCwgbV9keW5hbWljUHNldWRvKTsKICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0
b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
ZiAobV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8gJiYgbV9jaGVja2VyLnBzZXVk
b1N0eWxlKCkgIT0gbV9keW5hbWljUHNldWRvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcAppbmRleCBiYzgyNGUxYzA3ZDFjN2E3YjI0NTUxZjVmMTVkYWMzYjdlMGZkMjk1Li5k
NDYzNmI3MTAzNTk4YTI0ZGUxZDA3YjAzOTQ5ZGVlOTE4ZjAxNWZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtMjY4LDEzICsyNjgsMTQgQEAgRUluc2lkZUxpbmsg
U2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBlbGVt
ZW50KSBjb25zdAogCiBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxl
Y3Rvciogc2VsLCBFbGVtZW50KiBlbGVtZW50LCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9y
KSBjb25zdAogewotICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICBp
ZiAoaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgJiYgIWVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKSB7
CiAgICAgICAgIGlmICghZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3Ioc2VsLCBlbGVtZW50LCBW
aXNpdGVkTWF0Y2hEaXNhYmxlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IHJldHVybiBmYXN0Q2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQpOwogICAgIH0KLSAgICByZXR1
cm4gY2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBWaXNp
dGVkTWF0Y2hEaXNhYmxlZCkgPT0gU2VsZWN0b3JNYXRjaGVzOworCisgICAgUHNldWRvSWQgZHlu
YW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgIHJldHVybiBjaGVja1NlbGVjdG9yKFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0KHNlbCwgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0
Y2hEaXNhYmxlZCksIGR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlczsKIH0KIAogbmFt
ZXNwYWNlIHsKQEAgLTQ0MiwxMDIgKzQ0MywxMTcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Omlz
RmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIC8vICog
U2VsZWN0b3JGYWlsc0xvY2FsbHkgICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciB0aGUgZWxl
bWVudCBlCiAvLyAqIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyAtIHRoZSBzZWxlY3RvciBmYWls
cyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb2YgZQogLy8gKiBTZWxlY3RvckZhaWxzQ29tcGxldGVs
eSAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5nIG9yIGFuY2VzdG9y
IG9mIGUKLVNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFt
aWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0
Y2hUeXBlLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVudFBh
cmVudFN0eWxlKSBjb25zdAorU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29u
dGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNWRykK
ICAgICAvLyBTcGVjOiBDU1MyIHNlbGVjdG9ycyBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgKGNv
bmNlcHR1YWxseSkgY2xvbmVkIERPTSB0cmVlCiAgICAgLy8gYmVjYXVzZSBpdHMgY29udGVudHMg
YXJlIG5vdCBwYXJ0IG9mIHRoZSBmb3JtYWwgZG9jdW1lbnQgc3RydWN0dXJlLgotICAgIGlmIChl
LT5pc1NWR1NoYWRvd1Jvb3QoKSkKKyAgICBpZiAoY29udGV4dC5lbGVtZW50LT5pc1NWR1NoYWRv
d1Jvb3QoKSkKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogI2VuZGlm
CiAKICAgICAvLyBmaXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2gKLSAgICBpZiAoIWNoZWNrT25l
U2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCB2aXNpdGVkTWF0
Y2hUeXBlLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCisgICAgaWYgKCFjaGVj
a09uZVNlbGVjdG9yKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pKQogICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0xvY2FsbHk7CiAKICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgc2VsZWN0b3JzIGhh
cyB0byBtYXRjaAotICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9IHNlbC0+cmVs
YXRpb24oKTsKKyAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24gPSBjb250ZXh0LnNl
bGVjdG9yLT5yZWxhdGlvbigpOwogCi0gICAgLy8gUHJlcGFyZSBuZXh0IHNlbAotICAgIHNlbCA9
IHNlbC0+dGFnSGlzdG9yeSgpOwotICAgIGlmICghc2VsKQorICAgIC8vIFByZXBhcmUgbmV4dCBz
ZWxlY3RvcgorICAgIENTU1NlbGVjdG9yKiBoaXN0b3J5U2VsZWN0b3IgPSBjb250ZXh0LnNlbGVj
dG9yLT50YWdIaXN0b3J5KCk7CisgICAgaWYgKCFoaXN0b3J5U2VsZWN0b3IpCiAgICAgICAgIHJl
dHVybiBTZWxlY3Rvck1hdGNoZXM7CiAKKyAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBuZXh0
Q29udGV4dChjb250ZXh0KTsKKyAgICBuZXh0Q29udGV4dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxl
Y3RvcjsKKwogICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsK
ICAgICAgICAgLy8gQmFpbC1vdXQgaWYgdGhpcyBzZWxlY3RvciBpcyBpcnJlbGV2YW50IGZvciB0
aGUgcHNldWRvU3R5bGUKICAgICAgICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYg
bV9wc2V1ZG9TdHlsZSAhPSBkeW5hbWljUHNldWRvKQogICAgICAgICAgICAgcmV0dXJuIFNlbGVj
dG9yRmFpbHNDb21wbGV0ZWx5OwogCiAgICAgICAgIC8vIERpc2FibGUgOnZpc2l0ZWQgbWF0Y2hp
bmcgd2hlbiB3ZSBzZWUgdGhlIGZpcnN0IGxpbmsgb3IgdHJ5IHRvIG1hdGNoIGFueXRoaW5nIGVs
c2UgdGhhbiBhbiBhbmNlc3RvcnMuCi0gICAgICAgIGlmICghaXNTdWJTZWxlY3RvciAmJiAoZS0+
aXNMaW5rKCkgfHwgKHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ICYmIHJlbGF0
aW9uICE9IENTU1NlbGVjdG9yOjpDaGlsZCkpKQotICAgICAgICAgICAgdmlzaXRlZE1hdGNoVHlw
ZSA9IFZpc2l0ZWRNYXRjaERpc2FibGVkOworICAgICAgICBpZiAoIWNvbnRleHQuaXNTdWJTZWxl
Y3RvciAmJiAoY29udGV4dC5lbGVtZW50LT5pc0xpbmsoKSB8fCAocmVsYXRpb24gIT0gQ1NTU2Vs
ZWN0b3I6OkRlc2NlbmRhbnQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkKSkpCisg
ICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRlZE1hdGNoRGlz
YWJsZWQ7CiAgICAgfQogCiAgICAgc3dpdGNoIChyZWxhdGlvbikgewogICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OkRlc2NlbmRhbnQ6Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBD
b250YWluZXJOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgaWYgKCFuIHx8
ICFuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsK
LSAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBjaGVja1NlbGVjdG9yKHNlbCwgZSwg
ZHluYW1pY1BzZXVkbywgZmFsc2UsIHZpc2l0ZWRNYXRjaFR5cGUpOworICAgICAgICBuZXh0Q29u
dGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgICAg
IG5leHRDb250ZXh0LmlzU3ViU2VsZWN0b3IgPSBmYWxzZTsKKyAgICAgICAgbmV4dENvbnRleHQu
ZWxlbWVudFN0eWxlID0gMDsKKyAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFBhcmVudFN0eWxl
ID0gMDsKKyAgICAgICAgZm9yICg7IG5leHRDb250ZXh0LmVsZW1lbnQ7IG5leHRDb250ZXh0LmVs
ZW1lbnQgPSBuZXh0Q29udGV4dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAg
ICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBjaGVja1NlbGVjdG9yKG5leHRDb250ZXh0LCBkeW5h
bWljUHNldWRvKTsKICAgICAgICAgICAgIGlmIChtYXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwg
bWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG1hdGNoOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gU2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHk7CisKICAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGlsZDoKLSAgICAg
ICAgewotICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKLSAg
ICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIGUgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWws
IGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCB2aXNpdGVkTWF0Y2hUeXBlKTsKLSAgICAgICAgfQor
ICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCk7CisgICAgICAgIGlmICghbmV4dENvbnRleHQuZWxlbWVudCkKKyAgICAgICAgICAgIHJl
dHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgbmV4dENvbnRleHQuaXNTdWJT
ZWxlY3RvciA9IGZhbHNlOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwor
ICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgPSAwOworICAgICAgICByZXR1
cm4gY2hlY2tTZWxlY3RvcihuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CisKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50
Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJl
bnROb2RlKCktPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxl
KQotICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5
RGlyZWN0QWRqYWNlbnRSdWxlcygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZSA9IGUt
PnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGlmICghZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzOwotICAgICAgICAgICAgcmV0
dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgdmlzaXRlZE1h
dGNoVHlwZSk7CisgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkgJiYgY29udGV4
dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50
U3R5bGUgOiBjb250ZXh0LmVsZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKKyAg
ICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwogICAgICAgICB9Cisg
ICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnByZXZpb3VzRWxl
bWVudFNpYmxpbmcoKTsKKyAgICAgICAgaWYgKCFuZXh0Q29udGV4dC5lbGVtZW50KQorICAgICAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKKyAgICAgICAgbmV4dENvbnRl
eHQuaXNTdWJTZWxlY3RvciA9IGZhbHNlOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5
bGUgPSAwOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgPSAwOworICAg
ICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CisK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgotICAgICAgICBpZiAoIW1f
aXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2Rl
KCktPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgp
LT5yZW5kZXJTdHlsZSgpOworICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYm
IGNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVu
dFBhcmVudFN0eWxlIDogY29udGV4dC5lbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxl
KCk7CiAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAgICAgICAgICAgcGFyZW50
U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAg
ICAgICAgfQotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgZSA9IGUtPnByZXZp
b3VzRWxlbWVudFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGlmICghZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzOwotICAgICAgICAgICAgU2VsZWN0b3JN
YXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwg
dmlzaXRlZE1hdGNoVHlwZSk7CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBjb250ZXh0
LmVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKKyAgICAgICAgbmV4dENvbnRleHQu
aXNTdWJTZWxlY3RvciA9IGZhbHNlOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUg
PSAwOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgPSAwOworICAgICAg
ICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQuZWxlbWVudCA9IG5leHRD
b250ZXh0LmVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICAgICAg
U2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3IobmV4dENvbnRleHQsIGR5bmFtaWNQ
c2V1ZG8pOwogICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRj
aCA9PSBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0Nv
bXBsZXRlbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAgICB9OwotICAg
ICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKKwog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOgogICAgICAgICAvLyBhIHNlbGVjdG9y
IGlzIGludmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAogICAgICAg
ICAvLyBXZSBtYWtlIGFuIGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBh
bmQgYWxsb3cgYSBzZXQgb2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCiAgICAg
ICAgIC8vIHRvIGZvbGxvdyB0aGUgcHNldWRvIGVsZW1lbnRzLgotICAgICAgICBpZiAoKGVsZW1l
bnRTdHlsZSB8fCBtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgJiYgZHluYW1pY1BzZXVkbyAhPSBO
T1BTRVVETyAmJiBkeW5hbWljUHNldWRvICE9IFNFTEVDVElPTgotICAgICAgICAgICAgICYmICEo
KFJlbmRlclNjcm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1Bz
ZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYg
c2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCisgICAgICAgIGlmICgo
Y29udGV4dC5lbGVtZW50U3R5bGUgfHwgbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpICYmIGR5bmFt
aWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgZHluYW1pY1BzZXVkbyAhPSBTRUxFQ1RJT04KKyAgICAg
ICAgICAgICAmJiAhKChSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgp
IHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09
IFJFU0laRVIpICYmIG5leHRDb250ZXh0LnNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzcykpCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHk7Ci0gICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywg
dHJ1ZSwgdmlzaXRlZE1hdGNoVHlwZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUp
OworICAgICAgICBuZXh0Q29udGV4dC5pc1N1YlNlbGVjdG9yID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIGNoZWNrU2VsZWN0b3IobmV4dENvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOworCiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDoKICAgICAgICAgewotICAgICAgICAgICAg
Tm9kZSogc2hhZG93SG9zdE5vZGUgPSBlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICAgICAg
ICAgIGlmIChzaGFkb3dIb3N0Tm9kZSA9PSBlIHx8ICFzaGFkb3dIb3N0Tm9kZS0+aXNFbGVtZW50
Tm9kZSgpKQorICAgICAgICAgICAgTm9kZSogc2hhZG93SG9zdE5vZGUgPSBjb250ZXh0LmVsZW1l
bnQtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgICAgICAgICAgaWYgKHNoYWRvd0hvc3ROb2Rl
ID09IGNvbnRleHQuZWxlbWVudCB8fCAhc2hhZG93SG9zdE5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAg
ICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHNoYWRvd0hvc3ROb2RlKTsKLSAgICAgICAg
ICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIHZp
c2l0ZWRNYXRjaFR5cGUpOworICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IHRvRWxl
bWVudChzaGFkb3dIb3N0Tm9kZSk7CisgICAgICAgICAgICBuZXh0Q29udGV4dC5pc1N1YlNlbGVj
dG9yID0gZmFsc2U7CisgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwor
ICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlID0gMDsKKyAgICAgICAg
ICAgIHJldHVybiBjaGVja1NlbGVjdG9yKG5leHRDb250ZXh0LCBkeW5hbWljUHNldWRvKTsKICAg
ICAgICAgfQogICAgIH0KIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseTsKIH0KIApAQCAtNjg3LDYzICs3MDMsNjkgQEAgc3RhdGlj
IGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhFbGVtZW50KiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6
TWF0Y2ggbWF0Y2gsIGNvbnMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBz
ZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIFZpc2l0ZWRNYXRjaFR5
cGUgdmlzaXRlZE1hdGNoVHlwZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVyU3R5
bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQc2V1
ZG9JZCYgZHluYW1pY1BzZXVkbykgY29uc3QKIHsKLSAgICBBU1NFUlQoZSk7Ci0gICAgaWYgKCFT
ZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZSwgc2VsKSkKKyAgICBFbGVtZW50KiBjb25zdCAm
IGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7CisgICAgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2Vs
ZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBBU1NF
UlQoc2VsZWN0b3IpOworCisgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZWxl
bWVudCwgc2VsZWN0b3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoc2VsLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykKLSAgICAgICAgcmV0dXJuIGUtPmhhc0NsYXNz
KCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpLT5jbGFzc05hbWVzKCkuY29udGFp
bnMoc2VsLT52YWx1ZSgpKTsKKyAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0
b3I6OkNsYXNzKQorICAgICAgICByZXR1cm4gZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNf
Y2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMoKS5jb250YWlucyhzZWxl
Y3Rvci0+dmFsdWUoKSk7CiAKLSAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJ
ZCkKLSAgICAgICAgcmV0dXJuIGUtPmhhc0lEKCkgJiYgZS0+aWRGb3JTdHlsZVJlc29sdXRpb24o
KSA9PSBzZWwtPnZhbHVlKCk7CisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVj
dG9yOjpJZCkKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+aWRG
b3JTdHlsZVJlc29sdXRpb24oKSA9PSBzZWxlY3Rvci0+dmFsdWUoKTsKIAotICAgIGlmIChzZWwt
PmlzQXR0cmlidXRlU2VsZWN0b3IoKSkgewotICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyID0gc2VsLT5hdHRyaWJ1dGUoKTsKKyAgICBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2Vs
ZWN0b3IoKSkgeworICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyID0gc2VsZWN0b3It
PmF0dHJpYnV0ZSgpOwogCi0gICAgICAgIGlmICghZS0+aGFzQXR0cmlidXRlcygpKQorICAgICAg
ICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSAhbV9kb2N1bWVudElzSFRNTCB8fCAh
aHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGF0dHIpOwogCi0gICAgICAgIGlm
ICghYW55QXR0cmlidXRlTWF0Y2hlcyhlLCBzdGF0aWNfY2FzdDxDU1NTZWxlY3Rvcjo6TWF0Y2g+
KHNlbC0+bV9tYXRjaCksIGF0dHIsIHNlbC0+dmFsdWUoKSwgY2FzZVNlbnNpdGl2ZSkpCisgICAg
ICAgIGlmICghYW55QXR0cmlidXRlTWF0Y2hlcyhlbGVtZW50LCBzdGF0aWNfY2FzdDxDU1NTZWxl
Y3Rvcjo6TWF0Y2g+KHNlbGVjdG9yLT5tX21hdGNoKSwgYXR0ciwgc2VsZWN0b3ItPnZhbHVlKCks
IGNhc2VTZW5zaXRpdmUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7CisgICAgaWYg
KHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykgewogICAgICAg
ICAvLyBIYW5kbGUgOm5vdCB1cCBmcm9udC4KLSAgICAgICAgaWYgKHNlbC0+cHNldWRvVHlwZSgp
ID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpIHsKLSAgICAgICAgICAgIEFTU0VSVChzZWwtPnNl
bGVjdG9yTGlzdCgpKTsKLSAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbCA9IHNl
bC0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YlNlbDsgc3ViU2VsID0gc3ViU2VsLT50YWdI
aXN0b3J5KCkpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb05vdCkgeworICAgICAgICAgICAgQVNTRVJUKHNlbGVjdG9yLT5zZWxlY3Rv
ckxpc3QoKSk7CisgICAgICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBzdWJDb250ZXh0
KGNvbnRleHQpOworICAgICAgICAgICAgc3ViQ29udGV4dC5pc1N1YlNlbGVjdG9yID0gdHJ1ZTsK
KyAgICAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rv
ckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3Rv
ciA9IHN1YkNvbnRleHQuc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewogICAgICAgICAgICAgICAg
IC8vIDpub3QgY2Fubm90IG5lc3QuIEkgZG9uJ3QgcmVhbGx5IGtub3cgd2h5IHRoaXMgaXMgYQog
ICAgICAgICAgICAgICAgIC8vIHJlc3RyaWN0aW9uIGluIENTUzMsIGJ1dCBpdCBpcywgc28gbGV0
J3MgaG9ub3IgaXQuCiAgICAgICAgICAgICAgICAgLy8gdGhlIHBhcnNlciBlbmZvcmNlcyB0aGF0
IHRoaXMgbmV2ZXIgb2NjdXJzCi0gICAgICAgICAgICAgICAgQVNTRVJUKHN1YlNlbC0+cHNldWRv
VHlwZSgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpOworICAgICAgICAgICAgICAgIEFTU0VS
VChzdWJDb250ZXh0LnNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkgIT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b05vdCk7CiAgICAgICAgICAgICAgICAgLy8gV2Ugc2VsZWN0IGJldHdlZW4gOnZpc2l0ZWQgYW5k
IDpsaW5rIHdoZW4gYXBwbHlpbmcuIFdlIGRvbid0IGtub3cgd2hpY2ggb25lIGFwcGxpZWQgKG9y
IG5vdCkgeWV0LgotICAgICAgICAgICAgICAgIGlmIChzdWJTZWwtPnBzZXVkb1R5cGUoKSA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCB8fCAoc3ViU2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0xpbmsgJiYgdmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hF
bmFibGVkKSkKKyAgICAgICAgICAgICAgICBpZiAoc3ViQ29udGV4dC5zZWxlY3Rvci0+cHNldWRv
VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkIHx8IChzdWJDb250ZXh0LnNlbGVj
dG9yLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbmsgJiYgc3ViQ29udGV4
dC52aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lU2VsZWN0
b3Ioc3ViU2VsLCBlLCBkeW5hbWljUHNldWRvLCB0cnVlLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVt
ZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCisgICAgICAgICAgICAgICAgaWYgKCFjaGVj
a09uZVNlbGVjdG9yKHN1YkNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChkeW5h
bWljUHNldWRvICE9IE5PUFNFVURPICYmIChSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0
eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5h
bWljUHNldWRvID09IFJFU0laRVIpKSB7CiAgICAgICAgICAgICAvLyBDU1Mgc2Nyb2xsYmFycyBt
YXRjaCBhIHNwZWNpZmljIHN1YnNldCBvZiBwc2V1ZG8gY2xhc3NlcywgYW5kIHRoZXkgaGF2ZSBz
cGVjaWFsaXplZCBydWxlcyBmb3IgZWFjaAogICAgICAgICAgICAgLy8gKHNpbmNlIHRoZXJlIGFy
ZSBubyBlbGVtZW50cyBpbnZvbHZlZCkuCi0gICAgICAgICAgICByZXR1cm4gY2hlY2tTY3JvbGxi
YXJQc2V1ZG9DbGFzcyhzZWwsIGR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgcmV0dXJuIGNo
ZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3Moc2VsZWN0b3IsIGR5bmFtaWNQc2V1ZG8pOwogICAgICAg
ICB9IGVsc2UgaWYgKGR5bmFtaWNQc2V1ZG8gPT0gU0VMRUNUSU9OKSB7Ci0gICAgICAgICAgICBp
ZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1dpbmRvd0luYWN0aXZl
KQorICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb1dpbmRvd0luYWN0aXZlKQogICAgICAgICAgICAgICAgIHJldHVybiAhbV9kb2N1bWVu
dC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIE5vcm1hbCBlbGVtZW50IHBzZXVkbyBjbGFzcyBjaGVja2luZy4KLSAgICAgICAg
c3dpdGNoIChzZWwtPnBzZXVkb1R5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5w
c2V1ZG9UeXBlKCkpIHsKICAgICAgICAgICAgIC8vIFBzZXVkbyBjbGFzc2VzOgogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3Q6CiAgICAgICAgICAgICBicmVhazsgLy8gQWxyZWFk
eSBoYW5kbGVkIHVwIGFib3ZlLgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbXB0
eToKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gZS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+
bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGVsZW1lbnQt
PmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTc1Nywy
MiArNzc5LDIyIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1Nl
bGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGlu
Z1J1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlLT5zZXRFbXB0eVN0YXRlKHJlc3VsdCk7
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlclN0eWxlKCkgJiYgKGUtPmRv
Y3VtZW50KCktPnVzZXNTaWJsaW5nUnVsZXMoKSB8fCBlLT5yZW5kZXJTdHlsZSgpLT51bmlxdWUo
KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlLT5yZW5kZXJTdHlsZSgpLT5zZXRFbXB0eVN0
YXRlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRTdHls
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRFbXB0
eVN0YXRlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPnJl
bmRlclN0eWxlKCkgJiYgKGVsZW1lbnQtPmRvY3VtZW50KCktPnVzZXNTaWJsaW5nUnVsZXMoKSB8
fCBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT51bmlxdWUoKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT5zZXRFbXB0eVN0YXRlKHJlc3VsdCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0Q2hpbGQ6CiAgICAgICAg
ICAgICAvLyBmaXJzdC1jaGlsZCBtYXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlzIGFuIGVs
ZW1lbnQKLSAgICAgICAgICAgIGlmIChlLT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAg
IGlmIChlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIHJl
c3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghZS0+cHJldmlvdXNFbGVtZW50U2li
bGluZygpKQorICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2li
bGluZygpKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAg
UmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBl
LT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBlLT5wYXJlbnROb2Rl
KCktPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGls
ZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVs
ZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50
U3R5bGUgOiBlbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBjaGlsZFN0eWxlKQpAQCAtNzgzLDE3ICs4MDUsMTcg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNl
bCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZToKICAgICAgICAgICAgIC8vIGZpcnN0
LW9mLXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQotICAgICAgICAg
ICAgaWYgKGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPnBh
cmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsK
LSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlLT5wcmV2aW91
c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0Vs
ZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0
eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVs
ZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxp
bmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkgewotICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFy
ZW50U3R5bGUgOiBlLT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8g
Y29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBlbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRl
clN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJk
UG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtODAyLDExICs4MjQsMTEg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNl
bCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0Q2hpbGQ6CiAgICAgICAgICAgICAvLyBsYXN0LWNo
aWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50Ci0gICAgICAgICAg
ICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewotICAg
ICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNp
bmdDaGlsZHJlbigpICYmICFlLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKKyAgICAgICAgICAgIGlm
IChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFy
c2luZ0NoaWxkcmVuKCkgJiYgIWVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOwogICAgICAg
ICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5
bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRF
bGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
Y2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUg
OiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBh
cmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5
bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRTdHlsZSkKQEAgLTgxNywxNiArODM5LDE2IEBAIGJv
b2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVs
ZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvTGFzdE9mVHlwZToKICAgICAgICAgICAgIC8vIGxhc3Qtb2YtdHlw
ZSBtYXRjaGVzIHRoZSBsYXN0IGVsZW1lbnQgb2YgaXRzIHR5cGUKLSAgICAgICAgICAgIGlmIChF
bGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAg
ICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkg
ewogICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8g
ZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50
U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRl
clN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2Fy
ZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBp
ZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHR5cGUgPSBlLT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
RWxlbWVudCogc2libGluZyA9IGUtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJs
aW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVu
dFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGlu
ZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUp
KQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAg
IH0KQEAgLTgzNCwxMyArODU2LDEzIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNl
bGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvT25seUNoaWxkOgotICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBl
LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSAh
ZS0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwotICAgICAgICAgICAgICAgIGJvb2wgb25seUNo
aWxkID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxk
cmVuKCkgJiYgIWUtPm5leHRFbGVtZW50U2libGluZygpOworICAgICAgICAgICAgaWYgKEVsZW1l
bnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSAhZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGlu
ZygpOworICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxkID0gZmlyc3RDaGlsZCAmJiBwYXJl
bnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgIWVsZW1lbnQtPm5leHRF
bGVtZW50U2libGluZygpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGluZ1J1
bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9
IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVs
ZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAg
ICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5
bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAg
ICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVu
dFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5k
ZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJz
dENoaWxkUnVsZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRD
aGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpOwpAQCAtODU1LDkgKzg3Nyw5IEBAIGJv
b2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVs
ZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvT25seU9mVHlwZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IHNlbGVjdG9yIGlzIHZlcnkgc2xvdy4KLSAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRF
bGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoRWxlbWVudCog
cGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAg
ICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0
eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0
LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVs
ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFm
ZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwpAQCAtODY1LDEyICs4ODcsMTIgQEAg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwg
RWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiB0eXBlID0gZS0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxp
bmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUo
KTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50
LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5w
cmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxp
bmctPmhhc1RhZ05hbWUodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVu
dCogc2libGluZyA9IGUtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0g
c2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2li
bGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KQEAgLTg3OCwxMSAr
OTAwLDExIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVj
dG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoQ2hpbGQ6Ci0g
ICAgICAgICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKKyAgICAgICAgICAgIGlmICghc2VsZWN0
b3ItPnBhcnNlTnRoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo
RWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAg
ICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkp
IHsKICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgRWxlbWVudCogc2libGluZyA9IGUtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2li
bGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAg
ICAgICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZp
b3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcyA9
IHNpYmxpbmctPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gcyA/IHMtPmNoaWxkSW5kZXgoKSA6IDA7CiAgICAgICAgICAgICAgICAgICAgIGlmIChp
bmRleCkgewpAQCAtODkzLDIwOCArOTE1LDIxMiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdS
dWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUg
PSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUgOiBlLT5yZW5kZXJTdHlsZSgpOwotICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBl
bGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0
eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1l
bnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVu
ZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkU3R5bGUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRDaGlsZEluZGV4KGNvdW50KTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMo
KTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoc2VsLT5tYXRjaE50
aChjb3VudCkpCisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3VudCkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aE9mVHlwZToK
LSAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgaWYgKCFzZWxl
Y3Rvci0+cGFyc2VOdGgoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlm
IChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAg
ICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQo
KSkgewogICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZS0+cHJldmlvdXNFbGVtZW50U2libGluZygp
OyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7
CisgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGVsZW1lbnQtPnRh
Z1FOYW1lKCk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0g
ZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2li
bGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgKytj
b3VudDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVj
dGluZ1J1bGVzT25seSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50
LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxl
IDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENo
aWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoc2VsLT5tYXRjaE50aChjb3VudCkpCisgICAgICAg
ICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RDaGlsZDoKLSAgICAgICAgICAgIGlm
ICghc2VsLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgo
KSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJl
bnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoRWxlbWVu
dCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAg
ICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVu
dFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250
ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxS
dWxlcygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVs
ZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZS0+bmV4dEVsZW1lbnRTaWJsaW5n
KCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkKKyAg
ICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0
RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50
U2libGluZygpKQogICAgICAgICAgICAgICAgICAgICArK2NvdW50OwotICAgICAgICAgICAgICAg
IGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3It
Pm1hdGNoTnRoKGNvdW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvTnRoTGFzdE9mVHlwZToKLSAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQor
ICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50
RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxl
Y3RpbmdSdWxlc09ubHkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVu
dC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHls
ZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRD
aGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJz
aW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgdHlwZSA9IGUtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBF
bGVtZW50KiBzaWJsaW5nID0gZS0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxp
bmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50LT50YWdRTmFtZSgpOworICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVtZW50
U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5n
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkp
CiAgICAgICAgICAgICAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBpZiAoc2VsLT5tYXRjaE50aChjb3VudCkpCisgICAgICAgICAgICAgICAg
aWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb1RhcmdldDoKLSAgICAgICAgICAgIGlmIChlID09IGUtPmRvY3Vt
ZW50KCktPmNzc1RhcmdldCgpKQorICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+
ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55Ogot
ICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWwtPnNlbGVjdG9yTGlz
dCgpLT5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQo
c2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3Ioc2VsZWN0b3Is
IGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIHZpc2l0ZWRNYXRjaFR5cGUsIGVsZW1lbnRTdHlsZSwg
ZWxlbWVudFBhcmVudFN0eWxlKSA9PSBTZWxlY3Rvck1hdGNoZXMpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAgICAgICAgc3Vi
Q29udGV4dC5pc1N1YlNlbGVjdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHN1YkNv
bnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YkNv
bnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5l
eHQoc3ViQ29udGV4dC5zZWxlY3RvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNr
U2VsZWN0b3Ioc3ViQ29udGV4dCwgZHluYW1pY1BzZXVkbykgPT0gU2VsZWN0b3JNYXRjaGVzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0F1dG9maWxsOgotICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
aWYgKEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCkp
CisgICAgICAgICAgICBpZiAoSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVu
dC0+dG9JbnB1dEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50
LT5pc0F1dG9maWxsZWQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9BbnlMaW5rOgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9M
aW5rOgogICAgICAgICAgICAgLy8gOnZpc2l0ZWQgYW5kIDpsaW5rIG1hdGNoZXMgYXJlIHNlcGFy
YXRlZCBsYXRlciB3aGVuIGFwcGx5aW5nIHRoZSBzdHlsZS4gSGVyZSBib3RoIGNsYXNzZXMgbWF0
Y2ggYWxsIGxpbmtzLi4uCi0gICAgICAgICAgICByZXR1cm4gZS0+aXNMaW5rKCk7CisgICAgICAg
ICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb1Zpc2l0ZWQ6CiAgICAgICAgICAgICAvLyAuLi5leGNlcHQgaWYgOnZpc2l0ZWQgbWF0
Y2hpbmcgaXMgZGlzYWJsZWQgZm9yIGFuY2VzdG9yL3NpYmxpbmcgbWF0Y2hpbmcuCi0gICAgICAg
ICAgICByZXR1cm4gZS0+aXNMaW5rKCkgJiYgdmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0
Y2hFbmFibGVkOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzTGluaygpICYmIGNvbnRl
eHQudmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkOwogICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9EcmFnOgotICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkK
LSAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlEcmFnUnVsZXModHJ1
ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpKQotICAgICAgICAgICAg
ICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlEcmFnUnVsZXModHJ1ZSk7Ci0gICAg
ICAgICAgICBpZiAoZS0+cmVuZGVyZXIoKSAmJiBlLT5yZW5kZXJlcigpLT5pc0RyYWdnaW5nKCkp
CisgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCisgICAgICAgICAgICAgICAg
Y29udGV4dC5lbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlEcmFnUnVsZXModHJ1ZSk7CisgICAg
ICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5yZW5kZXJTdHlsZSgpKQorICAgICAgICAgICAgICAg
IGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnNldEFmZmVjdGVkQnlEcmFnUnVsZXModHJ1ZSk7Cisg
ICAgICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJlcigp
LT5pc0RyYWdnaW5nKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXM6Ci0gICAgICAg
ICAgICByZXR1cm4gbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZSk7CisgICAgICAgICAgICByZXR1
cm4gbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCk7CiAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0hvdmVyOgogICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1v
ZGUsIHRoZW4gaG92ZXIgc2hvdWxkIG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0aCBubwogICAgICAg
ICAgICAgLy8gaHJlZiBhbmQgKjpob3ZlciBzaG91bGQgbm90IG1hdGNoIGFueXRoaW5nLiBUaGlz
IGlzIGltcG9ydGFudCBmb3Igc2l0ZXMgbGlrZSB3c2ouY29tLgotICAgICAgICAgICAgaWYgKG1f
c3RyaWN0UGFyc2luZyB8fCBpc1N1YlNlbGVjdG9yIHx8IChzZWwtPmhhc1RhZygpICYmICFlLT5o
YXNUYWdOYW1lKGFUYWcpKSB8fCBlLT5pc0xpbmsoKSkgewotICAgICAgICAgICAgICAgIGlmIChl
bGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0
ZWRCeUhvdmVyUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVy
U3R5bGUoKSkKLSAgICAgICAgICAgICAgICAgICAgZS0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0
ZWRCeUhvdmVyUnVsZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGUtPmhvdmVyZWQoKSB8
fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZSwgQ1NTU2VsZWN0
b3I6OlBzZXVkb0hvdmVyKSkKKyAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwgY29u
dGV4dC5pc1N1YlNlbGVjdG9yIHx8IChzZWxlY3Rvci0+aGFzVGFnKCkgJiYgIWVsZW1lbnQtPmhh
c1RhZ05hbWUoYVRhZykpIHx8IGVsZW1lbnQtPmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVs
ZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVyUnVsZXModHJ1ZSk7CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoZWxlbWVudC0+cmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
ZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeUhvdmVyUnVsZXModHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSB8fCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb0hv
dmVyKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZl
OgogICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gOmFjdGl2ZSBz
aG91bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAvLyBocmVmIGFu
ZCAqOmFjdGl2ZSBzaG91bGQgbm90IG1hdGNoIGFueXRoaW5nLgotICAgICAgICAgICAgaWYgKG1f
c3RyaWN0UGFyc2luZyB8fCBpc1N1YlNlbGVjdG9yIHx8IChzZWwtPmhhc1RhZygpICYmICFlLT5o
YXNUYWdOYW1lKGFUYWcpKSB8fCBlLT5pc0xpbmsoKSkgewotICAgICAgICAgICAgICAgIGlmIChl
bGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0
ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRl
clN0eWxlKCkpCi0gICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEFmZmVj
dGVkQnlBY3RpdmVSdWxlcyh0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAoZS0+YWN0aXZlKCkg
fHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGUsIENTU1NlbGVj
dG9yOjpQc2V1ZG9BY3RpdmUpKQorICAgICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBj
b250ZXh0LmlzU3ViU2VsZWN0b3IgfHwgKHNlbGVjdG9yLT5oYXNUYWcoKSAmJiAhZWxlbWVudC0+
aGFzVGFnTmFtZShhVGFnKSkgfHwgZWxlbWVudC0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
ZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoZWxlbWVudC0+cmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUp
OworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5hY3RpdmUoKSB8fCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVk
b0FjdGl2ZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Vu
YWJsZWQ6Ci0gICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBlLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOworICAgICAg
ICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsUGFn
ZU1lZGlhOgotICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+ZG9jdW1lbnQoKSAmJiBlLT5kb2N1
bWVudCgpLT5pc01lZGlhRG9jdW1lbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50ICYm
IGVsZW1lbnQtPmRvY3VtZW50KCkgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNNZWRpYURvY3Vt
ZW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlICYmIGUtPmlzRGVmYXVsdEJ1dHRvbkZv
ckZvcm0oKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQtPmlzRGVmYXVs
dEJ1dHRvbkZvckZvcm0oKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRGlzYWJs
ZWQ6Ci0gICAgICAgICAgICBpZiAoZSAmJiBlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiAhZS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsKKyAgICAgICAg
ICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuICFlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1JlYWRPbmx5
OgotICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAg
ICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBlLT5p
c1RleHRGb3JtQ29udHJvbCgpICYmIGUtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgpOworICAgICAg
ICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzVGV4dEZvcm1Db250cm9sKCkgJiYgZWxlbWVudC0+aXNS
ZWFkT25seUZvcm1Db250cm9sKCk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Jl
YWRXcml0ZToKLSAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQo
KSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1
cm4gZS0+aXNUZXh0Rm9ybUNvbnRyb2woKSAmJiAhZS0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7
CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNUZXh0Rm9ybUNvbnRyb2woKSAmJiAhZWxl
bWVudC0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb09wdGlvbmFsOgotICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS0+aXNPcHRpb25hbEZv
cm1Db250cm9sKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50LT5pc09w
dGlvbmFsRm9ybUNvbnRyb2woKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVx
dWlyZWQ6Ci0gICAgICAgICAgICByZXR1cm4gZSAmJiBlLT5pc1JlcXVpcmVkRm9ybUNvbnRyb2wo
KTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQtPmlzUmVxdWlyZWRGb3Jt
Q29udHJvbCgpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WYWxpZDoKLSAgICAg
ICAgICAgIGlmICghZSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRDb250YWluc1Zh
bGlkaXR5U3R5bGVSdWxlcygpOwotICAgICAgICAgICAgcmV0dXJuIGUtPndpbGxWYWxpZGF0ZSgp
ICYmIGUtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGVsZW1lbnQt
PmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7CisgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkgJiYgZWxlbWVudC0+aXNWYWxpZEZvcm1D
b250cm9sRWxlbWVudCgpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9JbnZhbGlk
OgotICAgICAgICAgICAgaWYgKCFlKQorICAgICAgICAgICAgaWYgKCFlbGVtZW50KQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldENv
bnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7Ci0gICAgICAgICAgICByZXR1cm4gKGUtPndpbGxW
YWxpZGF0ZSgpICYmICFlLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpIHx8IGUtPmhhc1Vu
YWNjZXB0YWJsZVZhbHVlKCk7CisgICAgICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLT5zZXRD
b250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOworICAgICAgICAgICAgcmV0dXJuIChlbGVtZW50
LT53aWxsVmFsaWRhdGUoKSAmJiAhZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgp
KSB8fCBlbGVtZW50LT5oYXNVbmFjY2VwdGFibGVWYWx1ZSgpOwogICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DaGVja2VkOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
ICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBpZiAo
IWVsZW1lbnQgfHwgIWVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIFdpbklFIGFs
bG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlIHRvIGNvLWV4aXN0LCB0aGUgQ1NTIHNlbGVj
dG9yIHNwZWMgc2F5cyB0aGF0CiAgICAgICAgICAgICAgICAgLy8geW91IGNhbid0IGJlIGJvdGgg
Y2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZS4gV2Ugd2lsbCBiZWhhdmUgbGlrZSBXaW5JRSBiZWhp
bmQgdGhlIHNjZW5lcyBhbmQganVzdAogICAgICAgICAgICAgICAgIC8vIG9iZXkgdGhlIENTUyBz
cGVjIGhlcmUgaW4gdGhlIHRlc3QgZm9yIG1hdGNoaW5nIHRoZSBwc2V1ZG8uCi0gICAgICAgICAg
ICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQo
KTsKKyAgICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVt
ZW50LT50b0lucHV0RWxlbWVudCgpOwogICAgICAgICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQg
JiYgaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkgJiYgIWlucHV0RWxlbWVudC0+
aXNJbmRldGVybWluYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9u
RWxlbWVudChlKS0+c2VsZWN0ZWQoKSkKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShvcHRpb25UYWcpICYmIHRvSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCktPnNlbGVj
dGVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9J
bmRldGVybWluYXRlOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghZSB8fCAh
ZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQg
fHwgIWVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgICAgICAgICAgICAgaWYgKGUt
Pmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEhUTUxQcm9n
cmVzc0VsZW1lbnQqIHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+
KGUpOworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFn
KSkgeworICAgICAgICAgICAgICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBwcm9ncmVzcyA9
IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByb2dyZXNzICYmICFwcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgICAgICAg
ICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVs
ZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYmIGlucHV0RWxlbWVu
dC0+aXNJbmRldGVybWluYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9Sb290OgotICAgICAgICAgICAgaWYgKGUgPT0gZS0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5k
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9M
YW5nOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyB2YWx1ZSA9
IGUtPmNvbXB1dGVJbmhlcml0ZWRMYW5ndWFnZSgpOwotICAgICAgICAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgYXJndW1lbnQgPSBzZWwtPmFyZ3VtZW50KCk7CisgICAgICAgICAgICAgICAg
QXRvbWljU3RyaW5nIHZhbHVlID0gZWxlbWVudC0+Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlKCk7
CisgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVudCA9IHNlbGVjdG9y
LT5hcmd1bWVudCgpOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkgfHwgIXZh
bHVlLnN0YXJ0c1dpdGgoYXJndW1lbnQsIGZhbHNlKSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpICE9IGFyZ3VtZW50Lmxlbmd0
aCgpICYmIHZhbHVlW2FyZ3VtZW50Lmxlbmd0aCgpXSAhPSAnLScpCkBAIC0xMTA3LDM0ICsxMTMz
LDM0IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9y
KiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAvLyBlbGVtZW50IGlz
IGFuIGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50LCB0aGUgJ2Z1bGwtc2NyZWVuJyBwc2V1ZG9jbGFz
cyBhcHBsaWVzIHRvCiAgICAgICAgICAgICAvLyB0aGF0IGVsZW1lbnQuIEFsc28sIGFuIDxpZnJh
bWU+LCA8b2JqZWN0PiBvciA8ZW1iZWQ+IGVsZW1lbnQgd2hvc2UgY2hpbGQgYnJvd3NpbmcKICAg
ICAgICAgICAgIC8vIGNvbnRleHQncyBEb2N1bWVudCBpcyBpbiB0aGUgZnVsbHNjcmVlbiBzdGF0
ZSBoYXMgdGhlICdmdWxsLXNjcmVlbicgcHNldWRvY2xhc3MgYXBwbGllZC4KLSAgICAgICAgICAg
IGlmIChlLT5pc0ZyYW1lRWxlbWVudEJhc2UoKSAmJiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVt
ZW50QmFzZSo+KGUpLT5jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkpCisgICAgICAgICAgICBp
ZiAoZWxlbWVudC0+aXNGcmFtZUVsZW1lbnRCYXNlKCkgJiYgc3RhdGljX2Nhc3Q8SFRNTEZyYW1l
RWxlbWVudEJhc2UqPihlbGVtZW50KS0+Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKCFlLT5kb2N1bWVudCgp
LT53ZWJraXRJc0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudC0+ZG9jdW1l
bnQoKS0+d2Via2l0SXNGdWxsU2NyZWVuKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgcmV0dXJuIGUgPT0gZS0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1
bGxTY3JlZW5FbGVtZW50KCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudCA9PSBlbGVtZW50
LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKTsKICAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW5pbWF0aW5nRnVsbFNjcmVlblRyYW5zaXRpb246Ci0g
ICAgICAgICAgICBpZiAoZSAhPSBlLT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVl
bkVsZW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChlbGVtZW50ICE9IGVsZW1lbnQtPmRvY3VtZW50
KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBlLT5kb2N1bWVudCgpLT5pc0FuaW1hdGlu
Z0Z1bGxTY3JlZW4oKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLT5p
c0FuaW1hdGluZ0Z1bGxTY3JlZW4oKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
RnVsbFNjcmVlbkFuY2VzdG9yOgotICAgICAgICAgICAgcmV0dXJuIGUtPmNvbnRhaW5zRnVsbFNj
cmVlbkVsZW1lbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5jb250YWluc0Z1bGxT
Y3JlZW5FbGVtZW50KCk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Z1bGxTY3Jl
ZW5Eb2N1bWVudDoKICAgICAgICAgICAgIC8vIFdoaWxlIGEgRG9jdW1lbnQgaXMgaW4gdGhlIGZ1
bGxzY3JlZW4gc3RhdGUsIHRoZSAnZnVsbC1zY3JlZW4tZG9jdW1lbnQnIHBzZXVkb2NsYXNzIGFw
cGxpZXMKICAgICAgICAgICAgIC8vIHRvIGFsbCBlbGVtZW50cyBvZiB0aGF0IERvY3VtZW50Lgot
ICAgICAgICAgICAgaWYgKCFlLT5kb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxTY3JlZW4oKSkKKyAg
ICAgICAgICAgIGlmICghZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2NyZWVuKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAjZW5kaWYKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSW5SYW5nZToKLSAgICAg
ICAgICAgIGlmICghZSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRDb250YWluc1Zh
bGlkaXR5U3R5bGVSdWxlcygpOwotICAgICAgICAgICAgcmV0dXJuIGUtPmlzSW5SYW5nZSgpOwor
ICAgICAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxl
UnVsZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5pc0luUmFuZ2UoKTsKICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT3V0T2ZSYW5nZToKLSAgICAgICAgICAgIGlmICgh
ZSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVS
dWxlcygpOwotICAgICAgICAgICAgcmV0dXJuIGUtPmlzT3V0T2ZSYW5nZSgpOworICAgICAgICAg
ICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKTsK
KyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5pc091dE9mUmFuZ2UoKTsKICAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvVW5rbm93bjoKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvTm90UGFyc2VkOgogICAgICAgICBkZWZhdWx0OgpAQCAtMTE0MywxOCArMTE2OSwxOCBA
QCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2Vs
LCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9Ci0gICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudCkgewotICAgICAgICBpZiAoIWVsZW1lbnRTdHlsZSAmJiAhbV9pc0NvbGxlY3RpbmdSdWxl
c09ubHkpCisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9F
bGVtZW50KSB7CisgICAgICAgIGlmICghY29udGV4dC5lbGVtZW50U3R5bGUgJiYgIW1faXNDb2xs
ZWN0aW5nUnVsZXNPbmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlm
IChzZWwtPmlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICBpZiAoc2VsZWN0b3It
PmlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSkgewogICAgICAgICAgICAgbV9oYXNVbmtub3duUHNl
dWRvRWxlbWVudHMgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIGUtPnNoYWRvd1BzZXVkb0lk
KCkgPT0gc2VsLT52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPnNoYWRvd1Bz
ZXVkb0lkKCkgPT0gc2VsZWN0b3ItPnZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBQc2V1
ZG9JZCBwc2V1ZG9JZCA9IENTU1NlbGVjdG9yOjpwc2V1ZG9JZChzZWwtPnBzZXVkb1R5cGUoKSk7
CisgICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKHNlbGVj
dG9yLT5wc2V1ZG9UeXBlKCkpOwogICAgICAgICBpZiAocHNldWRvSWQgPT0gRklSU1RfTEVUVEVS
KSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZS0+ZG9jdW1lbnQoKSkK
KyAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgp
KQogICAgICAgICAgICAgICAgIGRvY3VtZW50LT5zZXRVc2VzRmlyc3RMZXR0ZXJSdWxlcyh0cnVl
KTsKICAgICAgICAgfQogICAgICAgICBpZiAocHNldWRvSWQgIT0gTk9QU0VVRE8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKaW5kZXggNDg3Mjg0NzM2NGY2YzU1MDYyZWIyNTY3Yzli
ZGFjZjFkMzgxYjg5Ny4uMDZiNjE5ZDg3ZGM4M2UzYTA0MTM2NGMyMWQwOTFlNWFhNTRmMWU5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtNTEsOCArNTEsMjggQEAgcHVi
bGljOgogCiAgICAgZW51bSBTZWxlY3Rvck1hdGNoIHsgU2VsZWN0b3JNYXRjaGVzLCBTZWxlY3Rv
ckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzLCBTZWxlY3RvckZhaWxzQ29t
cGxldGVseSB9OwogICAgIGVudW0gVmlzaXRlZE1hdGNoVHlwZSB7IFZpc2l0ZWRNYXRjaERpc2Fi
bGVkLCBWaXNpdGVkTWF0Y2hFbmFibGVkIH07CisKKyAgICBzdHJ1Y3QgU2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQgeworICAgICAgICAvLyBJbml0aWFsIHNlbGVjdG9yIGNvbnN0cnVjdG9yCisgICAg
ICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVu
dCogZWxlbWVudCwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHls
ZSogZWxlbWVudFN0eWxlID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSA9IDAp
CisgICAgICAgICAgICA6IHNlbGVjdG9yKHNlbGVjdG9yKQorICAgICAgICAgICAgLCBlbGVtZW50
KGVsZW1lbnQpCisgICAgICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUodmlzaXRlZE1hdGNoVHlw
ZSkKKyAgICAgICAgICAgICwgZWxlbWVudFN0eWxlKGVsZW1lbnRTdHlsZSkKKyAgICAgICAgICAg
ICwgZWxlbWVudFBhcmVudFN0eWxlKGVsZW1lbnRQYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICwg
aXNTdWJTZWxlY3RvcihmYWxzZSkKKyAgICAgICAgeyB9CisKKyAgICAgICAgQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yOworICAgICAgICBFbGVtZW50KiBlbGVtZW50OworICAgICAgICBWaXNpdGVkTWF0
Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGU7CisgICAgICAgIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5
bGU7CisgICAgICAgIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGU7CisgICAgICAgIGJv
b2wgaXNTdWJTZWxlY3RvcjsKKyAgICB9OworCiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1Nl
bGVjdG9yKiwgRWxlbWVudCosIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgPSBmYWxzZSkg
Y29uc3Q7Ci0gICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxl
bWVudCosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIFZpc2l0
ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiA9IDAsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50
U3R5bGUgPSAwKSBjb25zdDsKKyAgICBTZWxlY3Rvck1hdGNoIGNoZWNrU2VsZWN0b3IoY29uc3Qg
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYpIGNvbnN0OwogICAgIHN0YXRpYyBi
b29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKik7CiAgICAgYm9v
bCBmYXN0Q2hlY2tTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqKSBj
b25zdDsKIApAQCAtOTYsNyArMTE2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGRldGVy
bWluZVNlbGVjdG9yU2NvcGVzKGNvbnN0IENTU1NlbGVjdG9yTGlzdCYsIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNz
U2NvcGVzKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0
b3IqLCBFbGVtZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3Rv
ciwgVmlzaXRlZE1hdGNoVHlwZSwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogZWxlbWVudFBh
cmVudFN0eWxlKSBjb25zdDsKKyAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0
b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYpIGNvbnN0OwogICAgIGJvb2wgY2hlY2tTY3Jv
bGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3RvciosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKSBj
b25zdDsKICAgICBzdGF0aWMgYm9vbCBpc0ZyYW1lRm9jdXNlZChjb25zdCBFbGVtZW50Kik7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>