<?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>111252</bug_id>
          
          <creation_ts>2013-03-02 09:36:57 -0800</creation_ts>
          <short_desc>Merge SelectorCheckingContext into SelectorChecker.</short_desc>
          <delta_ts>2014-12-25 22:40:32 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>89879</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>845810</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-03-02 09:36:57 -0800</bug_when>
    <thetext>Merge SelectorCheckingContext into SelectorChecker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845811</commentid>
    <comment_count>1</comment_count>
      <attachid>191108</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-03-02 09:45:39 -0800</bug_when>
    <thetext>Created attachment 191108
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845863</commentid>
    <comment_count>2</comment_count>
      <attachid>191117</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-03-02 13:25:58 -0800</bug_when>
    <thetext>Created attachment 191117
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845876</commentid>
    <comment_count>3</comment_count>
      <attachid>191117</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-02 14:40:38 -0800</bug_when>
    <thetext>Comment on attachment 191117
Patch

Attachment 191117 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/16797731

New failing tests:
editing/selection/selection-invalid-offset.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847911</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-05 12:25:09 -0800</bug_when>
    <thetext>I thought I wrote up comments for this patch, but they must have not sent.

I&apos;m slightly surprised to see this, since SelecorChecker (and many of the style classes) could just be static and operate on context objets.  That appears to be someone&apos;s eariler goal here.

That said, It&apos;s OK for the logic and state to live in a single stack allocated class.  I assume you were the person who did the split before?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847923</commentid>
    <comment_count>5</comment_count>
      <attachid>191117</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-03-05 12:36:16 -0800</bug_when>
    <thetext>Comment on attachment 191117
Patch

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

&gt; Source/WebCore/css/StyleResolver.cpp:2118
&gt; -    SelectorChecker selectorChecker(document(), state.mode());
&gt; -    SelectorChecker::SelectorCheckingContext context(ruleData.selector(), state.element(), SelectorChecker::VisitedMatchEnabled);
&gt; -    context.elementStyle = state.style();
&gt; -    context.scope = scope;
&gt; -    context.pseudoId = state.pseudoStyleRequest().pseudoId;
&gt; -    context.scrollbar = state.pseudoStyleRequest().scrollbar;
&gt; -    context.scrollbarPart = state.pseudoStyleRequest().scrollbarPart;
&gt; -    context.behaviorAtBoundary = behaviorAtBoundary;
&gt; -    SelectorChecker::Match match = selectorChecker.match(context, dynamicPseudo, DOMSiblingTraversalStrategy());
&gt; +    SelectorChecker selectorChecker(ruleData.selector(), state.element(), state.mode(), SelectorChecker::VisitedMatchEnabled, state.style(), scope, state.pseudoStyleRequest().pseudoId, state.pseudoStyleRequest().scrollbar, state.pseudoStyleRequest().scrollbarPart, behaviorAtBoundary);

Wasn&apos;t the point of having a context object to avoid confusing and inflexible argument lists like this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847939</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-03-05 12:45:06 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I thought I wrote up comments for this patch, but they must have not sent.
&gt; 
&gt; I&apos;m slightly surprised to see this, since SelecorChecker (and many of the style classes) could just be static and operate on context objets.  That appears to be someone&apos;s eariler goal here.
&gt; 
&gt; That said, It&apos;s OK for the logic and state to live in a single stack allocated class.  I assume you were the person who did the split before?

Roland did it a while back in bug 77525. Back then, SelectorChecker was a lot more than just an on-stack class. Since then, I whittled it down, and it seems to make little sense to have both of these. The const SelectorCheckerContext&amp; param in front of all of SelectorChecker members even looks like a &quot;this&quot; ptr (if you pretend it&apos;s Python :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847943</commentid>
    <comment_count>7</comment_count>
      <attachid>191117</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-03-05 12:48:18 -0800</bug_when>
    <thetext>Comment on attachment 191117
Patch

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

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:2118
&gt;&gt; +    SelectorChecker selectorChecker(ruleData.selector(), state.element(), state.mode(), SelectorChecker::VisitedMatchEnabled, state.style(), scope, state.pseudoStyleRequest().pseudoId, state.pseudoStyleRequest().scrollbar, state.pseudoStyleRequest().scrollbarPart, behaviorAtBoundary);
&gt; 
&gt; Wasn&apos;t the point of having a context object to avoid confusing and inflexible argument lists like this?

Ideally, SelectorChecker should just take State as a constructor:

SelectorCheckt(ruleData.selector(), SelectorChecker::VisitedMatchEnabled, state);

It&apos;s pretty nice logically -- convey the current resolver state into the selector checker. However, the way they are defined is a bit messy. StyleResolver.h needs SelectorChecker.h to pull in some constants. I was thinking of moving them into a separate header, and then it&apos;ll be pretty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847963</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-03-05 12:58:45 -0800</bug_when>
    <thetext>One other thing that might be useful: I was hoping to study the places where nested SelectorCheckers are created next, and:

1) defining better separation between nesting checkers and nested checkers (like, often the nesting checker messes with the nested checker, and that seems bad)
2) exploring selector checker only doing one thing (checking selectors) and some other class doing the thing of traversing the selector chain.

If you have other cool ideas, let me know. This is my hobby hacking anyway :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847983</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-03-05 13:12:33 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Ideally, SelectorChecker should just take State as a constructor:

You mean StyleResolver::State? That doesn&apos;t seem correct. We don&apos;t want to have two-way dependency between these. SelectorChecker has clients that have nothing to do with StyleResolver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848008</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-03-05 13:34:01 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; Ideally, SelectorChecker should just take State as a constructor:
&gt; 
&gt; You mean StyleResolver::State? That doesn&apos;t seem correct. We don&apos;t want to have two-way dependency between these. SelectorChecker has clients that have nothing to do with StyleResolver.

Right (see the second half of comment 7). StyleResolver doesn&apos;t need to depend on SelectorChecker, so by moving a few enums, I can switch the dependency and have SelectorChecker depend on StyleResolver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057892</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-12-25 22:40:32 -0800</bug_when>
    <thetext>Closing, SelectorCheckingContext is irrelevant now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191108</attachid>
            <date>2013-03-02 09:45:39 -0800</date>
            <delta_ts>2013-03-02 13:25:55 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-111252-20130302094149.patch</filename>
            <type>text/plain</type>
            <size>39039</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzE2MmU4MTgzNmE5NTQ1
ODllNWI1MDUxNDkzZmNmNmQ5MTg0ZWQzMS4uZTA2MzkwMGRmZTljNWU0ZDRlZTQ2YTZkY2QzOGJm
ZTkyZmU2ZGJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEzLTAzLTAyICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTWVyZ2UgU2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQgaW50byBTZWxlY3RvckNoZWNrZXIuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTEyNTIKKworICAgICAgICBOb3cg
dGhhdCBib3RoIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGFuZCBTZWxlY3RvckNoZWNrZXIgYXJl
IHN0YWNrLWFsbG9jYXRlZCwgYW5kIGxvb2tpbmcgYXQgdGhlIGNhbGxzaXRlcywKKyAgICAgICAg
d2Ugc2hvdWxkIGp1c3QgbWVyZ2UgdGhlbS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmluZywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0
cy4KKworICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOiBDaGFuZ2VkIHRvIHVzZSBT
ZWxlY3RvckNoZWNrZXIgaW5zdGVhZCBvZiBTZWxlY3RvckNoZWNraW5nQ29udGV4dCwKKyAgICAg
ICAgICAgIGNvbnZlcnRpbmcgdG8gdXNlIG1lbWJlciB2YXJpYWJsZXMgYW5kIGNyZWF0aW5nIFNl
bGVjdG9yQ2hlY2tlciBmb3IgbmVzdGVkIHNlbGVjdG9yIGNoZWNraW5nLgorICAgICAgICAqIGNz
cy9TZWxlY3RvckNoZWNrZXIuaDogTW92ZWQgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgbWVtYmVy
IGRlY2xzIGludG8gU2VsZWN0b3JDaGVja2VyLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKTogQ2hh
bmdlZCB0byBpbml0aWFsaXplIHVzaW5nIG5ld2x5IGNvbmNvY3RlZCBTZWxlY3RvckNoZWNrZXIg
Y29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lv
blNlbGVjdG9yKTogRGl0dG8uCisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JNYXRjaGVzKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckRhdGFMaXN0OjptYXRjaGVzKTogRGl0dG8uCisg
ICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudFNlbGVjdG9yRGF0YUxpc3Q6OmNoZWNrQ29udGVudFNlbGVjdG9yKTog
RGl0dG8uCisgICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaDoKKwog
MjAxMy0wMi0yNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgU1FM
VHJhbnNhY3Rpb25CYWNrZW5kOjpkb0NsZWFudXAoKSBzaG91bGQgbm90IG51bGxpZnkgaXRzIGN1
cnJlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggZWFmMDNlMzI3
M2QwMTc4OWE2MDA4ZTk5MTMzNmIwMjA0MTZkYTA4Yy4uM2JiMjVjNDU0ZjNhY2MxYWNhMDllZWEw
MjViMzM2N2JjNjBlZTYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAK
QEAgLTYzLDEwICs2MywyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLVNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3VtZW50
KiBkb2N1bWVudCwgTW9kZSBtb2RlKQotICAgIDogbV9zdHJpY3RQYXJzaW5nKCFkb2N1bWVudC0+
aW5RdWlya3NNb2RlKCkpCi0gICAgLCBtX2RvY3VtZW50SXNIVE1MKGRvY3VtZW50LT5pc0hUTUxE
b2N1bWVudCgpKQorU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNrZXIoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBNb2RlIG1vZGUsIFZpc2l0ZWRNYXRj
aFR5cGUgdmlzaXRlZE1hdGNoVHlwZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUsIFBzZXVkb0lkIHBzZXVkb0lkLCBSZW5kZXJTY3JvbGxiYXIq
IHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0LCBCZWhhdmlvckF0Qm91bmRh
cnkgYmVoYXZpb3JBdEJvdW5kYXJ5KQorICAgIDogbV9zdHJpY3RQYXJzaW5nKCFlbGVtZW50LT5k
b2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkKKyAgICAsIG1fZG9jdW1lbnRJc0hUTUwoZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKICAgICAsIG1fbW9kZShtb2RlKQorICAg
ICwgbV9zZWxlY3RvcihzZWxlY3RvcikKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICwg
bV9zY29wZShzY29wZSkKKyAgICAsIG1fdmlzaXRlZE1hdGNoVHlwZSh2aXNpdGVkTWF0Y2hUeXBl
KQorICAgICwgbV9wc2V1ZG9JZChwc2V1ZG9JZCkKKyAgICAsIG1fZWxlbWVudFN0eWxlKGVsZW1l
bnRTdHlsZSkKKyAgICAsIG1fc2Nyb2xsYmFyKHNjcm9sbGJhcikKKyAgICAsIG1fc2Nyb2xsYmFy
UGFydChzY3JvbGxiYXJQYXJ0KQorICAgICwgbV9pc1N1YlNlbGVjdG9yKGZhbHNlKQorICAgICwg
bV9oYXNTY3JvbGxiYXJQc2V1ZG8oZmFsc2UpCisgICAgLCBtX2hhc1NlbGVjdGlvblBzZXVkbyhm
YWxzZSkKKyAgICAsIG1fYmVoYXZpb3JBdEJvdW5kYXJ5KGJlaGF2aW9yQXRCb3VuZGFyeSkKIHsK
IH0KIApAQCAtNzcsMjkgKzg5LDI5IEBAIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2Vy
KERvY3VtZW50KiBkb2N1bWVudCwgTW9kZSBtb2RlKQogLy8gKiBTZWxlY3RvckZhaWxzQWxsU2li
bGluZ3MgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5nIG9mIGUKIC8v
ICogU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFu
ZCBhbnkgc2libGluZyBvciBhbmNlc3RvciBvZiBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTaWJsaW5n
VHJhdmVyc2FsU3RyYXRlZ3k+Ci1TZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tl
cjo6bWF0Y2goY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVkb0lk
JiBkeW5hbWljUHNldWRvLCBjb25zdCBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kmIHNpYmxpbmdU
cmF2ZXJzYWxTdHJhdGVneSkgY29uc3QKK1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggU2VsZWN0b3JD
aGVja2VyOjptYXRjaChQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgY29uc3QgU2libGluZ1RyYXZl
cnNhbFN0cmF0ZWd5JiBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kpIGNvbnN0CiB7CiAgICAgLy8g
Zmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCi0gICAgaWYgKCFjaGVja09uZShjb250ZXh0LCBz
aWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kpKQorICAgIGlmICghY2hlY2tPbmUoc2libGluZ1RyYXZl
cnNhbFN0cmF0ZWd5KSkKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OwogCi0g
ICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0Vs
ZW1lbnQpIHsKLSAgICAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPmlzQ3VzdG9tUHNldWRvRWxl
bWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGNvbnRleHQuZWxl
bWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LmVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gY29udGV4dC5zZWxlY3Rvci0+dmFsdWUo
KSkKKyAgICBpZiAobV9zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudCkgeworICAgICAgICBpZiAobV9zZWxlY3Rvci0+aXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkp
IHsKKyAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gbV9lbGVtZW50LT5jb250YWlu
aW5nU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+c2hhZG93
UHNldWRvSWQoKSAhPSBtX3NlbGVjdG9yLT52YWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC5zZWxlY3Rvci0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9XZWJLaXRDdXN0
b21FbGVtZW50ICYmIHJvb3QtPnR5cGUoKSAhPSBTaGFkb3dSb290OjpVc2VyQWdlbnRTaGFkb3dS
b290KQorICAgICAgICAgICAgICAgIGlmIChtX3NlbGVjdG9yLT5wc2V1ZG9UeXBlKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb1dlYktpdEN1c3RvbUVsZW1lbnQgJiYgcm9vdC0+dHlwZSgpICE9IFNo
YWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRvd1Jvb3QpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBTZWxlY3RvckZhaWxzTG9jYWxseTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGlmICgoIWNvbnRleHQuZWxlbWVudFN0eWxlICYmIG1fbW9kZSA9PSBSZXNvbHZpbmdT
dHlsZSkgfHwgbV9tb2RlID09IFF1ZXJ5aW5nUnVsZXMpCisgICAgICAgICAgICBpZiAoKCFtX2Vs
ZW1lbnRTdHlsZSAmJiBtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHx8IG1fbW9kZSA9PSBRdWVy
eWluZ1J1bGVzKQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsK
IAotICAgICAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQo
Y29udGV4dC5zZWxlY3Rvci0+cHNldWRvVHlwZSgpKTsKKyAgICAgICAgICAgIFBzZXVkb0lkIHBz
ZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKG1fc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSk7
CiAgICAgICAgICAgICBpZiAocHNldWRvSWQgPT0gRklSU1RfTEVUVEVSKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHQuZWxlbWVudC0+ZG9jdW1lbnQo
KSkKKyAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9lbGVtZW50LT5k
b2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC0+c3R5bGVTaGVldENvbGxl
Y3Rpb24oKS0+c2V0VXNlc0ZpcnN0TGV0dGVyUnVsZXModHJ1ZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAocHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgbV9tb2RlICE9IFNoYXJpbmdS
dWxlcykKQEAgLTEwOCw4MiArMTIwLDgyIEBAIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggU2VsZWN0
b3JDaGVja2VyOjptYXRjaChjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29uCiAgICAg
fQogCiAgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIHNlbGVjdG9ycyBoYXMgdG8gbWF0Y2gKLSAgICBD
U1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24gPSBjb250ZXh0LnNlbGVjdG9yLT5yZWxhdGlv
bigpOworICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9IG1fc2VsZWN0b3ItPnJl
bGF0aW9uKCk7CiAKICAgICAvLyBQcmVwYXJlIG5leHQgc2VsZWN0b3IKLSAgICBjb25zdCBDU1NT
ZWxlY3RvciogaGlzdG9yeVNlbGVjdG9yID0gY29udGV4dC5zZWxlY3Rvci0+dGFnSGlzdG9yeSgp
OworICAgIGNvbnN0IENTU1NlbGVjdG9yKiBoaXN0b3J5U2VsZWN0b3IgPSBtX3NlbGVjdG9yLT50
YWdIaXN0b3J5KCk7CiAgICAgaWYgKCFoaXN0b3J5U2VsZWN0b3IpIHsKLSAgICAgICAgaWYgKGNv
bnRleHQuYmVoYXZpb3JBdEJvdW5kYXJ5ID09IENyb3NzZXNCb3VuZGFyeSkgewotICAgICAgICAg
ICAgQVNTRVJUKGNvbnRleHQuc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuc2Nv
cGUtPmNvbnRhaW5zKGNvbnRleHQuZWxlbWVudCkgPyBTZWxlY3Rvck1hdGNoZXMgOiBTZWxlY3Rv
ckZhaWxzTG9jYWxseTsKKyAgICAgICAgaWYgKG1fYmVoYXZpb3JBdEJvdW5kYXJ5ID09IENyb3Nz
ZXNCb3VuZGFyeSkgeworICAgICAgICAgICAgQVNTRVJUKG1fc2NvcGUpOworICAgICAgICAgICAg
cmV0dXJuIG1fc2NvcGUtPmNvbnRhaW5zKG1fZWxlbWVudCkgPyBTZWxlY3Rvck1hdGNoZXMgOiBT
ZWxlY3RvckZhaWxzTG9jYWxseTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gU2VsZWN0b3JN
YXRjaGVzOwogICAgIH0KIAotICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IG5leHRDb250ZXh0
KGNvbnRleHQpOwotICAgIG5leHRDb250ZXh0LnNlbGVjdG9yID0gaGlzdG9yeVNlbGVjdG9yOwor
ICAgIFNlbGVjdG9yQ2hlY2tlciBuZXh0U2VsZWN0b3JDaGVja2VyKCp0aGlzKTsKKyAgICBuZXh0
U2VsZWN0b3JDaGVja2VyLm1fc2VsZWN0b3IgPSBoaXN0b3J5U2VsZWN0b3I7CiAKICAgICBQc2V1
ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAgICAgaWYgKHJlbGF0aW9uICE9
IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikgewogICAgICAgICAvLyBBYm9ydCBpZiB0aGUgbmV4
dCBzZWxlY3RvciB3b3VsZCBleGNlZWQgdGhlIHNjb3BlLgotICAgICAgICBpZiAoY29udGV4dC5l
bGVtZW50ID09IGNvbnRleHQuc2NvcGUpCisgICAgICAgIGlmIChtX2VsZW1lbnQgPT0gbV9zY29w
ZSkKICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKIAotICAgICAg
ICAvLyBCYWlsLW91dCBpZiB0aGlzIHNlbGVjdG9yIGlzIGlycmVsZXZhbnQgZm9yIHRoZSBwc2V1
ZG9JZAotICAgICAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCAhPSBOT1BTRVVETyAmJiBjb250ZXh0
LnBzZXVkb0lkICE9IGR5bmFtaWNQc2V1ZG8pCisgICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMg
c2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhlIHBzZXVkb1N0eWxlCisgICAgICAgIGlmICht
X3BzZXVkb0lkICE9IE5PUFNFVURPICYmIG1fcHNldWRvSWQgIT0gZHluYW1pY1BzZXVkbykKICAg
ICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKIAogICAgICAgICAvLyBE
aXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2Ugc2VlIHRoZSBmaXJzdCBsaW5rIG9yIHRy
eSB0byBtYXRjaCBhbnl0aGluZyBlbHNlIHRoYW4gYW4gYW5jZXN0b3JzLgotICAgICAgICBpZiAo
IWNvbnRleHQuaXNTdWJTZWxlY3RvciAmJiAoY29udGV4dC5lbGVtZW50LT5pc0xpbmsoKSB8fCAo
cmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYgcmVsYXRpb24gIT0gQ1NTU2Vs
ZWN0b3I6OkNoaWxkKSkpCi0gICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBl
ID0gVmlzaXRlZE1hdGNoRGlzYWJsZWQ7CisgICAgICAgIGlmICghbV9pc1N1YlNlbGVjdG9yICYm
IChtX2VsZW1lbnQtPmlzTGluaygpIHx8IChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6RGVzY2Vu
ZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6Q2hpbGQpKSkKKyAgICAgICAgICAgIG5l
eHRTZWxlY3RvckNoZWNrZXIubV92aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRlZE1hdGNoRGlzYWJs
ZWQ7CiAKLSAgICAgICAgbmV4dENvbnRleHQucHNldWRvSWQgPSBOT1BTRVVETzsKKyAgICAgICAg
bmV4dFNlbGVjdG9yQ2hlY2tlci5tX3BzZXVkb0lkID0gTk9QU0VVRE87CiAgICAgfQogCiAgICAg
c3dpdGNoIChyZWxhdGlvbikgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6Ci0g
ICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1l
bnQoKTsKLSAgICAgICAgbmV4dENvbnRleHQuaXNTdWJTZWxlY3RvciA9IGZhbHNlOwotICAgICAg
ICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICBmb3IgKDsgbmV4dENvbnRl
eHQuZWxlbWVudDsgbmV4dENvbnRleHQuZWxlbWVudCA9IG5leHRDb250ZXh0LmVsZW1lbnQtPnBh
cmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSB0aGlzLT5tYXRjaChu
ZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgc2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5
KTsKKyAgICAgICAgbmV4dFNlbGVjdG9yQ2hlY2tlci5tX2VsZW1lbnQgPSBtX2VsZW1lbnQtPnBh
cmVudEVsZW1lbnQoKTsKKyAgICAgICAgbmV4dFNlbGVjdG9yQ2hlY2tlci5tX2lzU3ViU2VsZWN0
b3IgPSBmYWxzZTsKKyAgICAgICAgbmV4dFNlbGVjdG9yQ2hlY2tlci5tX2VsZW1lbnRTdHlsZSA9
IDA7CisgICAgICAgIGZvciAoOyBuZXh0U2VsZWN0b3JDaGVja2VyLm1fZWxlbWVudDsgbmV4dFNl
bGVjdG9yQ2hlY2tlci5tX2VsZW1lbnQgPSBuZXh0U2VsZWN0b3JDaGVja2VyLm1fZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBNYXRjaCBtYXRjaCA9IG5leHRTZWxlY3Rv
ckNoZWNrZXIubWF0Y2goaWdub3JlRHluYW1pY1BzZXVkbywgc2libGluZ1RyYXZlcnNhbFN0cmF0
ZWd5KTsKICAgICAgICAgICAgIGlmIChtYXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2gg
PT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNo
OwotICAgICAgICAgICAgaWYgKG5leHRDb250ZXh0LmVsZW1lbnQgPT0gbmV4dENvbnRleHQuc2Nv
cGUpCisgICAgICAgICAgICBpZiAobmV4dFNlbGVjdG9yQ2hlY2tlci5tX2VsZW1lbnQgPT0gbmV4
dFNlbGVjdG9yQ2hlY2tlci5tX3Njb3BlKQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWls
c0NvbXBsZXRlbHk7CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGlsZDoKLSAgICAgICAgbmV4
dENvbnRleHQuZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAg
ICAgICBpZiAoIW5leHRDb250ZXh0LmVsZW1lbnQpCisgICAgICAgIG5leHRTZWxlY3RvckNoZWNr
ZXIubV9lbGVtZW50ID0gbV9lbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgIGlmICgh
bmV4dFNlbGVjdG9yQ2hlY2tlci5tX2VsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgIG5leHRDb250ZXh0LmlzU3ViU2VsZWN0b3IgPSBm
YWxzZTsKLSAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKLSAgICAgICAgcmV0
dXJuIG1hdGNoKG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBzaWJsaW5nVHJhdmVy
c2FsU3RyYXRlZ3kpOworICAgICAgICBuZXh0U2VsZWN0b3JDaGVja2VyLm1faXNTdWJTZWxlY3Rv
ciA9IGZhbHNlOworICAgICAgICBuZXh0U2VsZWN0b3JDaGVja2VyLm1fZWxlbWVudFN0eWxlID0g
MDsKKyAgICAgICAgcmV0dXJuIG5leHRTZWxlY3RvckNoZWNrZXIubWF0Y2goaWdub3JlRHluYW1p
Y1BzZXVkbywgc2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KTsKIAogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OkRpcmVjdEFkamFjZW50OgogICAgICAgICBpZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxl
KSB7Ci0gICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGNvbnRleHQuZWxl
bWVudC0+cGFyZW50RWxlbWVudCgpKQorICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQgPSBtX2VsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICBwYXJl
bnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzKCk7CiAg
ICAgICAgIH0KLSAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+
cHJldmlvdXNFbGVtZW50U2libGluZygpOwotICAgICAgICBpZiAoIW5leHRDb250ZXh0LmVsZW1l
bnQpCisgICAgICAgIG5leHRTZWxlY3RvckNoZWNrZXIubV9lbGVtZW50ID0gbV9lbGVtZW50LT5w
cmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7CisgICAgICAgIGlmICghbmV4dFNlbGVjdG9yQ2hlY2tl
ci5tX2VsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdz
OwotICAgICAgICBuZXh0Q29udGV4dC5pc1N1YlNlbGVjdG9yID0gZmFsc2U7Ci0gICAgICAgIG5l
eHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7Ci0gICAgICAgIHJldHVybiBtYXRjaChuZXh0Q29u
dGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgc2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KTsKKyAg
ICAgICAgbmV4dFNlbGVjdG9yQ2hlY2tlci5tX2lzU3ViU2VsZWN0b3IgPSBmYWxzZTsKKyAgICAg
ICAgbmV4dFNlbGVjdG9yQ2hlY2tlci5tX2VsZW1lbnRTdHlsZSA9IDA7CisgICAgICAgIHJldHVy
biBuZXh0U2VsZWN0b3JDaGVja2VyLm1hdGNoKGlnbm9yZUR5bmFtaWNQc2V1ZG8sIHNpYmxpbmdU
cmF2ZXJzYWxTdHJhdGVneSk7CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFj
ZW50OgogICAgICAgICBpZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAgICAg
ICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxl
bWVudCgpKQorICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBtX2VsZW1l
bnQtPnBhcmVudEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRD
aGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgIH0KLSAg
ICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cHJldmlvdXNFbGVt
ZW50U2libGluZygpOwotICAgICAgICBuZXh0Q29udGV4dC5pc1N1YlNlbGVjdG9yID0gZmFsc2U7
Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7Ci0gICAgICAgIGZvciAoOyBu
ZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENvbnRleHQuZWxl
bWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgICAgICBNYXRjaCBtYXRj
aCA9IHRoaXMtPm1hdGNoKG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBzaWJsaW5n
VHJhdmVyc2FsU3RyYXRlZ3kpOworICAgICAgICBuZXh0U2VsZWN0b3JDaGVja2VyLm1fZWxlbWVu
dCA9IG1fZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOworICAgICAgICBuZXh0U2Vs
ZWN0b3JDaGVja2VyLm1faXNTdWJTZWxlY3RvciA9IGZhbHNlOworICAgICAgICBuZXh0U2VsZWN0
b3JDaGVja2VyLm1fZWxlbWVudFN0eWxlID0gMDsKKyAgICAgICAgZm9yICg7IG5leHRTZWxlY3Rv
ckNoZWNrZXIubV9lbGVtZW50OyBuZXh0U2VsZWN0b3JDaGVja2VyLm1fZWxlbWVudCA9IG5leHRT
ZWxlY3RvckNoZWNrZXIubV9lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgICAgIE1hdGNoIG1hdGNoID0gbmV4dFNlbGVjdG9yQ2hlY2tlci5tYXRjaChpZ25vcmVE
eW5hbWljUHNldWRvLCBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kpOwogICAgICAgICAgICAgaWYg
KG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQWxsU2li
bGluZ3MgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoOwogICAgICAgICB9OwpAQCAtMTkzLDQwICsyMDUsNDAgQEAgU2VsZWN0
b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoKGNvbnN0IFNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0JiBjb24KICAgICAgICAgLy8gYSBzZWxlY3RvciBpcyBpbnZhbGlkIGlmIHNv
bWV0aGluZyBmb2xsb3dzIGEgcHNldWRvLWVsZW1lbnQKICAgICAgICAgLy8gV2UgbWFrZSBhbiBl
eGNlcHRpb24gZm9yIHNjcm9sbGJhciBwc2V1ZG8gZWxlbWVudHMgYW5kIGFsbG93IGEgc2V0IG9m
IHBzZXVkbyBjbGFzc2VzIChidXQgbm90aGluZyBlbHNlKQogICAgICAgICAvLyB0byBmb2xsb3cg
dGhlIHBzZXVkbyBlbGVtZW50cy4KLSAgICAgICAgbmV4dENvbnRleHQuaGFzU2Nyb2xsYmFyUHNl
dWRvID0gZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiAoY29udGV4dC5zY3JvbGxiYXIgfHwg
ZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVT
SVpFUik7Ci0gICAgICAgIG5leHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbyA9IGR5bmFtaWNQ
c2V1ZG8gPT0gU0VMRUNUSU9OOwotICAgICAgICBpZiAoKGNvbnRleHQuZWxlbWVudFN0eWxlIHx8
IG1fbW9kZSA9PSBDb2xsZWN0aW5nUnVsZXMgfHwgbV9tb2RlID09IFF1ZXJ5aW5nUnVsZXMpICYm
IGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8KLSAgICAgICAgICAgICYmICFuZXh0Q29udGV4dC5o
YXNTZWxlY3Rpb25Qc2V1ZG8KLSAgICAgICAgICAgICYmICEobmV4dENvbnRleHQuaGFzU2Nyb2xs
YmFyUHNldWRvICYmIG5leHRDb250ZXh0LnNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzcykpCisgICAgICAgIG5leHRTZWxlY3RvckNoZWNrZXIubV9oYXNTY3JvbGxi
YXJQc2V1ZG8gPSBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIChtX3Njcm9sbGJhciB8fCBk
eW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwgZHluYW1pY1BzZXVkbyA9PSBSRVNJ
WkVSKTsKKyAgICAgICAgbmV4dFNlbGVjdG9yQ2hlY2tlci5tX2hhc1NlbGVjdGlvblBzZXVkbyA9
IGR5bmFtaWNQc2V1ZG8gPT0gU0VMRUNUSU9OOworICAgICAgICBpZiAoKG1fZWxlbWVudFN0eWxl
IHx8IG1fbW9kZSA9PSBDb2xsZWN0aW5nUnVsZXMgfHwgbV9tb2RlID09IFF1ZXJ5aW5nUnVsZXMp
ICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8KKyAgICAgICAgICAgICYmICFuZXh0U2VsZWN0
b3JDaGVja2VyLm1faGFzU2VsZWN0aW9uUHNldWRvCisgICAgICAgICAgICAmJiAhKG5leHRTZWxl
Y3RvckNoZWNrZXIubV9oYXNTY3JvbGxiYXJQc2V1ZG8gJiYgbmV4dFNlbGVjdG9yQ2hlY2tlci5t
X3NlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCiAgICAgICAg
ICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgIG5leHRDb250ZXh0
LmlzU3ViU2VsZWN0b3IgPSB0cnVlOwotICAgICAgICByZXR1cm4gbWF0Y2gobmV4dENvbnRleHQs
IGR5bmFtaWNQc2V1ZG8sIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSk7CisgICAgICAgIG5leHRT
ZWxlY3RvckNoZWNrZXIubV9pc1N1YlNlbGVjdG9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG5l
eHRTZWxlY3RvckNoZWNrZXIubWF0Y2goZHluYW1pY1BzZXVkbywgc2libGluZ1RyYXZlcnNhbFN0
cmF0ZWd5KTsKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ6CiAgICAg
ICAgIHsKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBzYW1lIHRyZWUtc2NvcGUgYXMg
dGhlIHNjb3BpbmcgZWxlbWVudCwgdGhlbiBmb2xsb3dpbmcgYSBzaGFkb3cgZGVzY2VuZGFudCBj
b21iaW5hdG9yIHdvdWxkIGVzY2FwZSB0aGF0IGFuZCB0aHVzIHRoZSBzY29wZS4KLSAgICAgICAg
ICAgIGlmIChjb250ZXh0LnNjb3BlICYmIGNvbnRleHQuc2NvcGUtPnRyZWVTY29wZSgpID09IGNv
bnRleHQuZWxlbWVudC0+dHJlZVNjb3BlKCkpCisgICAgICAgICAgICBpZiAobV9zY29wZSAmJiBt
X3Njb3BlLT50cmVlU2NvcGUoKSA9PSBtX2VsZW1lbnQtPnRyZWVTY29wZSgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIEVsZW1l
bnQqIHNoYWRvd0hvc3ROb2RlID0gY29udGV4dC5lbGVtZW50LT5zaGFkb3dIb3N0KCk7CisgICAg
ICAgICAgICBFbGVtZW50KiBzaGFkb3dIb3N0Tm9kZSA9IG1fZWxlbWVudC0+c2hhZG93SG9zdCgp
OwogICAgICAgICAgICAgaWYgKCFzaGFkb3dIb3N0Tm9kZSkKICAgICAgICAgICAgICAgICByZXR1
cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVt
ZW50ID0gc2hhZG93SG9zdE5vZGU7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5pc1N1YlNlbGVj
dG9yID0gZmFsc2U7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwot
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoKG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRv
LCBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kpOworICAgICAgICAgICAgbmV4dFNlbGVjdG9yQ2hl
Y2tlci5tX2VsZW1lbnQgPSBzaGFkb3dIb3N0Tm9kZTsKKyAgICAgICAgICAgIG5leHRTZWxlY3Rv
ckNoZWNrZXIubV9pc1N1YlNlbGVjdG9yID0gZmFsc2U7CisgICAgICAgICAgICBuZXh0U2VsZWN0
b3JDaGVja2VyLm1fZWxlbWVudFN0eWxlID0gMDsKKyAgICAgICAgICAgIHJldHVybiBuZXh0U2Vs
ZWN0b3JDaGVja2VyLm1hdGNoKGlnbm9yZUR5bmFtaWNQc2V1ZG8sIHNpYmxpbmdUcmF2ZXJzYWxT
dHJhdGVneSk7CiAgICAgICAgIH0KICNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBjYXNlIENT
U1NlbGVjdG9yOjpTaGFkb3dEaXN0cmlidXRlZDoKICAgICAgICAgewogICAgICAgICAgICAgVmVj
dG9yPEluc2VydGlvblBvaW50KiwgOD4gaW5zZXJ0aW9uUG9pbnRzOwotICAgICAgICAgICAgZm9y
IChFbGVtZW50KiBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50OyBlbGVtZW50OyBlbGVtZW50ID0g
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGVs
ZW1lbnQgPSBtX2VsZW1lbnQ7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCkpIHsKICAgICAgICAgICAgICAgICBpbnNlcnRpb25Qb2ludHMuY2xlYXIoKTsKICAgICAg
ICAgICAgICAgICBjb2xsZWN0SW5zZXJ0aW9uUG9pbnRzV2hlcmVOb2RlSXNEaXN0cmlidXRlZChl
bGVtZW50LCBpbnNlcnRpb25Qb2ludHMpOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaW5zZXJ0aW9uUG9pbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBpbnNlcnRpb25Qb2ludHNbaV07Ci0gICAgICAgICAg
ICAgICAgICAgIG5leHRDb250ZXh0LmlzU3ViU2VsZWN0b3IgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1hdGNoKG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBzaWJsaW5nVHJh
dmVyc2FsU3RyYXRlZ3kpID09IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAgICAgICAgICAg
bmV4dFNlbGVjdG9yQ2hlY2tlci5tX2VsZW1lbnQgPSBpbnNlcnRpb25Qb2ludHNbaV07CisgICAg
ICAgICAgICAgICAgICAgIG5leHRTZWxlY3RvckNoZWNrZXIubV9pc1N1YlNlbGVjdG9yID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIG5leHRTZWxlY3RvckNoZWNrZXIubV9lbGVtZW50U3R5
bGUgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFNlbGVjdG9yQ2hlY2tlci5tYXRj
aChpZ25vcmVEeW5hbWljUHNldWRvLCBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kpID09IFNlbGVj
dG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3Rvck1hdGNo
ZXM7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzE5LDEwICszMzEsMTAg
QEAgc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhFbGVtZW50KiBlbGVtZW50LCBDU1NT
ZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgU2libGlu
Z1RyYXZlcnNhbFN0cmF0ZWd5PgotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0
IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTaWJsaW5nVHJhdmVyc2Fs
U3RyYXRlZ3kmIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSkgY29uc3QKK2Jvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZShjb25zdCBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kmIHNpYmxpbmdU
cmF2ZXJzYWxTdHJhdGVneSkgY29uc3QKIHsKLSAgICBFbGVtZW50KiBjb25zdCAmIGVsZW1lbnQg
PSBjb250ZXh0LmVsZW1lbnQ7Ci0gICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0
b3IgPSBjb250ZXh0LnNlbGVjdG9yOworICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IG1f
ZWxlbWVudDsKKyAgICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IG1fc2Vs
ZWN0b3I7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwogICAgIEFTU0VSVChzZWxlY3Rvcik7CiAKQEAg
LTM1NiwyNCArMzY4LDI0IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgY29uc3QgU2liCiAgICAgICAgICAgICBp
ZiAoIXNlbGVjdG9yTGlzdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7Ci0gICAg
ICAgICAgICBzdWJDb250ZXh0LmlzU3ViU2VsZWN0b3IgPSB0cnVlOwotICAgICAgICAgICAgZm9y
IChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJDb250ZXh0
LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gc3ViQ29udGV4dC5zZWxlY3Rvci0+dGFn
SGlzdG9yeSgpKSB7CisgICAgICAgICAgICBTZWxlY3RvckNoZWNrZXIgc3ViU2VsZWN0b3JDaGVj
a2VyKCp0aGlzKTsKKyAgICAgICAgICAgIHN1YlNlbGVjdG9yQ2hlY2tlci5tX2lzU3ViU2VsZWN0
b3IgPSB0cnVlOworICAgICAgICAgICAgZm9yIChzdWJTZWxlY3RvckNoZWNrZXIubV9zZWxlY3Rv
ciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2VsZWN0b3JDaGVja2VyLm1fc2VsZWN0b3I7
IHN1YlNlbGVjdG9yQ2hlY2tlci5tX3NlbGVjdG9yID0gc3ViU2VsZWN0b3JDaGVja2VyLm1fc2Vs
ZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewogICAgICAgICAgICAgICAgIC8vIDpub3QgY2Fubm90IG5l
c3QuIEkgZG9uJ3QgcmVhbGx5IGtub3cgd2h5IHRoaXMgaXMgYQogICAgICAgICAgICAgICAgIC8v
IHJlc3RyaWN0aW9uIGluIENTUzMsIGJ1dCBpdCBpcywgc28gbGV0J3MgaG9ub3IgaXQuCiAgICAg
ICAgICAgICAgICAgLy8gdGhlIHBhcnNlciBlbmZvcmNlcyB0aGF0IHRoaXMgbmV2ZXIgb2NjdXJz
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb1R5cGUo
KSAhPSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3Vi
U2VsZWN0b3JDaGVja2VyLm1fc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSAhPSBDU1NTZWxlY3Rvcjo6
UHNldWRvTm90KTsKICAgICAgICAgICAgICAgICAvLyBXZSBzZWxlY3QgYmV0d2VlbiA6dmlzaXRl
ZCBhbmQgOmxpbmsgd2hlbiBhcHBseWluZy4gV2UgZG9uJ3Qga25vdyB3aGljaCBvbmUgYXBwbGll
ZCAob3Igbm90KSB5ZXQuCi0gICAgICAgICAgICAgICAgaWYgKHN1YkNvbnRleHQuc2VsZWN0b3It
PnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCB8fCAoc3ViQ29udGV4
dC5zZWxlY3Rvci0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rICYmIHN1
YkNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkKSkKKyAgICAg
ICAgICAgICAgICBpZiAoc3ViU2VsZWN0b3JDaGVja2VyLm1fc2VsZWN0b3ItPnBzZXVkb1R5cGUo
KSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCB8fCAoc3ViU2VsZWN0b3JDaGVja2VyLm1f
c2VsZWN0b3ItPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluayAmJiBzdWJT
ZWxlY3RvckNoZWNrZXIubV92aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAo
IWNoZWNrT25lKHN1YkNvbnRleHQsIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKSkKKyAg
ICAgICAgICAgICAgICBpZiAoIXN1YlNlbGVjdG9yQ2hlY2tlci5jaGVja09uZShET01TaWJsaW5n
VHJhdmVyc2FsU3RyYXRlZ3koKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQuaGFzU2Nyb2xsYmFyUHNl
dWRvKSB7CisgICAgICAgIH0gZWxzZSBpZiAobV9oYXNTY3JvbGxiYXJQc2V1ZG8pIHsKICAgICAg
ICAgICAgIC8vIENTUyBzY3JvbGxiYXJzIG1hdGNoIGEgc3BlY2lmaWMgc3Vic2V0IG9mIHBzZXVk
byBjbGFzc2VzLCBhbmQgdGhleSBoYXZlIHNwZWNpYWxpemVkIHJ1bGVzIGZvciBlYWNoCiAgICAg
ICAgICAgICAvLyAoc2luY2UgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIGludm9sdmVkKS4KLSAgICAg
ICAgICAgIHJldHVybiBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKGNvbnRleHQsIGVsZW1lbnQt
PmRvY3VtZW50KCksIHNlbGVjdG9yKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lmhhc1Nl
bGVjdGlvblBzZXVkbykgeworICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2Nyb2xsYmFyUHNldWRv
Q2xhc3MoZWxlbWVudC0+ZG9jdW1lbnQoKSwgc2VsZWN0b3IpOworICAgICAgICB9IGVsc2UgaWYg
KG1faGFzU2VsZWN0aW9uUHNldWRvKSB7CiAgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPnBzZXVk
b1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuICFlbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCktPmZvY3VzQ29udHJvbGxl
cigpLT5pc0FjdGl2ZSgpOwogICAgICAgICB9CkBAIC00MDEsOCArNDEzLDggQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBTaWIKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKG1f
bW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5z
ZXRTdHlsZUFmZmVjdGVkQnlFbXB0eSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC5lbGVtZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRT
dHlsZS0+c2V0RW1wdHlTdGF0ZShyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9l
bGVtZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2VsZW1lbnRTdHlsZS0+c2V0
RW1wdHlTdGF0ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50
LT5yZW5kZXJTdHlsZSgpICYmIChlbGVtZW50LT5kb2N1bWVudCgpLT5zdHlsZVNoZWV0Q29sbGVj
dGlvbigpLT51c2VzU2libGluZ1J1bGVzKCkgfHwgZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+dW5p
cXVlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+
c2V0RW1wdHlTdGF0ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIH0KQEAgLTQxMyw3ICs0MjUs
NyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFNpYgogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBh
cmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAg
ICBib29sIHJlc3VsdCA9IHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneS5pc0ZpcnN0Q2hpbGQoZWxl
bWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewot
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxl
bWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgp
OworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IG1fZWxlbWVu
dFN0eWxlID8gbV9lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENo
aWxkUnVsZXMoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBjaGlsZFN0eWxl
KQogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRl
KCk7CkBAIC00MzUsNyArNDQ3LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNv
bnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTaWIKICAgICAgICAg
ICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgp
KSB7CiAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBwYXJlbnRFbGVtZW50LT5pc0Zpbmlz
aGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgc2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5LmlzTGFzdENo
aWxkKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5
bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjb250
ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBt
X2VsZW1lbnRTdHlsZSA/IG1fZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsK
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5
TGFzdENoaWxkUnVsZXMoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBjaGls
ZFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0TGFzdENoaWxk
U3RhdGUoKTsKQEAgLTQ1OCw3ICs0NzAsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFNpYgogICAg
ICAgICAgICAgICAgIGJvb2wgZmlyc3RDaGlsZCA9IHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneS5p
c0ZpcnN0Q2hpbGQoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgYm9vbCBvbmx5Q2hpbGQgPSBm
aXJzdENoaWxkICYmIHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAm
JiBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kuaXNMYXN0Q2hpbGQoZWxlbWVudCk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29u
dGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IG1fZWxlbWVudFN0eWxlID8gbV9lbGVt
ZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBw
YXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKTsKICAg
ICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5TGFz
dENoaWxkUnVsZXMoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgY2hp
bGRTdHlsZSkKQEAgLTQ4Nyw3ICs0OTksNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFNpYgogICAg
ICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCkpIHsKICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgc2libGluZ1RyYXZlcnNh
bFN0cmF0ZWd5LmNvdW50RWxlbWVudHNCZWZvcmUoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAg
aWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVt
ZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IG1fZWxlbWVudFN0eWxlID8gbV9lbGVtZW50U3R5bGUg
OiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5z
ZXRDaGlsZEluZGV4KGNvdW50KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkU3R5bGUp
CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFN0eWxlLT5zZXRVbmlxdWUoKTsKQEAgLTU0
MywxMSArNTU1LDExIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxl
Y3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgY29uc3QgU2liCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55OgogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4
dCk7Ci0gICAgICAgICAgICAgICAgc3ViQ29udGV4dC5pc1N1YlNlbGVjdG9yID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBTZWxlY3RvckNoZWNrZXIgc3ViU2VsZWN0b3JDaGVja2VyKCp0aGlzKTsK
KyAgICAgICAgICAgICAgICBzdWJTZWxlY3RvckNoZWNrZXIubV9pc1N1YlNlbGVjdG9yID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VV
RE87Ci0gICAgICAgICAgICAgICAgZm9yIChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3It
PnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0
LnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YkNvbnRleHQuc2VsZWN0b3IpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaChzdWJDb250ZXh0LCBpZ25vcmVEeW5hbWlj
UHNldWRvLCBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kpID09IFNlbGVjdG9yTWF0Y2hlcykKKyAg
ICAgICAgICAgICAgICBmb3IgKHN1YlNlbGVjdG9yQ2hlY2tlci5tX3NlbGVjdG9yID0gc2VsZWN0
b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJTZWxlY3RvckNoZWNrZXIubV9zZWxlY3Rv
cjsgc3ViU2VsZWN0b3JDaGVja2VyLm1fc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQo
c3ViU2VsZWN0b3JDaGVja2VyLm1fc2VsZWN0b3IpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChzdWJTZWxlY3RvckNoZWNrZXIubWF0Y2goaWdub3JlRHluYW1pY1BzZXVkbywgc2libGluZ1Ry
YXZlcnNhbFN0cmF0ZWd5KSA9PSBTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01
NjQsMTEgKzU3NiwxMSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFNpYgogICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnQtPmlzTGluaygpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9W
aXNpdGVkOgogICAgICAgICAgICAgLy8gLi4uZXhjZXB0IGlmIDp2aXNpdGVkIG1hdGNoaW5nIGlz
IGRpc2FibGVkIGZvciBhbmNlc3Rvci9zaWJsaW5nIG1hdGNoaW5nLgotICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnQtPmlzTGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNp
dGVkTWF0Y2hFbmFibGVkOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzTGluaygpICYm
IG1fdmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkOwogICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9EcmFnOgogICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZXNv
bHZpbmdTdHlsZSkgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRTdHlsZSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlE
cmFnKCk7CisgICAgICAgICAgICAgICAgaWYgKG1fZWxlbWVudFN0eWxlKQorICAgICAgICAgICAg
ICAgICAgICBtX2VsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeURyYWcoKTsKICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0
ZWRCeURyYWcodHJ1ZSk7CiAgICAgICAgICAgICB9CkBAIC01ODAsMTAgKzU5MiwxMCBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFNpYgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3Zl
cjoKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGluIHF1aXJrcyBtb2RlLCB0aGVuIGhvdmVyIHNo
b3VsZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGggbm8KICAgICAgICAgICAgIC8vIGhyZWYgYW5k
ICo6aG92ZXIgc2hvdWxkIG5vdCBtYXRjaCBhbnl0aGluZy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9y
IHNpdGVzIGxpa2Ugd3NqLmNvbS4KLSAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwg
Y29udGV4dC5pc1N1YlNlbGVjdG9yIHx8IChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6VGFnICYmIHNlbGVjdG9yLT50YWdRTmFtZSgpICE9IGFueVFOYW1lKCkgJiYgIWVsZW1lbnQt
Pmhhc1RhZ05hbWUoYVRhZykpIHx8IGVsZW1lbnQtPmlzTGluaygpKSB7CisgICAgICAgICAgICBp
ZiAobV9zdHJpY3RQYXJzaW5nIHx8IG1faXNTdWJTZWxlY3RvciB8fCAoc2VsZWN0b3ItPm1fbWF0
Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiBzZWxlY3Rvci0+dGFnUU5hbWUoKSAhPSBhbnlRTmFt
ZSgpICYmICFlbGVtZW50LT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBlbGVtZW50LT5pc0xpbmsoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlIb3ZlcigpOworICAg
ICAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50U3R5bGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2VsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVyKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldENoaWxkcmVu
QWZmZWN0ZWRCeUhvdmVyKHRydWUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTU5NCwxMCArNjA2
LDEwIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNr
aW5nQ29udGV4dCYgY29udGV4dCwgY29uc3QgU2liCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0FjdGl2ZToKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGluIHF1aXJrcyBtb2RlLCB0
aGVuIDphY3RpdmUgc2hvdWxkIG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0aCBubwogICAgICAgICAg
ICAgLy8gaHJlZiBhbmQgKjphY3RpdmUgc2hvdWxkIG5vdCBtYXRjaCBhbnl0aGluZy4KLSAgICAg
ICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwgY29udGV4dC5pc1N1YlNlbGVjdG9yIHx8IChz
ZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnICYmIHNlbGVjdG9yLT50YWdRTmFt
ZSgpICE9IGFueVFOYW1lKCkgJiYgIWVsZW1lbnQtPmhhc1RhZ05hbWUoYVRhZykpIHx8IGVsZW1l
bnQtPmlzTGluaygpKSB7CisgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IG1faXNT
dWJTZWxlY3RvciB8fCAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiBz
ZWxlY3Rvci0+dGFnUU5hbWUoKSAhPSBhbnlRTmFtZSgpICYmICFlbGVtZW50LT5oYXNUYWdOYW1l
KGFUYWcpKSB8fCBlbGVtZW50LT5pc0xpbmsoKSkgewogICAgICAgICAgICAgICAgIGlmIChtX21v
ZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQu
ZWxlbWVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5
bGUtPnNldEFmZmVjdGVkQnlBY3RpdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZWxl
bWVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9lbGVtZW50U3R5bGUtPnNldEFm
ZmVjdGVkQnlBY3RpdmUoKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QWN0aXZlKHRydWUpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTc1NiwxMyArNzY4LDEzIEBAIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgY29u
c3QgU2liCiAgICAgfQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBlbHNlIGlmIChzZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCAmJiBzZWxlY3Rvci0+
cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DdWUpIHsKLSAgICAgICAgU2VsZWN0
b3JDaGVja2luZ0NvbnRleHQgc3ViQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAgc3ViQ29udGV4
dC5pc1N1YlNlbGVjdG9yID0gdHJ1ZTsKKyAgICAgICAgU2VsZWN0b3JDaGVja2VyIHN1YlNlbGVj
dG9yQ2hlY2tlcigqdGhpcyk7CisgICAgICAgIHN1YlNlbGVjdG9yQ2hlY2tlci5tX2lzU3ViU2Vs
ZWN0b3IgPSB0cnVlOwogCiAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBO
T1BTRVVETzsKLSAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBj
b250ZXh0LnNlbGVjdG9yOwotICAgICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxl
Y3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNv
bnRleHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxlY3Rv
cikpIHsKLSAgICAgICAgICAgIGlmIChtYXRjaChzdWJDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNl
dWRvLCBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kpID09IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAg
ICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBtX3NlbGVjdG9yOworICAg
ICAgICBmb3IgKHN1YlNlbGVjdG9yQ2hlY2tlci5tX3NlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVj
dG9yTGlzdCgpLT5maXJzdCgpOyBzdWJTZWxlY3RvckNoZWNrZXIubV9zZWxlY3Rvcjsgc3ViU2Vs
ZWN0b3JDaGVja2VyLm1fc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViU2VsZWN0
b3JDaGVja2VyLm1fc2VsZWN0b3IpKSB7CisgICAgICAgICAgICBpZiAoc3ViU2VsZWN0b3JDaGVj
a2VyLm1hdGNoKGlnbm9yZUR5bmFtaWNQc2V1ZG8sIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSkg
PT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc3MiwxMCArNzg0LDEwIEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgU2liCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0JiBjb250ZXh0LCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvcikgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0Ns
YXNzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKSBjb25z
dAogewotICAgIFJlbmRlclNjcm9sbGJhciogc2Nyb2xsYmFyID0gY29udGV4dC5zY3JvbGxiYXI7
Ci0gICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gY29udGV4dC5zY3JvbGxiYXJQYXJ0OworICAgIFJl
bmRlclNjcm9sbGJhciogc2Nyb2xsYmFyID0gbV9zY3JvbGxiYXI7CisgICAgU2Nyb2xsYmFyUGFy
dCBwYXJ0ID0gbV9zY3JvbGxiYXJQYXJ0OwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1w
b3JhcnkgaGFjayBmb3IgcmVzaXplcnMgYW5kIHNjcm9sbGJhciBjb3JuZXJzLiBFdmVudHVhbGx5
IDp3aW5kb3ctaW5hY3RpdmUgc2hvdWxkIGJlY29tZSBhIHJlYWwKICAgICAvLyBwc2V1ZG8gY2xh
c3MgYW5kIGp1c3QgYXBwbHkgdG8gZXZlcnl0aGluZy4KQEAgLTkxMSw5ICs5MjMsOSBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCog
ZWxlbWVudCkKIH0KIAogdGVtcGxhdGUKLVNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggU2VsZWN0b3JD
aGVja2VyOjptYXRjaChjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIFBzZXVkb0lkJiwg
Y29uc3QgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5JikgY29uc3Q7CitTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goUHNldWRvSWQmLCBjb25zdCBET01TaWJs
aW5nVHJhdmVyc2FsU3RyYXRlZ3kmKSBjb25zdDsKIAogdGVtcGxhdGUKLVNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2ggU2VsZWN0b3JDaGVja2VyOjptYXRjaChjb25zdCBTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCYsIFBzZXVkb0lkJiwgY29uc3QgU2hhZG93RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5
JikgY29uc3Q7CitTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2go
UHNldWRvSWQmLCBjb25zdCBTaGFkb3dET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kmKSBjb25z
dDsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IDJmNDJiNjdkMGY1
MmVhNjMwZmVkMjViZjEwOTUyMGU0ZDY5ZmE4OGMuLjAxNDQ2YWIwODgyYjAzNTkwNDdjZGVhZTFj
MzU3MzkxNzAyNDQ0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTQy
LDQ5ICs0MiwxOCBAQCBjbGFzcyBSZW5kZXJTY3JvbGxiYXI7CiBjbGFzcyBSZW5kZXJTdHlsZTsK
IAogY2xhc3MgU2VsZWN0b3JDaGVja2VyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZWxl
Y3RvckNoZWNrZXIpOwogcHVibGljOgogICAgIGVudW0gTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMs
IFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MsIFNlbGVjdG9y
RmFpbHNDb21wbGV0ZWx5IH07CiAgICAgZW51bSBWaXNpdGVkTWF0Y2hUeXBlIHsgVmlzaXRlZE1h
dGNoRGlzYWJsZWQsIFZpc2l0ZWRNYXRjaEVuYWJsZWQgfTsKICAgICBlbnVtIE1vZGUgeyBSZXNv
bHZpbmdTdHlsZSA9IDAsIENvbGxlY3RpbmdSdWxlcywgUXVlcnlpbmdSdWxlcywgU2hhcmluZ1J1
bGVzIH07Ci0gICAgZXhwbGljaXQgU2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiwgTW9kZSk7CiAg
ICAgZW51bSBCZWhhdmlvckF0Qm91bmRhcnkgeyBEb2VzTm90Q3Jvc3NCb3VuZGFyeSwgQ3Jvc3Nl
c0JvdW5kYXJ5IH07CiAKLSAgICBzdHJ1Y3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgewotICAg
ICAgICAvLyBJbml0aWFsIHNlbGVjdG9yIGNvbnN0cnVjdG9yCi0gICAgICAgIFNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0KGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVu
dCwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKQotICAgICAgICAgICAgOiBzZWxl
Y3RvcihzZWxlY3RvcikKLSAgICAgICAgICAgICwgZWxlbWVudChlbGVtZW50KQotICAgICAgICAg
ICAgLCBzY29wZSgwKQotICAgICAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHZpc2l0ZWRNYXRj
aFR5cGUpCi0gICAgICAgICAgICAsIHBzZXVkb0lkKE5PUFNFVURPKQotICAgICAgICAgICAgLCBl
bGVtZW50U3R5bGUoMCkKLSAgICAgICAgICAgICwgc2Nyb2xsYmFyKDApCi0gICAgICAgICAgICAs
IHNjcm9sbGJhclBhcnQoTm9QYXJ0KQotICAgICAgICAgICAgLCBpc1N1YlNlbGVjdG9yKGZhbHNl
KQotICAgICAgICAgICAgLCBoYXNTY3JvbGxiYXJQc2V1ZG8oZmFsc2UpCi0gICAgICAgICAgICAs
IGhhc1NlbGVjdGlvblBzZXVkbyhmYWxzZSkKLSAgICAgICAgICAgICwgYmVoYXZpb3JBdEJvdW5k
YXJ5KERvZXNOb3RDcm9zc0JvdW5kYXJ5KQotICAgICAgICB7IH0KLQotICAgICAgICBjb25zdCBD
U1NTZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7Ci0gICAgICAg
IGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlOwotICAgICAgICBWaXNpdGVkTWF0Y2hUeXBlIHZp
c2l0ZWRNYXRjaFR5cGU7Ci0gICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkOwotICAgICAgICBSZW5k
ZXJTdHlsZSogZWxlbWVudFN0eWxlOwotICAgICAgICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9sbGJh
cjsKLSAgICAgICAgU2Nyb2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0OwotICAgICAgICBib29sIGlz
U3ViU2VsZWN0b3I7Ci0gICAgICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOwotICAgICAgICBi
b29sIGhhc1NlbGVjdGlvblBzZXVkbzsKLSAgICAgICAgQmVoYXZpb3JBdEJvdW5kYXJ5IGJlaGF2
aW9yQXRCb3VuZGFyeTsKLSAgICB9OworICAgIFNlbGVjdG9yQ2hlY2tlcihjb25zdCBDU1NTZWxl
Y3RvciosIEVsZW1lbnQqLCBNb2RlLCBWaXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRlZE1hdGNoRGlz
YWJsZWQsIFJlbmRlclN0eWxlKiA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCwgUHNldWRv
SWQgPSBOT1BTRVVETywgUmVuZGVyU2Nyb2xsYmFyKiA9IDAsIFNjcm9sbGJhclBhcnQgPSBOb1Bh
cnQsIEJlaGF2aW9yQXRCb3VuZGFyeSA9IERvZXNOb3RDcm9zc0JvdW5kYXJ5KTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneT4KLSAgICBNYXRjaCBtYXRj
aChjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIFBzZXVkb0lkJiwgY29uc3QgU2libGlu
Z1RyYXZlcnNhbFN0cmF0ZWd5JikgY29uc3Q7CisgICAgTWF0Y2ggbWF0Y2goUHNldWRvSWQmLCBj
b25zdCBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kmKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k+Ci0gICAgYm9vbCBjaGVja09uZShjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIGNvbnN0IFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSYp
IGNvbnN0OworICAgIGJvb2wgY2hlY2tPbmUoY29uc3QgU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5
JikgY29uc3Q7CiAKICAgICBib29sIHN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0
cmljdFBhcnNpbmc7IH0KIApAQCAtOTksMTMgKzY4LDI2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dW5zaWduZWQgZGV0ZXJtaW5lTGlua01hdGNoVHlwZShjb25zdCBDU1NTZWxlY3RvciopOwogCiBw
cml2YXRlOgotICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhjb25zdCBTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCYsIERvY3VtZW50KiwgY29uc3QgQ1NTU2VsZWN0b3IqKSBjb25zdDsK
KyAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoRG9jdW1lbnQqLCBjb25zdCBDU1NT
ZWxlY3RvciopIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgaXNGcmFtZUZvY3VzZWQoY29uc3Qg
RWxlbWVudCopOwogCiAgICAgYm9vbCBtX3N0cmljdFBhcnNpbmc7CiAgICAgYm9vbCBtX2RvY3Vt
ZW50SXNIVE1MOwogICAgIE1vZGUgbV9tb2RlOworCisgICAgY29uc3QgQ1NTU2VsZWN0b3IqIG1f
c2VsZWN0b3I7CisgICAgRWxlbWVudCogbV9lbGVtZW50OworICAgIGNvbnN0IENvbnRhaW5lck5v
ZGUqIG1fc2NvcGU7CisgICAgVmlzaXRlZE1hdGNoVHlwZSBtX3Zpc2l0ZWRNYXRjaFR5cGU7Cisg
ICAgUHNldWRvSWQgbV9wc2V1ZG9JZDsKKyAgICBSZW5kZXJTdHlsZSogbV9lbGVtZW50U3R5bGU7
CisgICAgUmVuZGVyU2Nyb2xsYmFyKiBtX3Njcm9sbGJhcjsKKyAgICBTY3JvbGxiYXJQYXJ0IG1f
c2Nyb2xsYmFyUGFydDsKKyAgICBib29sIG1faXNTdWJTZWxlY3RvcjsKKyAgICBib29sIG1faGFz
U2Nyb2xsYmFyUHNldWRvOworICAgIGJvb2wgbV9oYXNTZWxlY3Rpb25Qc2V1ZG87CisgICAgQmVo
YXZpb3JBdEJvdW5kYXJ5IG1fYmVoYXZpb3JBdEJvdW5kYXJ5OwogfTsKIAogaW5saW5lIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDZl
NzM5YTM4NTk4OWY0N2NhZmFmYTg4ODM3Njc3NjRmZjdjOWJkMmUuLjc5MGM3ZGEwNGIzMTVkYzFi
YTYyYjVkMzVkODQ2NDVhZGVlNmNiNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAKQEAgLTIxMTUsMTUgKzIxMTUsOCBAQCBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxl
TWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lcgogICAgIH0K
IAogICAgIC8vIFNsb3cgcGF0aC4KLSAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2Vy
KGRvY3VtZW50KCksIHN0YXRlLm1vZGUoKSk7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1l
bnQoKSwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKLSAgICBjb250ZXh0
LmVsZW1lbnRTdHlsZSA9IHN0YXRlLnN0eWxlKCk7Ci0gICAgY29udGV4dC5zY29wZSA9IHNjb3Bl
OwotICAgIGNvbnRleHQucHNldWRvSWQgPSBzdGF0ZS5wc2V1ZG9TdHlsZVJlcXVlc3QoKS5wc2V1
ZG9JZDsKLSAgICBjb250ZXh0LnNjcm9sbGJhciA9IHN0YXRlLnBzZXVkb1N0eWxlUmVxdWVzdCgp
LnNjcm9sbGJhcjsKLSAgICBjb250ZXh0LnNjcm9sbGJhclBhcnQgPSBzdGF0ZS5wc2V1ZG9TdHls
ZVJlcXVlc3QoKS5zY3JvbGxiYXJQYXJ0OwotICAgIGNvbnRleHQuYmVoYXZpb3JBdEJvdW5kYXJ5
ID0gYmVoYXZpb3JBdEJvdW5kYXJ5OwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggbWF0Y2gg
PSBzZWxlY3RvckNoZWNrZXIubWF0Y2goY29udGV4dCwgZHluYW1pY1BzZXVkbywgRE9NU2libGlu
Z1RyYXZlcnNhbFN0cmF0ZWd5KCkpOworICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNr
ZXIocnVsZURhdGEuc2VsZWN0b3IoKSwgc3RhdGUuZWxlbWVudCgpLCBTZWxlY3RvckNoZWNrZXI6
OlJlc29sdmluZ1N0eWxlLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQsIHN0
YXRlLnN0eWxlKCksIHNjb3BlLCBzdGF0ZS5wc2V1ZG9TdHlsZVJlcXVlc3QoKS5wc2V1ZG9JZCwg
c3RhdGUucHNldWRvU3R5bGVSZXF1ZXN0KCkuc2Nyb2xsYmFyLCBzdGF0ZS5wc2V1ZG9TdHlsZVJl
cXVlc3QoKS5zY3JvbGxiYXJQYXJ0LCBiZWhhdmlvckF0Qm91bmRhcnkpOworICAgIFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2ggbWF0Y2ggPSBzZWxlY3RvckNoZWNrZXIubWF0Y2goZHluYW1pY1BzZXVk
bywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpOwogICAgIGlmIChtYXRjaCAhPSBTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmIChzdGF0ZS5wc2V1ZG9TdHlsZVJlcXVlc3QoKS5wc2V1ZG9JZCAhPSBOT1BTRVVETyAmJiBz
dGF0ZS5wc2V1ZG9TdHlsZVJlcXVlc3QoKS5wc2V1ZG9JZCAhPSBkeW5hbWljUHNldWRvKQpAQCAt
MjEzNiwxMSArMjEyOSwxMCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0
b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZQogICAgIGlmICghcmVn
aW9uU2VsZWN0b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQoKSwgbV9zdGF0ZS5t
b2RlKCkpOwogICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHMgPSByZWdpb25TZWxlY3Rvcjsg
czsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkgewotICAgICAgICBTZWxlY3RvckNoZWNr
ZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHMsIHJl
Z2lvbkVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpOworICAg
ICAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKHMsIHJlZ2lvbkVsZW1lbnQsIG1f
c3RhdGUubW9kZSgpKTsKICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5P
UFNFVURPOwotICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyLm1hdGNoKHNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRl
Z3koKSkgPT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgIGlmIChz
ZWxlY3RvckNoZWNrZXIubWF0Y2goaWdub3JlRHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZl
cnNhbFN0cmF0ZWd5KCkpID09IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVy
eS5jcHAKaW5kZXggMmQ5MGY4ZDZmODY4ZGIxNzgxN2RiMDkyOGZhMjlhNjhlNzBmNGJjNy4uYTNk
M2Y2MDZlNGMzYjVmNGExZDM1YmIwOTlhNmE5YWU2NjYzYjk2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
ZWxlY3RvclF1ZXJ5LmNwcApAQCAtNTksMTkgKzU5LDE4IEBAIGlubGluZSBib29sIFNlbGVjdG9y
RGF0YUxpc3Q6OnNlbGVjdG9yTWF0Y2hlcyhjb25zdCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0
YSwKICAgICAgICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLm1hdGNoZXMoKTsKICAg
ICB9CiAKLSAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGVsZW1lbnQtPmRvY3Vt
ZW50KCksIFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotICAgIFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQoc2Vs
ZWN0b3JEYXRhLnNlbGVjdG9yLCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRj
aERpc2FibGVkKTsKKyAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKHNlbGVjdG9y
RGF0YS5zZWxlY3RvciwgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpRdWVyeWluZ1J1bGVzKTsK
ICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgcmV0dXJu
IHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3RvckNoZWNraW5nQ29udGV4dCwgaWdub3JlRHlu
YW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpID09IFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JNYXRjaGVzOworICAgIHJldHVybiBzZWxlY3RvckNoZWNrZXIubWF0Y2go
aWdub3JlRHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpID09IFNl
bGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzOwogfQogCi1ib29sIFNlbGVjdG9yRGF0YUxp
c3Q6Om1hdGNoZXMoRWxlbWVudCogdGFyZ2V0RWxlbWVudCkgY29uc3QKK2Jvb2wgU2VsZWN0b3JE
YXRhTGlzdDo6bWF0Y2hlcyhFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewotICAgIEFTU0VSVCh0
YXJnZXRFbGVtZW50KTsKKyAgICBBU1NFUlQoZWxlbWVudCk7CiAKICAgICB1bnNpZ25lZCBzZWxl
Y3RvckNvdW50ID0gbV9zZWxlY3RvcnMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzZWxlY3RvckNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yTWF0Y2hlcyht
X3NlbGVjdG9yc1tpXSwgdGFyZ2V0RWxlbWVudCkpCisgICAgICAgIGlmIChzZWxlY3Rvck1hdGNo
ZXMobV9zZWxlY3RvcnNbaV0sIGVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2Vs
ZWN0b3JRdWVyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0
b3JRdWVyeS5jcHAKaW5kZXggMmI3MWIwOTA4MTA5Y2ExZmQyMzZhODczMmVjNTM3NWIwNDlhNzBm
Ni4uN2JkYTFmNjJhYmIzMmM4N2ZiMzlhMzZhNzg0NjhjMGIxNjMzNWI2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcApAQCAt
MzgsMTEgKzM4LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGJvb2wgQ29udGVudFNlbGVjdG9y
RGF0YUxpc3Q6OmNoZWNrQ29udGVudFNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3Rv
ciwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aCkKIHsKICAg
ICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KHNpYmxpbmdzW250aF0uZ2V0KCkpOwotICAg
IFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC0+ZG9jdW1lbnQoKSwgU2Vs
ZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChzZWxlY3RvciwgZWxlbWVudCwgU2VsZWN0b3JD
aGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKKyAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0
b3JDaGVja2VyKHNlbGVjdG9yLCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdS
dWxlcywgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKICAgICBTaGFkb3dE
T01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kgc3RyYXRlZ3koc2libGluZ3MsIG50aCk7CiAgICAg
UHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgIHJldHVybiBzZWxl
Y3RvckNoZWNrZXIubWF0Y2goY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgc3RyYXRlZ3kp
ID09IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzOworICAgIHJldHVybiBzZWxlY3Rv
ckNoZWNrZXIubWF0Y2goaWdub3JlRHluYW1pY1BzZXVkbywgc3RyYXRlZ3kpID09IFNlbGVjdG9y
Q2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzOwogfQogCiB2b2lkIENvbnRlbnRTZWxlY3RvckRhdGFM
aXN0Ojppbml0aWFsaXplKGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmgKaW5kZXgg
YmNlZTliZGQxNWZmN2FmYWE4ZTQ1NTZjNDU3ODIxMzVjZjVhNzkyZS4uNWIzNTUyZDVmNGYzMTg1
OTMyOWI5YTkwNWQ4NTczNmU4N2I1MTJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oCkBAIC0zMiw3ICszMiw2IEBACiAjZGVmaW5l
IENvbnRlbnRTZWxlY3RvclF1ZXJ5X2gKIAogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgot
I2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yUXVlcnkuaCIK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191117</attachid>
            <date>2013-03-02 13:25:58 -0800</date>
            <delta_ts>2013-04-08 16:45:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111252-20130302132208.patch</filename>
            <type>text/plain</type>
            <size>39017</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQzMGIzMTRmZDhjMjI5
MDc3YjQyMzIzYzkzYzVkN2E2NjE1NjBjNC4uMGIyYWZjY2U2N2VlYTAwODI0MzRhMTA5OWVhYTkz
MWFkMmY3NmMyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEzLTAzLTAyICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTWVyZ2UgU2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQgaW50byBTZWxlY3RvckNoZWNrZXIuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTEyNTIKKworICAgICAgICBOb3cg
dGhhdCBib3RoIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGFuZCBTZWxlY3RvckNoZWNrZXIgYXJl
IHN0YWNrLWFsbG9jYXRlZCwgYW5kIGxvb2tpbmcgYXQgdGhlIGNhbGxzaXRlcywKKyAgICAgICAg
d2Ugc2hvdWxkIGp1c3QgbWVyZ2UgdGhlbS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmluZywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0
cy4KKworICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOiBDaGFuZ2VkIHRvIHVzZSBT
ZWxlY3RvckNoZWNrZXIgaW5zdGVhZCBvZiBTZWxlY3RvckNoZWNraW5nQ29udGV4dCwKKyAgICAg
ICAgICAgIGNvbnZlcnRpbmcgdG8gdXNlIG1lbWJlciB2YXJpYWJsZXMgYW5kIGNyZWF0aW5nIFNl
bGVjdG9yQ2hlY2tlciBmb3IgbmVzdGVkIHNlbGVjdG9yIGNoZWNraW5nLgorICAgICAgICAqIGNz
cy9TZWxlY3RvckNoZWNrZXIuaDogTW92ZWQgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgbWVtYmVy
IGRlY2xzIGludG8gU2VsZWN0b3JDaGVja2VyLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKTogQ2hh
bmdlZCB0byBpbml0aWFsaXplIHVzaW5nIG5ld2x5IGNvbmNvY3RlZCBTZWxlY3RvckNoZWNrZXIg
Y29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lv
blNlbGVjdG9yKTogRGl0dG8uCisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JNYXRjaGVzKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckRhdGFMaXN0OjptYXRjaGVzKTogRGl0dG8uCisg
ICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudFNlbGVjdG9yRGF0YUxpc3Q6OmNoZWNrQ29udGVudFNlbGVjdG9yKTog
RGl0dG8uCisgICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaDoKKwog
MjAxMy0wMy0wMiAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAgIFRleHQgb3Zl
cmZsb3cgZWxsaXBzaXMgd3JvbmcgY29sb3Igd2hlbiB1c2luZyB3ZWJraXQtdGV4dC1maWxsLWNv
bG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IGVhZjAzZTMyNzNk
MDE3ODlhNjAwOGU5OTEzMzZiMDIwNDE2ZGEwOGMuLjNiYjI1YzQ1NGYzYWNjMWFjYTA5ZWVhMDI1
YjMzNjdiYzYwZWU2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBA
IC02MywxMCArNjMsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCi1TZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCog
ZG9jdW1lbnQsIE1vZGUgbW9kZSkKLSAgICA6IG1fc3RyaWN0UGFyc2luZyghZG9jdW1lbnQtPmlu
UXVpcmtzTW9kZSgpKQotICAgICwgbV9kb2N1bWVudElzSFRNTChkb2N1bWVudC0+aXNIVE1MRG9j
dW1lbnQoKSkKK1NlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgTW9kZSBtb2RlLCBWaXNpdGVkTWF0Y2hU
eXBlIHZpc2l0ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIGNvbnN0IENv
bnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCBwc2V1ZG9JZCwgUmVuZGVyU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgc2Nyb2xsYmFyUGFydCwgQmVoYXZpb3JBdEJvdW5kYXJ5
IGJlaGF2aW9yQXRCb3VuZGFyeSkKKyAgICA6IG1fc3RyaWN0UGFyc2luZyghZWxlbWVudC0+ZG9j
dW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCisgICAgLCBtX2RvY3VtZW50SXNIVE1MKGVsZW1lbnQt
PmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCiAgICAgLCBtX21vZGUobW9kZSkKKyAgICAs
IG1fc2VsZWN0b3Ioc2VsZWN0b3IpCisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1f
c2NvcGUoc2NvcGUpCisgICAgLCBtX3Zpc2l0ZWRNYXRjaFR5cGUodmlzaXRlZE1hdGNoVHlwZSkK
KyAgICAsIG1fcHNldWRvSWQocHNldWRvSWQpCisgICAgLCBtX2VsZW1lbnRTdHlsZShlbGVtZW50
U3R5bGUpCisgICAgLCBtX3Njcm9sbGJhcihzY3JvbGxiYXIpCisgICAgLCBtX3Njcm9sbGJhclBh
cnQoc2Nyb2xsYmFyUGFydCkKKyAgICAsIG1faXNTdWJTZWxlY3RvcihmYWxzZSkKKyAgICAsIG1f
aGFzU2Nyb2xsYmFyUHNldWRvKGZhbHNlKQorICAgICwgbV9oYXNTZWxlY3Rpb25Qc2V1ZG8oZmFs
c2UpCisgICAgLCBtX2JlaGF2aW9yQXRCb3VuZGFyeShiZWhhdmlvckF0Qm91bmRhcnkpCiB7CiB9
CiAKQEAgLTc3LDI5ICs4OSwyOSBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihE
b2N1bWVudCogZG9jdW1lbnQsIE1vZGUgbW9kZSkKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNpYmxp
bmdzIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAvLyAq
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQg
YW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQogdGVtcGxhdGU8dHlwZW5hbWUgU2libGluZ1Ry
YXZlcnNhbFN0cmF0ZWd5PgotU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6
Om1hdGNoKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQc2V1ZG9JZCYg
ZHluYW1pY1BzZXVkbywgY29uc3QgU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5JiBzaWJsaW5nVHJh
dmVyc2FsU3RyYXRlZ3kpIGNvbnN0CitTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hl
Y2tlcjo6bWF0Y2goUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGNvbnN0IFNpYmxpbmdUcmF2ZXJz
YWxTdHJhdGVneSYgc2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KSBjb25zdAogewogICAgIC8vIGZp
cnN0IHNlbGVjdG9yIGhhcyB0byBtYXRjaAotICAgIGlmICghY2hlY2tPbmUoY29udGV4dCwgc2li
bGluZ1RyYXZlcnNhbFN0cmF0ZWd5KSkKKyAgICBpZiAoIWNoZWNrT25lKHNpYmxpbmdUcmF2ZXJz
YWxTdHJhdGVneSkpCiAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKIAotICAg
IGlmIChjb250ZXh0LnNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVt
ZW50KSB7Ci0gICAgICAgIGlmIChjb250ZXh0LnNlbGVjdG9yLT5pc0N1c3RvbVBzZXVkb0VsZW1l
bnQoKSkgewotICAgICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBjb250ZXh0LmVsZW1l
bnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC5lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IGNvbnRleHQuc2VsZWN0b3ItPnZhbHVlKCkp
CisgICAgaWYgKG1fc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1l
bnQpIHsKKyAgICAgICAgaWYgKG1fc2VsZWN0b3ItPmlzQ3VzdG9tUHNldWRvRWxlbWVudCgpKSB7
CisgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IG1fZWxlbWVudC0+Y29udGFpbmlu
Z1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPnNoYWRvd1Bz
ZXVkb0lkKCkgIT0gbV9zZWxlY3Rvci0+dmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OwogCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQu
c2VsZWN0b3ItPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvV2ViS2l0Q3VzdG9t
RWxlbWVudCAmJiByb290LT50eXBlKCkgIT0gU2hhZG93Um9vdDo6VXNlckFnZW50U2hhZG93Um9v
dCkKKyAgICAgICAgICAgICAgICBpZiAobV9zZWxlY3Rvci0+cHNldWRvVHlwZSgpID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9XZWJLaXRDdXN0b21FbGVtZW50ICYmIHJvb3QtPnR5cGUoKSAhPSBTaGFk
b3dSb290OjpVc2VyQWdlbnRTaGFkb3dSb290KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
U2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoKCFjb250ZXh0LmVsZW1lbnRTdHlsZSAmJiBtX21vZGUgPT0gUmVzb2x2aW5nU3R5
bGUpIHx8IG1fbW9kZSA9PSBRdWVyeWluZ1J1bGVzKQorICAgICAgICAgICAgaWYgKCghbV9lbGVt
ZW50U3R5bGUgJiYgbV9tb2RlID09IFJlc29sdmluZ1N0eWxlKSB8fCBtX21vZGUgPT0gUXVlcnlp
bmdSdWxlcykKICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAK
LSAgICAgICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKGNv
bnRleHQuc2VsZWN0b3ItPnBzZXVkb1R5cGUoKSk7CisgICAgICAgICAgICBQc2V1ZG9JZCBwc2V1
ZG9JZCA9IENTU1NlbGVjdG9yOjpwc2V1ZG9JZChtX3NlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpOwog
ICAgICAgICAgICAgaWYgKHBzZXVkb0lkID09IEZJUlNUX0xFVFRFUikgewotICAgICAgICAgICAg
ICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPmRvY3VtZW50KCkp
CisgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IG1fZWxlbWVudC0+ZG9j
dW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQtPnN0eWxlU2hlZXRDb2xsZWN0
aW9uKCktPnNldFVzZXNGaXJzdExldHRlclJ1bGVzKHRydWUpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKHBzZXVkb0lkICE9IE5PUFNFVURPICYmIG1fbW9kZSAhPSBTaGFyaW5nUnVs
ZXMpCkBAIC0xMDgsODIgKzEyMCw4MiBAQCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9y
Q2hlY2tlcjo6bWF0Y2goY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbgogICAgIH0K
IAogICAgIC8vIFRoZSByZXN0IG9mIHRoZSBzZWxlY3RvcnMgaGFzIHRvIG1hdGNoCi0gICAgQ1NT
U2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uID0gY29udGV4dC5zZWxlY3Rvci0+cmVsYXRpb24o
KTsKKyAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24gPSBtX3NlbGVjdG9yLT5yZWxh
dGlvbigpOwogCiAgICAgLy8gUHJlcGFyZSBuZXh0IHNlbGVjdG9yCi0gICAgY29uc3QgQ1NTU2Vs
ZWN0b3IqIGhpc3RvcnlTZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsK
KyAgICBjb25zdCBDU1NTZWxlY3RvciogaGlzdG9yeVNlbGVjdG9yID0gbV9zZWxlY3Rvci0+dGFn
SGlzdG9yeSgpOwogICAgIGlmICghaGlzdG9yeVNlbGVjdG9yKSB7Ci0gICAgICAgIGlmIChjb250
ZXh0LmJlaGF2aW9yQXRCb3VuZGFyeSA9PSBDcm9zc2VzQm91bmRhcnkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChjb250ZXh0LnNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnNjb3Bl
LT5jb250YWlucyhjb250ZXh0LmVsZW1lbnQpID8gU2VsZWN0b3JNYXRjaGVzIDogU2VsZWN0b3JG
YWlsc0xvY2FsbHk7CisgICAgICAgIGlmIChtX2JlaGF2aW9yQXRCb3VuZGFyeSA9PSBDcm9zc2Vz
Qm91bmRhcnkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Njb3BlKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX3Njb3BlLT5jb250YWlucyhtX2VsZW1lbnQpID8gU2VsZWN0b3JNYXRjaGVzIDogU2Vs
ZWN0b3JGYWlsc0xvY2FsbHk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0
Y2hlczsKICAgICB9CiAKLSAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBuZXh0Q29udGV4dChj
b250ZXh0KTsKLSAgICBuZXh0Q29udGV4dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxlY3RvcjsKKyAg
ICBTZWxlY3RvckNoZWNrZXIgbmV4dFNlbGVjdG9yQ2hlY2tlcigqdGhpcyk7CisgICAgbmV4dFNl
bGVjdG9yQ2hlY2tlci5tX3NlbGVjdG9yID0gaGlzdG9yeVNlbGVjdG9yOwogCiAgICAgUHNldWRv
SWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogICAgIGlmIChyZWxhdGlvbiAhPSBD
U1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKICAgICAgICAgLy8gQWJvcnQgaWYgdGhlIG5leHQg
c2VsZWN0b3Igd291bGQgZXhjZWVkIHRoZSBzY29wZS4KLSAgICAgICAgaWYgKGNvbnRleHQuZWxl
bWVudCA9PSBjb250ZXh0LnNjb3BlKQorICAgICAgICBpZiAobV9lbGVtZW50ID09IG1fc2NvcGUp
CiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CiAKLSAgICAgICAg
Ly8gQmFpbC1vdXQgaWYgdGhpcyBzZWxlY3RvciBpcyBpcnJlbGV2YW50IGZvciB0aGUgcHNldWRv
SWQKLSAgICAgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgY29udGV4dC5w
c2V1ZG9JZCAhPSBkeW5hbWljUHNldWRvKQorICAgICAgICAvLyBCYWlsLW91dCBpZiB0aGlzIHNl
bGVjdG9yIGlzIGlycmVsZXZhbnQgZm9yIHRoZSBwc2V1ZG9TdHlsZQorICAgICAgICBpZiAobV9w
c2V1ZG9JZCAhPSBOT1BTRVVETyAmJiBtX3BzZXVkb0lkICE9IGR5bmFtaWNQc2V1ZG8pCiAgICAg
ICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CiAKICAgICAgICAgLy8gRGlz
YWJsZSA6dmlzaXRlZCBtYXRjaGluZyB3aGVuIHdlIHNlZSB0aGUgZmlyc3QgbGluayBvciB0cnkg
dG8gbWF0Y2ggYW55dGhpbmcgZWxzZSB0aGFuIGFuIGFuY2VzdG9ycy4KLSAgICAgICAgaWYgKCFj
b250ZXh0LmlzU3ViU2VsZWN0b3IgJiYgKGNvbnRleHQuZWxlbWVudC0+aXNMaW5rKCkgfHwgKHJl
bGF0aW9uICE9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ICYmIHJlbGF0aW9uICE9IENTU1NlbGVj
dG9yOjpDaGlsZCkpKQotICAgICAgICAgICAgbmV4dENvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9
IFZpc2l0ZWRNYXRjaERpc2FibGVkOworICAgICAgICBpZiAoIW1faXNTdWJTZWxlY3RvciAmJiAo
bV9lbGVtZW50LT5pc0xpbmsoKSB8fCAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRh
bnQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkKSkpCisgICAgICAgICAgICBuZXh0
U2VsZWN0b3JDaGVja2VyLm1fdmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaERpc2FibGVk
OwogCi0gICAgICAgIG5leHRDb250ZXh0LnBzZXVkb0lkID0gTk9QU0VVRE87CisgICAgICAgIG5l
eHRTZWxlY3RvckNoZWNrZXIubV9wc2V1ZG9JZCA9IE5PUFNFVURPOwogICAgIH0KIAogICAgIHN3
aXRjaCAocmVsYXRpb24pIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpEZXNjZW5kYW50OgotICAg
ICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50
KCk7Ci0gICAgICAgIG5leHRDb250ZXh0LmlzU3ViU2VsZWN0b3IgPSBmYWxzZTsKLSAgICAgICAg
bmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKLSAgICAgICAgZm9yICg7IG5leHRDb250ZXh0
LmVsZW1lbnQ7IG5leHRDb250ZXh0LmVsZW1lbnQgPSBuZXh0Q29udGV4dC5lbGVtZW50LT5wYXJl
bnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2gobmV4
dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSk7
CisgICAgICAgIG5leHRTZWxlY3RvckNoZWNrZXIubV9lbGVtZW50ID0gbV9lbGVtZW50LT5wYXJl
bnRFbGVtZW50KCk7CisgICAgICAgIG5leHRTZWxlY3RvckNoZWNrZXIubV9pc1N1YlNlbGVjdG9y
ID0gZmFsc2U7CisgICAgICAgIG5leHRTZWxlY3RvckNoZWNrZXIubV9lbGVtZW50U3R5bGUgPSAw
OworICAgICAgICBmb3IgKDsgbmV4dFNlbGVjdG9yQ2hlY2tlci5tX2VsZW1lbnQ7IG5leHRTZWxl
Y3RvckNoZWNrZXIubV9lbGVtZW50ID0gbmV4dFNlbGVjdG9yQ2hlY2tlci5tX2VsZW1lbnQtPnBh
cmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSBuZXh0U2VsZWN0b3JD
aGVja2VyLm1hdGNoKGlnbm9yZUR5bmFtaWNQc2V1ZG8sIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVn
eSk7CiAgICAgICAgICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQogICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsK
LSAgICAgICAgICAgIGlmIChuZXh0Q29udGV4dC5lbGVtZW50ID09IG5leHRDb250ZXh0LnNjb3Bl
KQorICAgICAgICAgICAgaWYgKG5leHRTZWxlY3RvckNoZWNrZXIubV9lbGVtZW50ID09IG5leHRT
ZWxlY3RvckNoZWNrZXIubV9zY29wZSkKICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JG
YWlsc0NvbXBsZXRlbHk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHND
b21wbGV0ZWx5OwogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6Ci0gICAgICAgIG5leHRD
b250ZXh0LmVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKLSAgICAg
ICAgaWYgKCFuZXh0Q29udGV4dC5lbGVtZW50KQorICAgICAgICBuZXh0U2VsZWN0b3JDaGVja2Vy
Lm1fZWxlbWVudCA9IG1fZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgICAgICBpZiAoIW5l
eHRTZWxlY3RvckNoZWNrZXIubV9lbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9y
RmFpbHNDb21wbGV0ZWx5OwotICAgICAgICBuZXh0Q29udGV4dC5pc1N1YlNlbGVjdG9yID0gZmFs
c2U7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7Ci0gICAgICAgIHJldHVy
biBtYXRjaChuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgc2libGluZ1RyYXZlcnNh
bFN0cmF0ZWd5KTsKKyAgICAgICAgbmV4dFNlbGVjdG9yQ2hlY2tlci5tX2lzU3ViU2VsZWN0b3Ig
PSBmYWxzZTsKKyAgICAgICAgbmV4dFNlbGVjdG9yQ2hlY2tlci5tX2VsZW1lbnRTdHlsZSA9IDA7
CisgICAgICAgIHJldHVybiBuZXh0U2VsZWN0b3JDaGVja2VyLm1hdGNoKGlnbm9yZUR5bmFtaWNQ
c2V1ZG8sIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSk7CiAKICAgICBjYXNlIENTU1NlbGVjdG9y
OjpEaXJlY3RBZGphY2VudDoKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkg
ewotICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBjb250ZXh0LmVsZW1l
bnQtPnBhcmVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVt
ZW50ID0gbV9lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcGFyZW50
RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwogICAg
ICAgICB9Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKCFuZXh0Q29udGV4dC5lbGVtZW50
KQorICAgICAgICBuZXh0U2VsZWN0b3JDaGVja2VyLm1fZWxlbWVudCA9IG1fZWxlbWVudC0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpOworICAgICAgICBpZiAoIW5leHRTZWxlY3RvckNoZWNrZXIu
bV9lbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsK
LSAgICAgICAgbmV4dENvbnRleHQuaXNTdWJTZWxlY3RvciA9IGZhbHNlOwotICAgICAgICBuZXh0
Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICByZXR1cm4gbWF0Y2gobmV4dENvbnRl
eHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSk7CisgICAg
ICAgIG5leHRTZWxlY3RvckNoZWNrZXIubV9pc1N1YlNlbGVjdG9yID0gZmFsc2U7CisgICAgICAg
IG5leHRTZWxlY3RvckNoZWNrZXIubV9lbGVtZW50U3R5bGUgPSAwOworICAgICAgICByZXR1cm4g
bmV4dFNlbGVjdG9yQ2hlY2tlci5tYXRjaChpZ25vcmVEeW5hbWljUHNldWRvLCBzaWJsaW5nVHJh
dmVyc2FsU3RyYXRlZ3kpOwogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2Vu
dDoKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewotICAgICAgICAgICAg
aWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1l
bnQoKSkKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gbV9lbGVtZW50
LT5wYXJlbnRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hp
bGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICB9Ci0gICAg
ICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnByZXZpb3VzRWxlbWVu
dFNpYmxpbmcoKTsKLSAgICAgICAgbmV4dENvbnRleHQuaXNTdWJTZWxlY3RvciA9IGZhbHNlOwot
ICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICBmb3IgKDsgbmV4
dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQuZWxlbWVudCA9IG5leHRDb250ZXh0LmVsZW1l
bnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICAgICAgTWF0Y2ggbWF0Y2gg
PSB0aGlzLT5tYXRjaChuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgc2libGluZ1Ry
YXZlcnNhbFN0cmF0ZWd5KTsKKyAgICAgICAgbmV4dFNlbGVjdG9yQ2hlY2tlci5tX2VsZW1lbnQg
PSBtX2VsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKKyAgICAgICAgbmV4dFNlbGVj
dG9yQ2hlY2tlci5tX2lzU3ViU2VsZWN0b3IgPSBmYWxzZTsKKyAgICAgICAgbmV4dFNlbGVjdG9y
Q2hlY2tlci5tX2VsZW1lbnRTdHlsZSA9IDA7CisgICAgICAgIGZvciAoOyBuZXh0U2VsZWN0b3JD
aGVja2VyLm1fZWxlbWVudDsgbmV4dFNlbGVjdG9yQ2hlY2tlci5tX2VsZW1lbnQgPSBuZXh0U2Vs
ZWN0b3JDaGVja2VyLm1fZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CisgICAg
ICAgICAgICBNYXRjaCBtYXRjaCA9IG5leHRTZWxlY3RvckNoZWNrZXIubWF0Y2goaWdub3JlRHlu
YW1pY1BzZXVkbywgc2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KTsKICAgICAgICAgICAgIGlmICht
YXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0FsbFNpYmxp
bmdzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQogICAgICAgICAgICAgICAg
IHJldHVybiBtYXRjaDsKICAgICAgICAgfTsKQEAgLTE5Myw0MCArMjA1LDQwIEBAIFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2ggU2VsZWN0b3JDaGVja2VyOjptYXRjaChjb25zdCBTZWxlY3RvckNoZWNr
aW5nQ29udGV4dCYgY29uCiAgICAgICAgIC8vIGEgc2VsZWN0b3IgaXMgaW52YWxpZCBpZiBzb21l
dGhpbmcgZm9sbG93cyBhIHBzZXVkby1lbGVtZW50CiAgICAgICAgIC8vIFdlIG1ha2UgYW4gZXhj
ZXB0aW9uIGZvciBzY3JvbGxiYXIgcHNldWRvIGVsZW1lbnRzIGFuZCBhbGxvdyBhIHNldCBvZiBw
c2V1ZG8gY2xhc3NlcyAoYnV0IG5vdGhpbmcgZWxzZSkKICAgICAgICAgLy8gdG8gZm9sbG93IHRo
ZSBwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAgIG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVk
byA9IGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgKGNvbnRleHQuc2Nyb2xsYmFyIHx8IGR5
bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0la
RVIpOwotICAgICAgICBuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWljUHNl
dWRvID09IFNFTEVDVElPTjsKLSAgICAgICAgaWYgKChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBt
X21vZGUgPT0gQ29sbGVjdGluZ1J1bGVzIHx8IG1fbW9kZSA9PSBRdWVyeWluZ1J1bGVzKSAmJiBk
eW5hbWljUHNldWRvICE9IE5PUFNFVURPCi0gICAgICAgICAgICAmJiAhbmV4dENvbnRleHQuaGFz
U2VsZWN0aW9uUHNldWRvCi0gICAgICAgICAgICAmJiAhKG5leHRDb250ZXh0Lmhhc1Njcm9sbGJh
clBzZXVkbyAmJiBuZXh0Q29udGV4dC5zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3MpKQorICAgICAgICBuZXh0U2VsZWN0b3JDaGVja2VyLm1faGFzU2Nyb2xsYmFy
UHNldWRvID0gZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiAobV9zY3JvbGxiYXIgfHwgZHlu
YW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpF
Uik7CisgICAgICAgIG5leHRTZWxlY3RvckNoZWNrZXIubV9oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBk
eW5hbWljUHNldWRvID09IFNFTEVDVElPTjsKKyAgICAgICAgaWYgKChtX2VsZW1lbnRTdHlsZSB8
fCBtX21vZGUgPT0gQ29sbGVjdGluZ1J1bGVzIHx8IG1fbW9kZSA9PSBRdWVyeWluZ1J1bGVzKSAm
JiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPCisgICAgICAgICAgICAmJiAhbmV4dFNlbGVjdG9y
Q2hlY2tlci5tX2hhc1NlbGVjdGlvblBzZXVkbworICAgICAgICAgICAgJiYgIShuZXh0U2VsZWN0
b3JDaGVja2VyLm1faGFzU2Nyb2xsYmFyUHNldWRvICYmIG5leHRTZWxlY3RvckNoZWNrZXIubV9z
ZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQogICAgICAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICBuZXh0Q29udGV4dC5p
c1N1YlNlbGVjdG9yID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1hdGNoKG5leHRDb250ZXh0LCBk
eW5hbWljUHNldWRvLCBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kpOworICAgICAgICBuZXh0U2Vs
ZWN0b3JDaGVja2VyLm1faXNTdWJTZWxlY3RvciA9IHRydWU7CisgICAgICAgIHJldHVybiBuZXh0
U2VsZWN0b3JDaGVja2VyLm1hdGNoKGR5bmFtaWNQc2V1ZG8sIHNpYmxpbmdUcmF2ZXJzYWxTdHJh
dGVneSk7CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50OgogICAgICAg
ICB7CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgc2FtZSB0cmVlLXNjb3BlIGFzIHRo
ZSBzY29waW5nIGVsZW1lbnQsIHRoZW4gZm9sbG93aW5nIGEgc2hhZG93IGRlc2NlbmRhbnQgY29t
YmluYXRvciB3b3VsZCBlc2NhcGUgdGhhdCBhbmQgdGh1cyB0aGUgc2NvcGUuCi0gICAgICAgICAg
ICBpZiAoY29udGV4dC5zY29wZSAmJiBjb250ZXh0LnNjb3BlLT50cmVlU2NvcGUoKSA9PSBjb250
ZXh0LmVsZW1lbnQtPnRyZWVTY29wZSgpKQorICAgICAgICAgICAgaWYgKG1fc2NvcGUgJiYgbV9z
Y29wZS0+dHJlZVNjb3BlKCkgPT0gbV9lbGVtZW50LT50cmVlU2NvcGUoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICBFbGVtZW50
KiBzaGFkb3dIb3N0Tm9kZSA9IGNvbnRleHQuZWxlbWVudC0+c2hhZG93SG9zdCgpOworICAgICAg
ICAgICAgRWxlbWVudCogc2hhZG93SG9zdE5vZGUgPSBtX2VsZW1lbnQtPnNoYWRvd0hvc3QoKTsK
ICAgICAgICAgICAgIGlmICghc2hhZG93SG9zdE5vZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVu
dCA9IHNoYWRvd0hvc3ROb2RlOwotICAgICAgICAgICAgbmV4dENvbnRleHQuaXNTdWJTZWxlY3Rv
ciA9IGZhbHNlOwotICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKLSAg
ICAgICAgICAgIHJldHVybiBtYXRjaChuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywg
c2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KTsKKyAgICAgICAgICAgIG5leHRTZWxlY3RvckNoZWNr
ZXIubV9lbGVtZW50ID0gc2hhZG93SG9zdE5vZGU7CisgICAgICAgICAgICBuZXh0U2VsZWN0b3JD
aGVja2VyLm1faXNTdWJTZWxlY3RvciA9IGZhbHNlOworICAgICAgICAgICAgbmV4dFNlbGVjdG9y
Q2hlY2tlci5tX2VsZW1lbnRTdHlsZSA9IDA7CisgICAgICAgICAgICByZXR1cm4gbmV4dFNlbGVj
dG9yQ2hlY2tlci5tYXRjaChpZ25vcmVEeW5hbWljUHNldWRvLCBzaWJsaW5nVHJhdmVyc2FsU3Ry
YXRlZ3kpOwogICAgICAgICB9CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6U2hhZG93RGlzdHJpYnV0ZWQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIFZlY3Rv
cjxJbnNlcnRpb25Qb2ludCosIDg+IGluc2VydGlvblBvaW50czsKLSAgICAgICAgICAgIGZvciAo
RWxlbWVudCogZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsgZWxlbWVudDsgZWxlbWVudCA9IGVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgZm9yIChFbGVtZW50KiBlbGVt
ZW50ID0gbV9lbGVtZW50OyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVu
dCgpKSB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uUG9pbnRzLmNsZWFyKCk7CiAgICAgICAg
ICAgICAgICAgY29sbGVjdEluc2VydGlvblBvaW50c1doZXJlTm9kZUlzRGlzdHJpYnV0ZWQoZWxl
bWVudCwgaW5zZXJ0aW9uUG9pbnRzKTsKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGluc2VydGlvblBvaW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAg
ICBuZXh0Q29udGV4dC5lbGVtZW50ID0gaW5zZXJ0aW9uUG9pbnRzW2ldOwotICAgICAgICAgICAg
ICAgICAgICBuZXh0Q29udGV4dC5pc1N1YlNlbGVjdG9yID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChtYXRjaChuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgc2libGluZ1RyYXZl
cnNhbFN0cmF0ZWd5KSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICAgICAgICAgIG5l
eHRTZWxlY3RvckNoZWNrZXIubV9lbGVtZW50ID0gaW5zZXJ0aW9uUG9pbnRzW2ldOworICAgICAg
ICAgICAgICAgICAgICBuZXh0U2VsZWN0b3JDaGVja2VyLm1faXNTdWJTZWxlY3RvciA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBuZXh0U2VsZWN0b3JDaGVja2VyLm1fZWxlbWVudFN0eWxl
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRTZWxlY3RvckNoZWNrZXIubWF0Y2go
aWdub3JlRHluYW1pY1BzZXVkbywgc2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KSA9PSBTZWxlY3Rv
ck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JNYXRjaGVz
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMxOSwxMCArMzMxLDEwIEBA
IHN0YXRpYyBib29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoRWxlbWVudCogZWxlbWVudCwgQ1NTU2Vs
ZWN0b3I6Ok1hdGNoIG1hdGNoLCBjb25zCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFNpYmxpbmdU
cmF2ZXJzYWxTdHJhdGVneT4KLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgY29uc3QgU2libGluZ1RyYXZlcnNhbFN0
cmF0ZWd5JiBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoY29uc3QgU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5JiBzaWJsaW5nVHJh
dmVyc2FsU3RyYXRlZ3kpIGNvbnN0CiB7Ci0gICAgRWxlbWVudCogY29uc3QgJiBlbGVtZW50ID0g
Y29udGV4dC5lbGVtZW50OwotICAgIGNvbnN0IENTU1NlbGVjdG9yKiBjb25zdCAmIHNlbGVjdG9y
ID0gY29udGV4dC5zZWxlY3RvcjsKKyAgICBFbGVtZW50KiBjb25zdCAmIGVsZW1lbnQgPSBtX2Vs
ZW1lbnQ7CisgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBtX3NlbGVj
dG9yOwogICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBBU1NFUlQoc2VsZWN0b3IpOwogCkBAIC0z
NTYsMjQgKzM2OCwyNCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFNpYgogICAgICAgICAgICAgaWYg
KCFzZWxlY3Rvckxpc3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
ICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBzdWJDb250ZXh0KGNvbnRleHQpOwotICAgICAg
ICAgICAgc3ViQ29udGV4dC5pc1N1YlNlbGVjdG9yID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAo
c3ViQ29udGV4dC5zZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViQ29udGV4dC5z
ZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IHN1YkNvbnRleHQuc2VsZWN0b3ItPnRhZ0hp
c3RvcnkoKSkgeworICAgICAgICAgICAgU2VsZWN0b3JDaGVja2VyIHN1YlNlbGVjdG9yQ2hlY2tl
cigqdGhpcyk7CisgICAgICAgICAgICBzdWJTZWxlY3RvckNoZWNrZXIubV9pc1N1YlNlbGVjdG9y
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAoc3ViU2VsZWN0b3JDaGVja2VyLm1fc2VsZWN0b3Ig
PSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YlNlbGVjdG9yQ2hlY2tlci5tX3NlbGVjdG9yOyBz
dWJTZWxlY3RvckNoZWNrZXIubV9zZWxlY3RvciA9IHN1YlNlbGVjdG9yQ2hlY2tlci5tX3NlbGVj
dG9yLT50YWdIaXN0b3J5KCkpIHsKICAgICAgICAgICAgICAgICAvLyA6bm90IGNhbm5vdCBuZXN0
LiBJIGRvbid0IHJlYWxseSBrbm93IHdoeSB0aGlzIGlzIGEKICAgICAgICAgICAgICAgICAvLyBy
ZXN0cmljdGlvbiBpbiBDU1MzLCBidXQgaXQgaXMsIHNvIGxldCdzIGhvbm9yIGl0LgogICAgICAg
ICAgICAgICAgIC8vIHRoZSBwYXJzZXIgZW5mb3JjZXMgdGhhdCB0aGlzIG5ldmVyIG9jY3Vycwot
ICAgICAgICAgICAgICAgIEFTU0VSVChzdWJDb250ZXh0LnNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkg
IT0gQ1NTU2VsZWN0b3I6OlBzZXVkb05vdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN1YlNl
bGVjdG9yQ2hlY2tlci5tX3NlbGVjdG9yLT5wc2V1ZG9UeXBlKCkgIT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb05vdCk7CiAgICAgICAgICAgICAgICAgLy8gV2Ugc2VsZWN0IGJldHdlZW4gOnZpc2l0ZWQg
YW5kIDpsaW5rIHdoZW4gYXBwbHlpbmcuIFdlIGRvbid0IGtub3cgd2hpY2ggb25lIGFwcGxpZWQg
KG9yIG5vdCkgeWV0LgotICAgICAgICAgICAgICAgIGlmIChzdWJDb250ZXh0LnNlbGVjdG9yLT5w
c2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQgfHwgKHN1YkNvbnRleHQu
c2VsZWN0b3ItPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTGluayAmJiBzdWJD
b250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoRW5hYmxlZCkpCisgICAgICAg
ICAgICAgICAgaWYgKHN1YlNlbGVjdG9yQ2hlY2tlci5tX3NlbGVjdG9yLT5wc2V1ZG9UeXBlKCkg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQgfHwgKHN1YlNlbGVjdG9yQ2hlY2tlci5tX3Nl
bGVjdG9yLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbmsgJiYgc3ViU2Vs
ZWN0b3JDaGVja2VyLm1fdmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFj
aGVja09uZShzdWJDb250ZXh0LCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3koKSkpCisgICAg
ICAgICAgICAgICAgaWYgKCFzdWJTZWxlY3RvckNoZWNrZXIuY2hlY2tPbmUoRE9NU2libGluZ1Ry
YXZlcnNhbFN0cmF0ZWd5KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVk
bykgeworICAgICAgICB9IGVsc2UgaWYgKG1faGFzU2Nyb2xsYmFyUHNldWRvKSB7CiAgICAgICAg
ICAgICAvLyBDU1Mgc2Nyb2xsYmFycyBtYXRjaCBhIHNwZWNpZmljIHN1YnNldCBvZiBwc2V1ZG8g
Y2xhc3NlcywgYW5kIHRoZXkgaGF2ZSBzcGVjaWFsaXplZCBydWxlcyBmb3IgZWFjaAogICAgICAg
ICAgICAgLy8gKHNpbmNlIHRoZXJlIGFyZSBubyBlbGVtZW50cyBpbnZvbHZlZCkuCi0gICAgICAg
ICAgICByZXR1cm4gY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhjb250ZXh0LCBlbGVtZW50LT5k
b2N1bWVudCgpLCBzZWxlY3Rvcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5oYXNTZWxl
Y3Rpb25Qc2V1ZG8pIHsKKyAgICAgICAgICAgIHJldHVybiBjaGVja1Njcm9sbGJhclBzZXVkb0Ns
YXNzKGVsZW1lbnQtPmRvY3VtZW50KCksIHNlbGVjdG9yKTsKKyAgICAgICAgfSBlbHNlIGlmICht
X2hhc1NlbGVjdGlvblBzZXVkbykgewogICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5wc2V1ZG9U
eXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1dpbmRvd0luYWN0aXZlKQogICAgICAgICAgICAg
ICAgIHJldHVybiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIo
KS0+aXNBY3RpdmUoKTsKICAgICAgICAgfQpAQCAtNDAxLDggKzQxMyw4IEBAIGJvb2wgU2VsZWN0
b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4
dCwgY29uc3QgU2liCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChtX21v
ZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0
U3R5bGVBZmZlY3RlZEJ5RW1wdHkoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQu
ZWxlbWVudFN0eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5
bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZWxl
bWVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9lbGVtZW50U3R5bGUtPnNldEVt
cHR5U3RhdGUocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+
cmVuZGVyU3R5bGUoKSAmJiAoZWxlbWVudC0+ZG9jdW1lbnQoKS0+c3R5bGVTaGVldENvbGxlY3Rp
b24oKS0+dXNlc1NpYmxpbmdSdWxlcygpIHx8IGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnVuaXF1
ZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnNl
dEVtcHR5U3RhdGUocmVzdWx0KTsKICAgICAgICAgICAgICAgICB9CkBAIC00MTMsNyArNDI1LDcg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0JiBjb250ZXh0LCBjb25zdCBTaWIKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJl
bnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAg
Ym9vbCByZXN1bHQgPSBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kuaXNGaXJzdENoaWxkKGVsZW1l
bnQpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1l
bnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBtX2VsZW1lbnRT
dHlsZSA/IG1fZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGls
ZFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRTdHlsZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldEZpcnN0Q2hpbGRTdGF0ZSgp
OwpAQCAtNDM1LDcgKzQ0Nyw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25z
dCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgY29uc3QgU2liCiAgICAgICAgICAg
ICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkg
ewogICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hl
ZFBhcnNpbmdDaGlsZHJlbigpICYmIHNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneS5pc0xhc3RDaGls
ZChlbGVtZW50KTsKICAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4
dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0
eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gbV9l
bGVtZW50U3R5bGUgPyBtX2VsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxh
c3RDaGlsZFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRT
dHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUtPnNldExhc3RDaGlsZFN0
YXRlKCk7CkBAIC00NTgsNyArNDcwLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTaWIKICAgICAg
ICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kuaXNG
aXJzdENoaWxkKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxkID0gZmly
c3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYg
c2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5LmlzTGFzdENoaWxkKGVsZW1lbnQpOwogICAgICAgICAg
ICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRl
eHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBtX2VsZW1lbnRTdHlsZSA/IG1fZWxlbWVu
dFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7CiAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RD
aGlsZFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIGNoaWxk
U3R5bGUpCkBAIC00ODcsNyArNDk5LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTaWIKICAgICAg
ICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVu
dCgpKSB7CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIHNpYmxpbmdUcmF2ZXJzYWxT
dHJhdGVneS5jb3VudEVsZW1lbnRzQmVmb3JlKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlm
IChtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVu
dFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBtX2VsZW1lbnRTdHlsZSA/IG1fZWxlbWVudFN0eWxlIDog
ZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0
Q2hpbGRJbmRleChjb3VudCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFN0eWxlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRTdHlsZS0+c2V0VW5pcXVlKCk7CkBAIC01NDMs
MTEgKzU1NSwxMSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0
b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFNpYgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueToKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBzdWJDb250ZXh0KGNvbnRleHQp
OwotICAgICAgICAgICAgICAgIHN1YkNvbnRleHQuaXNTdWJTZWxlY3RvciA9IHRydWU7CisgICAg
ICAgICAgICAgICAgU2VsZWN0b3JDaGVja2VyIHN1YlNlbGVjdG9yQ2hlY2tlcigqdGhpcyk7Cisg
ICAgICAgICAgICAgICAgc3ViU2VsZWN0b3JDaGVja2VyLm1faXNTdWJTZWxlY3RvciA9IHRydWU7
CiAgICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURP
OwotICAgICAgICAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3RvciA9IHNlbGVjdG9yLT5z
ZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5z
ZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250ZXh0LnNlbGVjdG9yKSkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2goc3ViQ29udGV4dCwgaWdub3JlRHluYW1pY1Bz
ZXVkbywgc2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAg
ICAgICAgICAgICAgZm9yIChzdWJTZWxlY3RvckNoZWNrZXIubV9zZWxlY3RvciA9IHNlbGVjdG9y
LT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViU2VsZWN0b3JDaGVja2VyLm1fc2VsZWN0b3I7
IHN1YlNlbGVjdG9yQ2hlY2tlci5tX3NlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1
YlNlbGVjdG9yQ2hlY2tlci5tX3NlbGVjdG9yKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
c3ViU2VsZWN0b3JDaGVja2VyLm1hdGNoKGlnbm9yZUR5bmFtaWNQc2V1ZG8sIHNpYmxpbmdUcmF2
ZXJzYWxTdHJhdGVneSkgPT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNTY0
LDExICs1NzYsMTEgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTaWIKICAgICAgICAgICAgIHJldHVy
biBlbGVtZW50LT5pc0xpbmsoKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmlz
aXRlZDoKICAgICAgICAgICAgIC8vIC4uLmV4Y2VwdCBpZiA6dmlzaXRlZCBtYXRjaGluZyBpcyBk
aXNhYmxlZCBmb3IgYW5jZXN0b3Ivc2libGluZyBtYXRjaGluZy4KLSAgICAgICAgICAgIHJldHVy
biBlbGVtZW50LT5pc0xpbmsoKSAmJiBjb250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRl
ZE1hdGNoRW5hYmxlZDsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5pc0xpbmsoKSAmJiBt
X3Zpc2l0ZWRNYXRjaFR5cGUgPT0gVmlzaXRlZE1hdGNoRW5hYmxlZDsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvRHJhZzoKICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2
aW5nU3R5bGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5RHJh
ZygpOworICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnRTdHlsZSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9lbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlEcmFnKCk7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVk
QnlEcmFnKHRydWUpOwogICAgICAgICAgICAgfQpAQCAtNTgwLDEwICs1OTIsMTAgQEAgYm9vbCBT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBTaWIKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6
CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91
bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAvLyBocmVmIGFuZCAq
OmhvdmVyIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBz
aXRlcyBsaWtlIHdzai5jb20uCi0gICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGNv
bnRleHQuaXNTdWJTZWxlY3RvciB8fCAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OlRhZyAmJiBzZWxlY3Rvci0+dGFnUU5hbWUoKSAhPSBhbnlRTmFtZSgpICYmICFlbGVtZW50LT5o
YXNUYWdOYW1lKGFUYWcpKSB8fCBlbGVtZW50LT5pc0xpbmsoKSkgeworICAgICAgICAgICAgaWYg
KG1fc3RyaWN0UGFyc2luZyB8fCBtX2lzU3ViU2VsZWN0b3IgfHwgKHNlbGVjdG9yLT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpUYWcgJiYgc2VsZWN0b3ItPnRhZ1FOYW1lKCkgIT0gYW55UU5hbWUo
KSAmJiAhZWxlbWVudC0+aGFzVGFnTmFtZShhVGFnKSkgfHwgZWxlbWVudC0+aXNMaW5rKCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5SG92ZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZWxlbWVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9lbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlIb3ZlcigpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRDaGlsZHJlbkFm
ZmVjdGVkQnlIb3Zlcih0cnVlKTsKICAgICAgICAgICAgICAgICB9CkBAIC01OTQsMTAgKzYwNiwx
MCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFNpYgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9BY3RpdmU6CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhl
biA6YWN0aXZlIHNob3VsZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGggbm8KICAgICAgICAgICAg
IC8vIGhyZWYgYW5kICo6YWN0aXZlIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuCi0gICAgICAg
ICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGNvbnRleHQuaXNTdWJTZWxlY3RvciB8fCAoc2Vs
ZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiBzZWxlY3Rvci0+dGFnUU5hbWUo
KSAhPSBhbnlRTmFtZSgpICYmICFlbGVtZW50LT5oYXNUYWdOYW1lKGFUYWcpKSB8fCBlbGVtZW50
LT5pc0xpbmsoKSkgeworICAgICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBtX2lzU3Vi
U2VsZWN0b3IgfHwgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgJiYgc2Vs
ZWN0b3ItPnRhZ1FOYW1lKCkgIT0gYW55UU5hbWUoKSAmJiAhZWxlbWVudC0+aGFzVGFnTmFtZShh
VGFnKSkgfHwgZWxlbWVudC0+aXNMaW5rKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9tb2Rl
ID09IFJlc29sdmluZ1N0eWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVs
ZW1lbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxl
LT5zZXRBZmZlY3RlZEJ5QWN0aXZlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2VsZW1l
bnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZWxlbWVudFN0eWxlLT5zZXRBZmZl
Y3RlZEJ5QWN0aXZlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUFjdGl2ZSh0cnVlKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC03NTYsMTMgKzc2OCwxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IFNpYgogICAgIH0KICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgZWxzZSBpZiAoc2VsZWN0
b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgc2VsZWN0b3ItPnBz
ZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ3VlKSB7Ci0gICAgICAgIFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgIHN1YkNvbnRleHQu
aXNTdWJTZWxlY3RvciA9IHRydWU7CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlciBzdWJTZWxlY3Rv
ckNoZWNrZXIoKnRoaXMpOworICAgICAgICBzdWJTZWxlY3RvckNoZWNrZXIubV9pc1N1YlNlbGVj
dG9yID0gdHJ1ZTsKIAogICAgICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9Q
U0VVRE87Ci0gICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiBjb25zdCAmIHNlbGVjdG9yID0gY29u
dGV4dC5zZWxlY3RvcjsKLSAgICAgICAgZm9yIChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2VsZWN0
b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJDb250
ZXh0LnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YkNvbnRleHQuc2VsZWN0b3Ip
KSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2goc3ViQ29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVk
bywgc2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAg
IGNvbnN0IENTU1NlbGVjdG9yKiBjb25zdCAmIHNlbGVjdG9yID0gbV9zZWxlY3RvcjsKKyAgICAg
ICAgZm9yIChzdWJTZWxlY3RvckNoZWNrZXIubV9zZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rv
ckxpc3QoKS0+Zmlyc3QoKTsgc3ViU2VsZWN0b3JDaGVja2VyLm1fc2VsZWN0b3I7IHN1YlNlbGVj
dG9yQ2hlY2tlci5tX3NlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YlNlbGVjdG9y
Q2hlY2tlci5tX3NlbGVjdG9yKSkgeworICAgICAgICAgICAgaWYgKHN1YlNlbGVjdG9yQ2hlY2tl
ci5tYXRjaChpZ25vcmVEeW5hbWljUHNldWRvLCBzaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kpID09
IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03NzIsMTAgKzc4NCwxMCBAQCBib29sIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IFNpYgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4
dCYgY29udGV4dCwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0
b3IpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFz
cyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikgY29uc3QK
IHsKLSAgICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9sbGJhciA9IGNvbnRleHQuc2Nyb2xsYmFyOwot
ICAgIFNjcm9sbGJhclBhcnQgcGFydCA9IGNvbnRleHQuc2Nyb2xsYmFyUGFydDsKKyAgICBSZW5k
ZXJTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fc2Nyb2xsYmFyOworICAgIFNjcm9sbGJhclBhcnQg
cGFydCA9IG1fc2Nyb2xsYmFyUGFydDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9y
YXJ5IGhhY2sgZm9yIHJlc2l6ZXJzIGFuZCBzY3JvbGxiYXIgY29ybmVycy4gRXZlbnR1YWxseSA6
d2luZG93LWluYWN0aXZlIHNob3VsZCBiZWNvbWUgYSByZWFsCiAgICAgLy8gcHNldWRvIGNsYXNz
IGFuZCBqdXN0IGFwcGx5IHRvIGV2ZXJ5dGhpbmcuCkBAIC05MTEsOSArOTIzLDkgQEAgYm9vbCBT
ZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQpCiB9CiAKIHRlbXBsYXRlCi1TZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hl
Y2tlcjo6bWF0Y2goY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGNv
bnN0IERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSYpIGNvbnN0OworU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoKFBzZXVkb0lkJiwgY29uc3QgRE9NU2libGlu
Z1RyYXZlcnNhbFN0cmF0ZWd5JikgY29uc3Q7CiAKIHRlbXBsYXRlCi1TZWxlY3RvckNoZWNrZXI6
Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRl
eHQmLCBQc2V1ZG9JZCYsIGNvbnN0IFNoYWRvd0RPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSYp
IGNvbnN0OworU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoKFBz
ZXVkb0lkJiwgY29uc3QgU2hhZG93RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5JikgY29uc3Q7
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCAyZjQyYjY3ZDBmNTJl
YTYzMGZlZDI1YmYxMDk1MjBlNGQ2OWZhODhjLi4wMTQ0NmFiMDg4MmIwMzU5MDQ3Y2RlYWUxYzM1
NzM5MTcwMjQ0NDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC00Miw0
OSArNDIsMTggQEAgY2xhc3MgUmVuZGVyU2Nyb2xsYmFyOwogY2xhc3MgUmVuZGVyU3R5bGU7CiAK
IGNsYXNzIFNlbGVjdG9yQ2hlY2tlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VsZWN0
b3JDaGVja2VyKTsKIHB1YmxpYzoKICAgICBlbnVtIE1hdGNoIHsgU2VsZWN0b3JNYXRjaGVzLCBT
ZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzLCBTZWxlY3RvckZh
aWxzQ29tcGxldGVseSB9OwogICAgIGVudW0gVmlzaXRlZE1hdGNoVHlwZSB7IFZpc2l0ZWRNYXRj
aERpc2FibGVkLCBWaXNpdGVkTWF0Y2hFbmFibGVkIH07CiAgICAgZW51bSBNb2RlIHsgUmVzb2x2
aW5nU3R5bGUgPSAwLCBDb2xsZWN0aW5nUnVsZXMsIFF1ZXJ5aW5nUnVsZXMsIFNoYXJpbmdSdWxl
cyB9OwotICAgIGV4cGxpY2l0IFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCosIE1vZGUpOwogICAg
IGVudW0gQmVoYXZpb3JBdEJvdW5kYXJ5IHsgRG9lc05vdENyb3NzQm91bmRhcnksIENyb3NzZXNC
b3VuZGFyeSB9OwogCi0gICAgc3RydWN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHsKLSAgICAg
ICAgLy8gSW5pdGlhbCBzZWxlY3RvciBjb25zdHJ1Y3RvcgotICAgICAgICBTZWxlY3RvckNoZWNr
aW5nQ29udGV4dChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQs
IFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkKLSAgICAgICAgICAgIDogc2VsZWN0
b3Ioc2VsZWN0b3IpCi0gICAgICAgICAgICAsIGVsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgICAg
ICwgc2NvcGUoMCkKLSAgICAgICAgICAgICwgdmlzaXRlZE1hdGNoVHlwZSh2aXNpdGVkTWF0Y2hU
eXBlKQotICAgICAgICAgICAgLCBwc2V1ZG9JZChOT1BTRVVETykKLSAgICAgICAgICAgICwgZWxl
bWVudFN0eWxlKDApCi0gICAgICAgICAgICAsIHNjcm9sbGJhcigwKQotICAgICAgICAgICAgLCBz
Y3JvbGxiYXJQYXJ0KE5vUGFydCkKLSAgICAgICAgICAgICwgaXNTdWJTZWxlY3RvcihmYWxzZSkK
LSAgICAgICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRvKGZhbHNlKQotICAgICAgICAgICAgLCBo
YXNTZWxlY3Rpb25Qc2V1ZG8oZmFsc2UpCi0gICAgICAgICAgICAsIGJlaGF2aW9yQXRCb3VuZGFy
eShEb2VzTm90Q3Jvc3NCb3VuZGFyeSkKLSAgICAgICAgeyB9Ci0KLSAgICAgICAgY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yOwotICAgICAgICBFbGVtZW50KiBlbGVtZW50OwotICAgICAgICBj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZTsKLSAgICAgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNp
dGVkTWF0Y2hUeXBlOwotICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZDsKLSAgICAgICAgUmVuZGVy
U3R5bGUqIGVsZW1lbnRTdHlsZTsKLSAgICAgICAgUmVuZGVyU2Nyb2xsYmFyKiBzY3JvbGxiYXI7
Ci0gICAgICAgIFNjcm9sbGJhclBhcnQgc2Nyb2xsYmFyUGFydDsKLSAgICAgICAgYm9vbCBpc1N1
YlNlbGVjdG9yOwotICAgICAgICBib29sIGhhc1Njcm9sbGJhclBzZXVkbzsKLSAgICAgICAgYm9v
bCBoYXNTZWxlY3Rpb25Qc2V1ZG87Ci0gICAgICAgIEJlaGF2aW9yQXRCb3VuZGFyeSBiZWhhdmlv
ckF0Qm91bmRhcnk7Ci0gICAgfTsKKyAgICBTZWxlY3RvckNoZWNrZXIoY29uc3QgQ1NTU2VsZWN0
b3IqLCBFbGVtZW50KiwgTW9kZSwgVmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaERpc2Fi
bGVkLCBSZW5kZXJTdHlsZSogPSAwLCBjb25zdCBDb250YWluZXJOb2RlKiA9IDAsIFBzZXVkb0lk
ID0gTk9QU0VVRE8sIFJlbmRlclNjcm9sbGJhciogPSAwLCBTY3JvbGxiYXJQYXJ0ID0gTm9QYXJ0
LCBCZWhhdmlvckF0Qm91bmRhcnkgPSBEb2VzTm90Q3Jvc3NCb3VuZGFyeSk7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k+Ci0gICAgTWF0Y2ggbWF0Y2go
Y29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGNvbnN0IFNpYmxpbmdU
cmF2ZXJzYWxTdHJhdGVneSYpIGNvbnN0OworICAgIE1hdGNoIG1hdGNoKFBzZXVkb0lkJiwgY29u
c3QgU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5JikgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5PgotICAgIGJvb2wgY2hlY2tPbmUoY29uc3QgU2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQmLCBjb25zdCBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kmKSBj
b25zdDsKKyAgICBib29sIGNoZWNrT25lKGNvbnN0IFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSYp
IGNvbnN0OwogCiAgICAgYm9vbCBzdHJpY3RQYXJzaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJp
Y3RQYXJzaW5nOyB9CiAKQEAgLTk5LDEzICs2OCwyNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHVu
c2lnbmVkIGRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqKTsKIAogcHJp
dmF0ZToKLSAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoY29uc3QgU2VsZWN0b3JD
aGVja2luZ0NvbnRleHQmLCBEb2N1bWVudCosIGNvbnN0IENTU1NlbGVjdG9yKikgY29uc3Q7Cisg
ICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKERvY3VtZW50KiwgY29uc3QgQ1NTU2Vs
ZWN0b3IqKSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIGlzRnJhbWVGb2N1c2VkKGNvbnN0IEVs
ZW1lbnQqKTsKIAogICAgIGJvb2wgbV9zdHJpY3RQYXJzaW5nOwogICAgIGJvb2wgbV9kb2N1bWVu
dElzSFRNTDsKICAgICBNb2RlIG1fbW9kZTsKKworICAgIGNvbnN0IENTU1NlbGVjdG9yKiBtX3Nl
bGVjdG9yOworICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBjb25zdCBDb250YWluZXJOb2Rl
KiBtX3Njb3BlOworICAgIFZpc2l0ZWRNYXRjaFR5cGUgbV92aXNpdGVkTWF0Y2hUeXBlOworICAg
IFBzZXVkb0lkIG1fcHNldWRvSWQ7CisgICAgUmVuZGVyU3R5bGUqIG1fZWxlbWVudFN0eWxlOwor
ICAgIFJlbmRlclNjcm9sbGJhciogbV9zY3JvbGxiYXI7CisgICAgU2Nyb2xsYmFyUGFydCBtX3Nj
cm9sbGJhclBhcnQ7CisgICAgYm9vbCBtX2lzU3ViU2VsZWN0b3I7CisgICAgYm9vbCBtX2hhc1Nj
cm9sbGJhclBzZXVkbzsKKyAgICBib29sIG1faGFzU2VsZWN0aW9uUHNldWRvOworICAgIEJlaGF2
aW9yQXRCb3VuZGFyeSBtX2JlaGF2aW9yQXRCb3VuZGFyeTsKIH07CiAKIGlubGluZSBib29sIFNl
bGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA2ZTcz
OWEzODU5ODlmNDdjYWZhZmE4ODgzNzY3NzY0ZmY3YzliZDJlLi4wNzUxM2NhNGU3NWQ1MDUyMzNj
MDRmYjg1NGQ2MzBlNjhmMmNkMjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CkBAIC0yMTE1LDE1ICsyMTE1LDggQEAgaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6cnVsZU1h
dGNoZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBDb250YWluZXIKICAgICB9CiAK
ICAgICAvLyBTbG93IHBhdGguCi0gICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihk
b2N1bWVudCgpLCBzdGF0ZS5tb2RlKCkpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JD
aGVja2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0YS5zZWxlY3RvcigpLCBzdGF0ZS5lbGVtZW50
KCksIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCk7Ci0gICAgY29udGV4dC5l
bGVtZW50U3R5bGUgPSBzdGF0ZS5zdHlsZSgpOwotICAgIGNvbnRleHQuc2NvcGUgPSBzY29wZTsK
LSAgICBjb250ZXh0LnBzZXVkb0lkID0gc3RhdGUucHNldWRvU3R5bGVSZXF1ZXN0KCkucHNldWRv
SWQ7Ci0gICAgY29udGV4dC5zY3JvbGxiYXIgPSBzdGF0ZS5wc2V1ZG9TdHlsZVJlcXVlc3QoKS5z
Y3JvbGxiYXI7Ci0gICAgY29udGV4dC5zY3JvbGxiYXJQYXJ0ID0gc3RhdGUucHNldWRvU3R5bGVS
ZXF1ZXN0KCkuc2Nyb2xsYmFyUGFydDsKLSAgICBjb250ZXh0LmJlaGF2aW9yQXRCb3VuZGFyeSA9
IGJlaGF2aW9yQXRCb3VuZGFyeTsKLSAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0g
c2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdU
cmF2ZXJzYWxTdHJhdGVneSgpKTsKKyAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2Vy
KHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQoKSwgc3RhdGUubW9kZSgpLCBTZWxl
Y3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQsIHN0YXRlLnN0eWxlKCksIHNjb3BlLCBz
dGF0ZS5wc2V1ZG9TdHlsZVJlcXVlc3QoKS5wc2V1ZG9JZCwgc3RhdGUucHNldWRvU3R5bGVSZXF1
ZXN0KCkuc2Nyb2xsYmFyLCBzdGF0ZS5wc2V1ZG9TdHlsZVJlcXVlc3QoKS5zY3JvbGxiYXJQYXJ0
LCBiZWhhdmlvckF0Qm91bmRhcnkpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggbWF0Y2gg
PSBzZWxlY3RvckNoZWNrZXIubWF0Y2goZHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNh
bFN0cmF0ZWd5KCkpOwogICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
TWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHls
ZVJlcXVlc3QoKS5wc2V1ZG9JZCAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZVJlcXVl
c3QoKS5wc2V1ZG9JZCAhPSBkeW5hbWljUHNldWRvKQpAQCAtMjEzNiwxMSArMjEyOSwxMCBAQCBi
b29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3Iq
IHJlZ2lvblNlbGVjdG9yLCBFbGVtZQogICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwgIXJlZ2lv
bkVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNlbGVjdG9yQ2hlY2tlciBz
ZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQoKSwgbV9zdGF0ZS5tb2RlKCkpOwogICAgIGZvciAoY29u
c3QgQ1NTU2VsZWN0b3IqIHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1NlbGVjdG9yTGlz
dDo6bmV4dChzKSkgewotICAgICAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHMsIHJlZ2lvbkVsZW1lbnQsIFNlbGVjdG9y
Q2hlY2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpOworICAgICAgICBTZWxlY3RvckNoZWNrZXIg
c2VsZWN0b3JDaGVja2VyKHMsIHJlZ2lvbkVsZW1lbnQsIG1fc3RhdGUubW9kZSgpKTsKICAgICAg
ICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgICAgICBpZiAo
c2VsZWN0b3JDaGVja2VyLm1hdGNoKHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LCBpZ25vcmVEeW5h
bWljUHNldWRvLCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3koKSkgPT0gU2VsZWN0b3JDaGVj
a2VyOjpTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIubWF0Y2go
aWdub3JlRHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpID09IFNl
bGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKaW5kZXggMzZkZDk3Nzhk
YTVjZTYzODg1OGNhZTJjOWJiNjY5M2IwY2NjOWI0Yi4uYTNkM2Y2MDZlNGMzYjVmNGExZDM1YmIw
OTlhNmE5YWU2NjYzYjk2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9y
UXVlcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcApAQCAt
NTksMTkgKzU5LDE4IEBAIGlubGluZSBib29sIFNlbGVjdG9yRGF0YUxpc3Q6OnNlbGVjdG9yTWF0
Y2hlcyhjb25zdCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0YSwKICAgICAgICAgcmV0dXJuIHNl
bGVjdG9yQ2hlY2tlckZhc3RQYXRoLm1hdGNoZXMoKTsKICAgICB9CiAKLSAgICBTZWxlY3RvckNo
ZWNrZXIgc2VsZWN0b3JDaGVja2VyKGVsZW1lbnQtPmRvY3VtZW50KCksIFNlbGVjdG9yQ2hlY2tl
cjo6UXVlcnlpbmdSdWxlcyk7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5n
Q29udGV4dCBzZWxlY3RvckNoZWNraW5nQ29udGV4dChzZWxlY3RvckRhdGEuc2VsZWN0b3IsIGVs
ZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpOworICAgIFNlbGVj
dG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoc2VsZWN0b3JEYXRhLnNlbGVjdG9yLCBlbGVtZW50
LCBTZWxlY3RvckNoZWNrZXI6OlF1ZXJ5aW5nUnVsZXMpOwogICAgIFBzZXVkb0lkIGlnbm9yZUR5
bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICByZXR1cm4gc2VsZWN0b3JDaGVja2VyLm1hdGNo
KHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBET01TaWJsaW5n
VHJhdmVyc2FsU3RyYXRlZ3koKSkgPT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXM7
CisgICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChpZ25vcmVEeW5hbWljUHNldWRvLCBE
T01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3koKSkgPT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ck1hdGNoZXM7CiB9CiAKLWJvb2wgU2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyhFbGVtZW50KiB0
YXJnZXRFbGVtZW50KSBjb25zdAorYm9vbCBTZWxlY3RvckRhdGFMaXN0OjptYXRjaGVzKEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOworICAgIEFT
U0VSVChlbGVtZW50KTsKIAogICAgIHVuc2lnbmVkIHNlbGVjdG9yQ291bnQgPSBtX3NlbGVjdG9y
cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlbGVjdG9yQ291bnQ7ICsr
aSkgewotICAgICAgICBpZiAoc2VsZWN0b3JNYXRjaGVzKG1fc2VsZWN0b3JzW2ldLCB0YXJnZXRF
bGVtZW50KSkKKyAgICAgICAgaWYgKHNlbGVjdG9yTWF0Y2hlcyhtX3NlbGVjdG9yc1tpXSwgZWxl
bWVudCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcAppbmRleCAyYjcx
YjA5MDgxMDljYTFmZDIzNmE4NzMyZWM1Mzc1YjA0OWE3MGY2Li43YmRhMWY2MmFiYjMyYzg3ZmIz
OWEzNmE3ODQ2OGMwYjE2MzM1YjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCkBAIC0zOCwxMSArMzgsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogYm9vbCBDb250ZW50U2VsZWN0b3JEYXRhTGlzdDo6Y2hlY2tDb250ZW50
U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBWZWN0b3I8UmVmUHRy
PE5vZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRoKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0
b0VsZW1lbnQoc2libGluZ3NbbnRoXS5nZXQoKSk7Ci0gICAgU2VsZWN0b3JDaGVja2VyIHNlbGVj
dG9yQ2hlY2tlcihlbGVtZW50LT5kb2N1bWVudCgpLCBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3Rp
bmdSdWxlcyk7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBj
b250ZXh0KHNlbGVjdG9yLCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVu
YWJsZWQpOworICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoc2VsZWN0b3IsIGVs
ZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzLCBTZWxlY3RvckNoZWNrZXI6
OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOwogICAgIFNoYWRvd0RPTVNpYmxpbmdUcmF2ZXJzYWxTdHJh
dGVneSBzdHJhdGVneShzaWJsaW5ncywgbnRoKTsKICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWlj
UHNldWRvID0gTk9QU0VVRE87Ci0gICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChjb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBzdHJhdGVneSkgPT0gU2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3Rvck1hdGNoZXM7CisgICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChpZ25vcmVE
eW5hbWljUHNldWRvLCBzdHJhdGVneSkgPT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNo
ZXM7CiB9CiAKIHZvaWQgQ29udGVudFNlbGVjdG9yRGF0YUxpc3Q6OmluaXRpYWxpemUoY29uc3Qg
Q1NTU2VsZWN0b3JMaXN0JiBzZWxlY3RvcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaAppbmRleCBiY2VlOWJkZDE1ZmY3YWZhYThlNDU1
NmM0NTc4MjEzNWNmNWE3OTJlLi41YjM1NTJkNWY0ZjMxODU5MzI5YjlhOTA1ZDg1NzM2ZTg3YjUx
MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0
b3JRdWVyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3Rv
clF1ZXJ5LmgKQEAgLTMyLDcgKzMyLDYgQEAKICNkZWZpbmUgQ29udGVudFNlbGVjdG9yUXVlcnlf
aAogCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCi0jaW5jbHVkZSAiU2VsZWN0b3JDaGVj
a2VyLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JRdWVyeS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgo=
</data>
<flag name="commit-queue"
          id="211987"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>