<?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>208097</bug_id>
          
          <creation_ts>2020-02-22 17:03:53 -0800</creation_ts>
          <short_desc>Use DOM element iterators more, and more consistently</short_desc>
          <delta_ts>2020-02-24 16:48:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>207816</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>allan.jensen</cc>
    
    <cc>andersca</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>joepeck</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1621917</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-22 17:03:53 -0800</bug_when>
    <thetext>Use DOM element iterators more, and more consistently</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621923</commentid>
    <comment_count>1</comment_count>
      <attachid>391471</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-22 17:24:03 -0800</bug_when>
    <thetext>Created attachment 391471
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621924</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-22 17:25:44 -0800</bug_when>
    <thetext>Antti already reviewed this as part of the patch in bug 207816. The changes are in response to comments he made in that review, and of course this is also a subset of that patch as suggested.

Uploading for EWS analysis, and also another round of review would be OK although maybe not necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621938</commentid>
    <comment_count>3</comment_count>
      <attachid>391472</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-22 18:07:28 -0800</bug_when>
    <thetext>Created attachment 391472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621942</commentid>
    <comment_count>4</comment_count>
      <attachid>391472</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2020-02-22 19:17:05 -0800</bug_when>
    <thetext>Comment on attachment 391472
Patch

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

&gt; Source/WebCore/html/HTMLOptionElement.cpp:169
&gt; +        for (auto&amp; dataList : ancestorsOfType&lt;HTMLDataListElement&gt;(*this))

Is this a functionality change? Will this end up calling optionElementChildrenChanged on all the HTMLDataList ancestors now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621943</commentid>
    <comment_count>5</comment_count>
      <attachid>391472</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-22 20:54:02 -0800</bug_when>
    <thetext>Comment on attachment 391472
Patch

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

&gt;&gt; Source/WebCore/html/HTMLOptionElement.cpp:169
&gt;&gt; +        for (auto&amp; dataList : ancestorsOfType&lt;HTMLDataListElement&gt;(*this))
&gt; 
&gt; Is this a functionality change? Will this end up calling optionElementChildrenChanged on all the HTMLDataList ancestors now?

Yes.

What the specification says is &quot;each option element that is a descendant of the datalist element, that is not disabled, and whose value is a string that isn&apos;t the empty string, represents a suggestion&quot;. Nothing excluding elements that happen to be inside another datalist that is itself a descendant of the datalist element.

Thus even options inside a nested HTMLDataListElement should appear also as suggestions, when the datalist element is used, and also should appear in HTMLDataListElement.options because of a different sentence in the specification. Our code properly iterates all suggestions and doesn’t skip subtrees that themselves happen to be rooted in a nested datalist. But this change notification mechanism notified only a single enclosing HTMLDataListElement. This is insufficient.

This led me to a few thoughts:

1) It might be helpful if the specification made this explicit, perhaps with a non-normative example of proper behavior when there is a nested datalist.

2) I could, and probably should, construct a test to show a case where the old code did not properly dynamically update something when multiple datalist elements are nested inside one another.

3) I found and fixed this error in HTMLOptionElement::parseAttribute and HTMLOptionElement::childrenChanged, and preserved the behavior in WebAutomationSessionProxy, because there it does seem to be what is intended, and that code is about how WebDriver works, not how the actual datalist element works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621944</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-22 20:56:11 -0800</bug_when>
    <thetext>Committed r257188: &lt;https://trac.webkit.org/changeset/257188&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621945</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-22 20:57:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/59703408&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621976</commentid>
    <comment_count>8</comment_count>
      <attachid>391472</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-02-23 02:19:27 -0800</bug_when>
    <thetext>Comment on attachment 391472
Patch

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

&gt; Source/WebCore/editing/Editor.cpp:3438
&gt; +    // FIXME: Not clear it&apos;s valuable to do this to all body elements rather than just doing it on the single one returned by Document::body.
&gt; +    Vector&lt;Ref&lt;HTMLBodyElement&gt;&gt; bodies;
&gt; +    for (auto&amp; body : descendantsOfType&lt;HTMLBodyElement&gt;(document()))
&gt; +        bodies.append(body);

I suspect this could at least be limited to the children of the documentElement(), avoiding full document crawl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621977</commentid>
    <comment_count>9</comment_count>
      <attachid>391472</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-02-23 02:23:12 -0800</bug_when>
    <thetext>Comment on attachment 391472
Patch

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

&gt;&gt; Source/WebCore/editing/Editor.cpp:3438
&gt;&gt; +    // FIXME: Not clear it&apos;s valuable to do this to all body elements rather than just doing it on the single one returned by Document::body.
&gt;&gt; +    Vector&lt;Ref&lt;HTMLBodyElement&gt;&gt; bodies;
&gt;&gt; +    for (auto&amp; body : descendantsOfType&lt;HTMLBodyElement&gt;(document()))
&gt;&gt; +        bodies.append(body);
&gt; 
&gt; I suspect this could at least be limited to the children of the documentElement(), avoiding full document crawl.

Note that there is a cache for getElementsByTagName so the new code is potentially much slower than the old.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622031</commentid>
    <comment_count>10</comment_count>
      <attachid>391472</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-23 14:43:18 -0800</bug_when>
    <thetext>Comment on attachment 391472
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/Editor.cpp:3438
&gt;&gt;&gt; +        bodies.append(body);
&gt;&gt; 
&gt;&gt; I suspect this could at least be limited to the children of the documentElement(), avoiding full document crawl.
&gt; 
&gt; Note that there is a cache for getElementsByTagName so the new code is potentially much slower than the old.

Both good points.

This is only called when the API editable property is set on a legacy WebView or when the SPI _editable property is set on a WKWebView. And also for legacy WebKit it’s called once for each newly loaded page after it is loaded in a WebView that has the editable property. We never implemented that second feature in WKWebView; I think that means in practice that clients don’t expect to be able to navigate to new pages and edit them using the editable property.

Iterating the entire document once is probably still affordable for those cases. I don’t think the caching was protecting us from the cost, before: unlikely anyone had called getElementsByTagName(&quot;body&quot;) by the time this is called, nor any reason to think that&apos;s a typical thing to do afterward.

But also, given how it’s used I think we could take the risk of changing this to only do the work on the actual body element. Or just the children of the document element as you suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622073</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-02-24 01:04:36 -0800</bug_when>
    <thetext>Really, it is probably fine to limit this and similar things to body(). The parser doesn&apos;t generate additional &lt;body&gt; elements and there is no reason for anyone to construct them explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622413</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-24 16:48:49 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #11)
&gt; Really, it is probably fine to limit this and similar things to body(). The
&gt; parser doesn&apos;t generate additional &lt;body&gt; elements and there is no reason
&gt; for anyone to construct them explicitly.

I’ll do it.

Seems like there is a tiny risk that this breaks someone doing something crazy in an app, perhaps by accident.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391471</attachid>
            <date>2020-02-22 17:24:03 -0800</date>
            <delta_ts>2020-02-22 18:07:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208097-20200222172403.patch</filename>
            <type>text/plain</type>
            <size>79312</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGNhYzE5YjdjYzYxNTA5
NzVmMDQ4YmE2YTg5NTJlZTg0ZmU4N2Q2OC4uZTEyODAyM2ZjMWY1ZDUwYmVjMGJmOTJkNTU1MjY3
MTJhZWQwMzVhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NyBAQAorMjAyMC0wMi0yMiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIERPTSBlbGVtZW50IGl0
ZXJhdG9ycyBtb3JlLCBhbmQgbW9yZSBjb25zaXN0ZW50bHkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODA5NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gQWRkZWQgdXNlcyBvZiBlbGVtZW50IGl0ZXJh
dG9ycyBpbiBtYW55IHBsYWNlcyB0aGF0IGhhZCBoYW5kLXdyaXR0ZW4gbG9vcHMuCisgICAgICAg
IC0gRWxpbWluYXRlZCBtb3N0IHVzZXMgb2YgZWxlbWVudEFuY2VzdG9ycywgZWxlbWVudENoaWxk
cmVuLCBlbGVtZW50RGVzY2VuZGFudHMsCisgICAgICAgICAgYW5kIGVsZW1lbnRMaW5lYWdlIGZ1
bmN0aW9ucyBhbmQgdXNlIGFuY2VzdG9yc09mVHlwZTxFbGVtZW50PiwKKyAgICAgICAgICBjaGls
ZHJlbk9mVHlwZTxFbGVtZW50PiwgZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4gYW5kIGxpbmVh
Z2VPZlR5cGU8RWxlbWVudD4KKyAgICAgICAgICBpbnN0ZWFkLiBJbiBwYXJ0aWN1bGFyLCBkZXNj
ZW5kYW50c09mVHlwZTxFbGVtZW50PiB1c2VzIGEgYmV0dGVyIHRyYXZlcnNhbAorICAgICAgICAg
IGFsZ29yaXRobSB0aGFuIGVsZW1lbnREZXNjZW5kYW50cyBkb2VzLgorCisgICAgICAgIC0gVW5y
ZWxhdGVkOiBPbWl0IHRlbXBsYXRlIGFyZ3VtZW50cyBpbiB2YXJpb3VzIGNhc2VzIHdoZXJlIHRo
ZSBDKysgbGFuZ3VhZ2UgbGV0cworICAgICAgICAgIHVzIGp1c3QgZ2l2ZSB0aGUgbmFtZSBvZiB0
aGUgY2xhc3MgdGVtcGxhdGUgd2l0aG91dCByZXBlYXRpbmcgdGhlIGFyZ3VtZW50cy4KKyAgICAg
ICAgLSBVbnJlbGF0ZWQ6IFJlbW92ZSBzb21lIHVzZXMgb2YgdGhlIGluZWZmaWNpZW50IE5vZGU6
Om5vZGVUeXBlIGZ1bmN0aW9uLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6bW91c2VCdXR0b25MaXN0ZW5lciBjb25zdCk6IFVzZQorICAgICAgICBsaW5lYWdlT2ZU
eXBlIGluc3RlYWQgb2YgZWxlbWVudExpbmVhZ2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdCBjb25zdCk6
CisgICAgICAgIFVzZSBhbmNlc3RvcnNPZlR5cGUgaW5zdGVhZCBvZiBhIGhhbmR3cml0dGVuIGxv
b3AuCisKKyAgICAgICAgKiBkb20vQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9uLmg6CisgICAgICAg
IChXZWJDb3JlOjpBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb246OkFsbERlc2NlbmRhbnRzQ29sbGVj
dGlvbik6IFJlbW92ZWQKKyAgICAgICAgY2xhc3MgdGVtcGxhdGUgYXJndW1lbnRzLgorICAgICAg
ICAqIGRvbS9DbGFzc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNsYXNzQ29sbGVj
dGlvbjo6Q2xhc3NDb2xsZWN0aW9uKTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnRG
cmFnbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50OjpnZXRFbGVt
ZW50QnlJZCBjb25zdCk6IFVzZQorICAgICAgICBkZXNjZW5kYW50c09mVHlwZSBpbnN0ZWFkb2Yg
ZWxlbWVudERlc2NlbmRhbnRzLgorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlIGNvbnN0KTogVXNl
IGxpbmVhZ2VPZlR5cGUKKyAgICAgICAgaW5zdGVhZCBvZiBhIGhhbmRyd2l0dGVuIGxvb3AuCisK
KyAgICAgICAgKiBkb20vU2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckRhdGFMaXN0OjpjbG9zZXN0IGNvbnN0KTogVXNlIGxpbmVhZ2VPZlR5cGUgaW5zdGVhZCBv
ZiBhbgorICAgICAgICBleHBsaWNpdCBsb29wLgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudHNG
b3JMb2NhbE5hbWUpOiBVc2UgZGVzY2VuZGFudHNPZlR5cGUgaW5zdGVhZCBvZiBlbGVtZW50RGVz
Y2VuZGFudHMuCisgICAgICAgIChXZWJDb3JlOjphbnlFbGVtZW50KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlU2luZ2xlVGFnTmFtZVNlbGVjdG9y
RGF0YSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6
ZXhlY3V0ZVNpbmdsZUNsYXNzTmFtZVNlbGVjdG9yRGF0YSBjb25zdCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZVNpbmdsZVNlbGVjdG9yRGF0YSBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0
ZVNpbmdsZU11bHRpU2VsZWN0b3JEYXRhIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXIg
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1
dGVDb21waWxlZFNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNp
bmdsZU11bHRpU2VsZWN0b3JEYXRhIGNvbnN0KTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vVGFn
Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUYWdDb2xsZWN0aW9uTlM6OlRhZ0Nv
bGxlY3Rpb25OUyk6IFJlbW92ZWQgY2xhc3MgdGVtcGxhdGUgYXJndW1lbnRzLgorICAgICAgICAo
V2ViQ29yZTo6VGFnQ29sbGVjdGlvbjo6VGFnQ29sbGVjdGlvbik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRhZ0NvbGxlY3Rpb246OkhUTUxUYWdDb2xsZWN0aW9uKTogRGl0dG8uCisK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCBjb25zdCk6IFVzZSB0aGUgZnVuY3Rpb24K
KyAgICAgICAgZGVzY2VuZGFudHNPZlR5cGU8SFRNTEJvZHlFbGVtZW50PiBpbnN0ZWFkIG9mIGdl
dEVsZW1lbnRCeVRhZ05hbWUoYm9keVRhZykuCisgICAgICAgIEFsc28gbWVyZ2VkIGFwcGx5RWRp
dGluZ1N0eWxlVG9FbGVtZW50IGluIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFw
cGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50IGNvbnN0KTogRGVsZXRlZC4KKworICAgICAgICAqIGVk
aXRpbmcvRWRpdG9yLmg6IERlbGV0ZWQgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQuCisKKyAg
ICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNj
YW5Gb3JGb3JtKTogQ2xlYW5lZCB1cCBkZXNjZW5kYW50c09mVHlwZSBsb29wIHNvIHRoZXJlJ3Mg
bm8KKyAgICAgICAgZXhwbGljaXQgdXNlIG9mIGVuZC4gQWxzbyBjaGFuZ2VkIGlmIG5lc3Rpbmcg
YSBsaXR0bGUgYml0LgorCisgICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25SdWxlTWF0Y2hlcjo6aXNFeGNs
dWRlZCk6IFVzZSBsaW5lYWdlT2ZUeXBlIGluc3RlYWQgb2YKKyAgICAgICAgZWxlbWVudExpbmVh
Z2UuCisKKyAgICAgICAgKiBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmg6IFJlbW92ZWQgY2xhc3Mg
dGVtcGxhdGUgYXJndW1lbnRzLgorCisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjplbGVtZW50QWZmZWN0c0RpcmVjdGlvbmFsaXR5KTogUmVmYWN0b3Jl
ZCBzbyB3ZSBnZXQgYSBtb3JlIGVmZmljaWVudAorICAgICAgICBpbXBsZW1lbnRhdGlvbiB3aGVu
IHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50IGlzIGtub3duLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIFVzZSBsaW5lYWdlT2ZUeXBlIGluc3RlYWQgb2YgZWxlbWVudExp
bmVhZ2UuCisKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50Lmg6IFJlbW92ZWQgc29tZSB1bmVl
ZWRlZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kV2lkZ2V0UmVuZGVyZXIpOiBVc2UgYW5j
ZXN0b3JzT2ZUeXBlIGluc3RlYWQgb2YgYSBsb29wLgorCisgICAgICAgICogaHRtbC9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OmNvbXB1dGVXaWxsVmFsaWRhdGUgY29uc3QpOiBVc2UKKyAgICAgICAgYW5jZXN0b3Jz
T2ZUeXBlIGluc3RlYWQgb2YgYSBsb29wLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250
cm9sRWxlbWVudDo6ZW5jbG9zaW5nRm9ybUNvbnRyb2xFbGVtZW50KTogRGVsZXRlZC4KKworICAg
ICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oOiBEZWxldGVkIHVudXNlZCBlbmNs
b3NpbmdGb3JtQ29udHJvbEVsZW1lbnQuCisKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbHNDb2xs
ZWN0aW9uOjpIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbik6IFJlbW92ZWQKKyAgICAgICAgY2xh
c3MgdGVtcGxhdGUgYXJndW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb246Om93bmVyTm9kZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OmludmFsaWRhdGVDYWNoZUZvckRvY3VtZW50KTog
RGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudDo6b3duZXJTZWxlY3RFbGVtZW50IGNvbnN0
KTogVXNlIGFuY2VzdG9yc09mVHlwZQorICAgICAgICBpbnN0ZWFkIG9mIGEgaGFuZC13cml0dGVu
IGxvb3AuCisKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6IFVzZSBhbmNlc3Rv
cnNPZlR5cGUgaW5zdGVhZCBvZgorICAgICAgICBjYWxsaW5nIG93bmVyRGF0YUxpc3RFbGVtZW50
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyRGF0YUxp
c3RFbGVtZW50IGNvbnN0KTogRGVsZXRlZC4gU2luY2UgdGhlCisgICAgICAgIHNhbWUgb3B0aW9u
IGVsZW1lbnQgY2FuIGJlIHVzZWQgYnkgbXVsdGlwbGUgbmVzdGVkIGRhdGEgbGlzdCBlbGVtZW50
cywgdGhlCisgICAgICAgIGNvbmNlcHQgb2YgYSBzaW5nbGUgIm93bmVyIiBkYXRhIGxpc3QgZWxl
bWVudCBpc24ndCBjb3JyZWN0LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6
Om93bmVyU2VsZWN0RWxlbWVudCBjb25zdCk6IFVzZSBhbmNlc3RvcnNPZlR5cGUKKyAgICAgICAg
aW5zdGVhZCBvZiBhIGhhbmQtd3JpdHRlbiBsb29wLgorCisgICAgICAgICogaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5oOiBEZWxldGVkIG93bmVyRGF0YUxpc3RFbGVtZW50LgorCisgICAgICAgICog
aHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9w
dGlvbnNDb2xsZWN0aW9uOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb24pOiBSZW1vdmVkIGNsYXNzCisg
ICAgICAgIHRlbXBsYXRlIGFyZ3VtZW50cy4KKworICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmFk
ZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSBjb25zdCk6CisgICAgICAgIFVzZSBh
dXRvIHNpbmNlIGZpbmRQYXJlbnRUYWJsZSBub3cgcmV0dXJucyBhIGNvbnN0IHRhYmxlIHBvaW50
ZXIuCisgICAgICAgICogaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQ6OmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSBjb25zdCk6CisgICAgICAgIERpdHRvLgorCisgICAgICAgICogaHRtbC9IVE1MVGFi
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OmNyZWF0
ZVNoYXJlZENlbGxTdHlsZSk6IE1hZGUgY29uc3QuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFi
bGVFbGVtZW50OjphZGRpdGlvbmFsQ2VsbFN0eWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVGFibGVFbGVtZW50OjphZGRpdGlvbmFsR3JvdXBTdHlsZSk6IERpdHRvLgorCisgICAg
ICAgICogaHRtbC9IVE1MVGFibGVFbGVtZW50Lmg6IE1hZGUgdGhlIGZ1bmN0aW9ucyBjb25zdCwg
YW5kIG1fc2hhcmVkQ2VsbFN0eWxlCisgICAgICAgIG11dGFibGUuCisKKyAgICAgICAgKiBodG1s
L0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVBh
cnRFbGVtZW50OjpmaW5kUGFyZW50VGFibGUgY29uc3QpOiBVc2UgYW5jZXN0b3JzT2ZUeXBlCisg
ICAgICAgIGluc3RlYWQgb2YgYSBoYW5kLXdyaXR0ZW4gbG9vcC4gQWxzbyByZXZpc2VkIHJldHVy
biB0eXBlIHRvIGJlIGNvbnN0LWNvbnNpc3RlbnQuCisKKyAgICAgICAgKiBodG1sL0hUTUxUYWJs
ZVBhcnRFbGVtZW50Lmg6IFVwZGF0ZWQgcmV0dXJuIHR5cGUuCisKKyAgICAgICAgKiBodG1sL0hU
TUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJv
d3NDb2xsZWN0aW9uOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbik6IFJlbW92ZWQgY2xhc3MKKyAg
ICAgICAgdGVtcGxhdGUgYXJndW1lbnRzLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJlbnRIVE1MRWxlbWVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
ZGlyZWN0aW9uRm9yRm9ybURhdGEgY29uc3QpOiBVc2UKKyAgICAgICAgbGluZWFnZU9mVHlwZSBy
YXRoZXIgdGhhbiBhIGhhbmQtd3JpdHRlbiBsb29wLiBBbHNvIGdvdCByaWQgb2YgdGhlIG11bHRp
cGxlCisgICAgICAgIHN0cmluZ3MgaW4gcmV0dXJuIHBhdGhzIHNpbmNlIHRoZSBmdW5jdGlvbiBh
bHdheXMgcmV0dXJucyBvbmUgb2YgdHdvIHN0cmluZ3MuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckF1ZGl0QWNjZXNzaWJpbGl0eU9iamVjdDo6Z2V0RWxlbWVudHNCeUNvbXB1dGVk
Um9sZSk6CisgICAgICAgIFVzZSBkZXNjZW5kYW50c09mVHlwZSBpbnN0ZWFkIG9mIGVsZW1lbnRE
ZXNjZW5kYW50cy4KKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRT
dHlsZXNGb3JOb2RlKTogVXNlIGFuY2VzdG9yc09mVHlwZQorICAgICAgICBpbnN0ZWFkIG9mIGEg
aGFuZC13cml0dGVuIGxvb3AuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjppbnNw
ZWN0KTogVXNlIGlzRWxlbWVudE5vZGUgYW5kIGlzRG9jdW1lbnROb2RlCisgICAgICAgIGluc3Rl
YWQgb2YgdGhlIG11Y2ggc2xvd2VyIG5vZGVUeXBlLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE1vdXNlZE92ZXJOb2RlKTogVXNlIGlzVGV4dE5vZGUgaW5z
dGVhZCBvZgorICAgICAgICB0aGUgbXVjaCBzbG93ZXIgbm9kZVR5cGUuCisKKyAgICAgICAgKiBw
YWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5pbmdMaW5r
RWxlbWVudCk6IEFkZGVkLiBVc2VzIGxpbmVhZ2VPZlR5cGUgaW5zdGVhZCBvZiBlbGVtZW50TGlu
ZWFnZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpkb1N5c3RlbURyYWcpOiBV
cGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6dXBkYXRl
TWFza2VkQW5jZXN0b3JTaG91bGRJc29sYXRlQmxlbmRpbmcpOgorICAgICAgICBVc2UgYW5jZXN0
b3JzT2ZUeXBlIGluc3RlYWQgb2YgYSBoYW5kLXdyaXR0ZW4gbG9vcC4KKworICAgICAgICAqIHN2
Zy9TVkdFbGVtZW50Lmg6IE1ha2UgY29tcHV0ZWRTdHlsZSBwdWJsaWMgc28gd2UgY2FuIHVzZSBp
dCBldmVuIGFmdGVyIGRvd25jYXN0aW5nCisgICAgICAgIHRvIFNWR0VsZW1lbnQgb3IgYSBjbGFz
cyBkZXJpdmVkIGZyb20gaXQuIFRoaXMgYXJpc2VzIGluIHRoZSByZXZpc2VkIHZlcnNpb24gb2YK
KyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6dXBkYXRlTWFza2VkQW5jZXN0b3JTaG91bGRJc29s
YXRlQmxlbmRpbmcsIHdoaWNoIHdpbGwgbm93IGJlIGFibGUKKyAgICAgICAgdG8gY29tcGlsZSBh
IG5vbi12aXJ0dWFsIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIGFzIGEgYm9udXMuCisKKyAgICAgICAg
KiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZp
bmRYTUxQYXJzaW5nTmFtZXNwYWNlcyk6IEZhY3RvcmVkIHRoaXMgZnVuY3Rpb24gb3V0IGZyb20K
KyAgICAgICAgcGFyc2VEb2N1bWVudEZyYWdtZW50LiBVc2UgbGluZWFnZU9mVHlwZSBpbnN0ZWFk
IG9mIGVsZW1lbnRMaW5lYWdlLiBBbHNvIGFkZCBhIG51bGwKKyAgICAgICAgY2hlY2sgdGhhdCBz
ZWVtcyB0byBoYXZlIGJlZW4gbmVlZGVkIGJlZm9yZS4KKyAgICAgICAgKFdlYkNvcmU6OlhNTERv
Y3VtZW50UGFyc2VyOjpwYXJzZURvY3VtZW50RnJhZ21lbnQpOiBVc2UgZmluZFhNTFBhcnNpbmdO
YW1lc3BhY2VzLgorCiAyMDIwLTAyLTIyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
IAogICAgICAgICBTb21lIHNtYWxsIGltcHJvdmVtZW50cyB0byBET00gYmluZGluZ3MgZm9yIEhU
TUwgY29sbGVjdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNTYxMDJiY2M4OGNhYjdiMDY4YjRmNGUyYjU5OTJm
MDc3ZGQ0YmUzMC4uMGY5MGYwMDU0NjExNjc4MmMzNWVhYmMyNTE2NmVjZDdkODI5MmU4MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAyMC0wMi0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgVXNlIERPTSBlbGVtZW50IGl0ZXJhdG9ycyBtb3JlLCBhbmQg
bW9yZSBjb25zaXN0ZW50bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwODA5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0Ojpjb250YWluZXJFbGVtZW50Rm9yRWxlbWVudCk6IFVz
ZSBhbmNlc3RvcnNPZlR5cGUgdG8gZmluZCB0aGUKKyAgICAgICAgSFRNTERhdGFMaXN0RWxlbWVu
dCByYXRoZXIgdGhhbiBhbiBvd25lckRhdGFMaXN0RWxlbWVudCBmdW5jdGlvbi4KKyAgICAgICAg
V2hpbGUgdGhpcyBiZWhhdmlvciBpcyBjb3JyZWN0IGFzIHNwZWNpZmllZCwgdGhlIGlkZWEgb2Yg
YW4gIm93bmVyIgorICAgICAgICBkYXRhIGxpc3QgZWxlbWVudCBkb2Vzbid0IG1ha2Ugc2Vuc2Ug
c2luY2UgdGVjaG5pY2FsbHkgdGhlIHNhbWUgb3B0aW9uCisgICAgICAgIGNhbiBiZSB1c2VkIGZv
ciBtdWx0aXBsZSBuZXN0ZWQgZGF0YSBsaXN0cy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjb250YWluc0Fu
eUZvcm1FbGVtZW50cyBjb25zdCk6IFVzZSBjaGlsZHJlbk9mVHlwZQorICAgICAgICBpbnN0ZWFk
IG9mIE5vZGVUcmF2ZXJzYWwuCisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjb250YWluc0Fu
eUZvcm1Db250cm9scyBjb25zdCk6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0Ojpjb250YWluaW5nTGlua0Fu
Y2hvckVsZW1lbnQpOiBSZW5hbWVkIHRvIGFkZCB0aGUgd29yZCAiYW5jaG9yIgorICAgICAgICBz
aW5jZSB0aGlzIHdvbid0IHJldHVybiBsaW5rIGVsZW1lbnRzIHRoYXQgYXJlbid0IEhUTUxBbmNo
b3JFbGVtZW50CisgICAgICAgIGluc3RhbmNlcy4gVXNlIGxpbmVhZ2VPZlR5cGU8SFRNTEFuY2hv
ckVsZW1lbnQ+IGluc3RlYWQgb2YgZWxlbWVudExpbmVhZ2UKKyAgICAgICAgd2l0aCBhIHNlcGFy
YXRlIHR5cGUgY2hlY2suCisgICAgICAgIChXZWJLaXQ6OmVsZW1lbnRQb3NpdGlvbkluZm9ybWF0
aW9uKTogVXBkYXRlZCBmb3IgbmV3IG5hbWUuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBl
cmZvcm1BY3Rpb25PbkVsZW1lbnQpOiBEaXR0by4KKwogMjAyMC0wMi0yMSAgS2F0ZSBDaGVuZXkg
IDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBBcHAtYm91bmQgZG9tYWlu
cyBzaG91bGQgaGF2ZSBzZXBhcmF0ZSBOZXR3b3JrIFNlc3Npb25zCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCmlu
ZGV4IDIwOWViOGU2NThlMGI3MzQxOGVjMmNkMDBjZDgwYTQxNmZhMjkzM2EuLjQ1OGE0MDU3ZTJj
ZmZkMmY2Zjg1Y2U4MDFjYWY5ZDYxZDI4MDI5ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCkBAIC0xMDQ0
LDcgKzEwNDQsNyBAQCBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bW91c2VCdXR0
b25MaXN0ZW5lcihNb3VzZUJ1dHRvbkxpc3RlbmVyUmVzdWx0RgogCiAgICAgLy8gY2hlY2sgaWYg
b3VyIHBhcmVudCBpcyBhIG1vdXNlIGJ1dHRvbiBsaXN0ZW5lcgogICAgIC8vIEZJWE1FOiBEbyB0
aGUgY29udGludWF0aW9uIHNlYXJjaCBsaWtlIGFuY2hvckVsZW1lbnQgZG9lcwotICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IGVsZW1lbnRMaW5lYWdlKGlzPEVsZW1lbnQ+KCpub2RlKSA/IGRvd25j
YXN0PEVsZW1lbnQ+KG5vZGUpIDogbm9kZS0+cGFyZW50RWxlbWVudCgpKSkgeworICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IGxpbmVhZ2VPZlR5cGU8RWxlbWVudD4oaXM8RWxlbWVudD4oKm5vZGUp
ID8gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpIDogKm5vZGUtPnBhcmVudEVsZW1lbnQoKSkpIHsK
ICAgICAgICAgLy8gSWYgd2UndmUgcmVhY2hlZCB0aGUgYm9keSBhbmQgdGhpcyBpcyBub3QgYSBj
b250cm9sIGVsZW1lbnQsIGRvIG5vdCBleHBvc2UgcHJlc3MgYWN0aW9uIGZvciB0aGlzIGVsZW1l
bnQgdW5sZXNzIGZpbHRlciBpcyBJbmNsdWRlQm9keUVsZW1lbnQuCiAgICAgICAgIC8vIEl0IGNh
biBjYXVzZSBmYWxzZSBwb3NpdGl2ZXMsIHdoZXJlIGV2ZXJ5IHBpZWNlIG9mIHRleHQgaXMgbGFi
ZWxlZCBhcyBhY2NlcHRpbmcgcHJlc3MgYWN0aW9ucy4KICAgICAgICAgaWYgKGVsZW1lbnQuaGFz
VGFnTmFtZShib2R5VGFnKSAmJiBpc1N0YXRpY1RleHQoKSAmJiBmaWx0ZXIgPT0gRXhjbHVkZUJv
ZHlFbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggOTZmMzNjYjczNGE3MDgzNjliNGYz
YmEzZDU0ODQ4OGU1MDQ5NTc3MC4uOGE4MzAwZDA5N2UxMGZjNGYzMzAzNzMzNDFjMTE0YTE3MTlh
MzAwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzNzUsMjEgKzIzNzUsMTkgQEAgQVhDb3JlT2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SW1hZ2VNYXBIaXRU
ZXN0KEhUTUxBcmVhRWwKICAgICBpZiAoIWFyZWEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbnVsbHB0cjsKLSAgICBmb3IgKEVs
ZW1lbnQqIG1hcFBhcmVudCA9IGFyZWEtPnBhcmVudEVsZW1lbnQoKTsgbWFwUGFyZW50OyBtYXBQ
YXJlbnQgPSBtYXBQYXJlbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICBpZiAoaXM8SFRN
TE1hcEVsZW1lbnQ+KCptYXBQYXJlbnQpKSB7Ci0gICAgICAgICAgICBwYXJlbnQgPSBhY2Nlc3Np
YmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAoZG93bmNhc3Q8SFRNTE1hcEVsZW1lbnQ+KG1hcFBhcmVu
dCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgYXV0byogbWFw
UGFyZW50ID0gYW5jZXN0b3JzT2ZUeXBlPEhUTUxNYXBFbGVtZW50PigqYXJlYSkuZmlyc3QoKTsK
KyAgICBpZiAoIW1hcFBhcmVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRv
KiBwYXJlbnQgPSBhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAobWFwUGFyZW50KTsKICAg
ICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCisKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGNoaWxkIDogcGFyZW50LT5jaGlsZHJlbigpKSB7CiAgICAgICAgIGlmIChj
aGlsZC0+ZWxlbWVudFJlY3QoKS5jb250YWlucyhwb2ludCkpCiAgICAgICAgICAgICByZXR1cm4g
Y2hpbGQuZ2V0KCk7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9BbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24uaAppbmRleCA4NTcy
YWY1NTA4NjQ5NzU4ZmQwMzdhMzRmZTM5ZjNlMzIzMGE5NTkxLi4xMjBjZjMwY2U5MmU3Njg5MjMy
YzJiMzk2NjA0ZDM0ZTI4YTE4NDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWxs
RGVzY2VuZGFudHNDb2xsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0FsbERlc2Nl
bmRhbnRzQ29sbGVjdGlvbi5oCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVk
OgogICAgIEFsbERlc2NlbmRhbnRzQ29sbGVjdGlvbihDb250YWluZXJOb2RlJiByb290Tm9kZSwg
Q29sbGVjdGlvblR5cGUgdHlwZSkKLSAgICAgICAgOiBDYWNoZWRIVE1MQ29sbGVjdGlvbjxBbGxE
ZXNjZW5kYW50c0NvbGxlY3Rpb24sIENvbGxlY3Rpb25UeXBlVHJhaXRzPEFsbERlc2NlbmRhbnRz
Pjo6dHJhdmVyc2FsVHlwZT4ocm9vdE5vZGUsIHR5cGUpCisgICAgICAgIDogQ2FjaGVkSFRNTENv
bGxlY3Rpb24ocm9vdE5vZGUsIHR5cGUpCiAgICAgeyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2xhc3NDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xh
c3NDb2xsZWN0aW9uLmgKaW5kZXggZWNmN2YzZDIwYzYxNWM0Njg5ODIwZjE5YWE5Y2YzYTg2MzJm
NmJkZC4uYTY3NWQzMDZiZGY3NWYzOGFmOWZmZTg5YTZiNGJlODkyM2ZkNGM0MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzQ29sbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9DbGFzc0NvbGxlY3Rpb24uaApAQCAtNTIsNyArNTIsNyBAQCBwcml2YXRlOgogfTsK
IAogaW5saW5lIENsYXNzQ29sbGVjdGlvbjo6Q2xhc3NDb2xsZWN0aW9uKENvbnRhaW5lck5vZGUm
IHJvb3ROb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9tU3RyaW5nJiBjbGFzc05h
bWVzKQotICAgIDogQ2FjaGVkSFRNTENvbGxlY3Rpb248Q2xhc3NDb2xsZWN0aW9uLCBDb2xsZWN0
aW9uVHlwZVRyYWl0czxCeUNsYXNzPjo6dHJhdmVyc2FsVHlwZT4ocm9vdE5vZGUsIHR5cGUpCisg
ICAgOiBDYWNoZWRIVE1MQ29sbGVjdGlvbihyb290Tm9kZSwgdHlwZSkKICAgICAsIG1fY2xhc3NO
YW1lcyhjbGFzc05hbWVzLCByb290Tm9kZS5kb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKQogICAg
ICwgbV9vcmlnaW5hbENsYXNzTmFtZXMoY2xhc3NOYW1lcykKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudEZyYWdtZW50LmNwcAppbmRleCA4ZjIxYjI3OTM1MDM3NjE5ZWIxMDNiOTRjYzIwYzcy
Y2JiNzExYTE4Li4yYTI1YWIyZTVhYTc2Nzk2NTA4MzcwYWVmYTI5MWU3MmM3YzFjNjc3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRGcmFnbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiRWxlbWVudEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyLmgiCkBAIC0xMDMsNyArMTAzLDcgQEAg
RWxlbWVudCogRG9jdW1lbnRGcmFnbWVudDo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgQXRvbVN0cmlu
ZyYgaWQpIGNvbnN0CiAgICAgICAgIHJldHVybiB0cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChp
ZCk7CiAKICAgICAvLyBPdGhlcndpc2UsIGZhbGwgYmFjayB0byBpdGVyYXRpbmcgYWxsIG9mIHRo
ZSBlbGVtZW50IGRlc2NlbmRhbnRzLgotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRE
ZXNjZW5kYW50cygqdGhpcykpIHsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50
c09mVHlwZTxFbGVtZW50PigqdGhpcykpIHsKICAgICAgICAgaWYgKGVsZW1lbnQuZ2V0SWRBdHRy
aWJ1dGUoKSA9PSBpZCkKICAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEVsZW1lbnQqPigm
ZWxlbWVudCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDYyYTlmYjgwOTUzM2Y2
YjU0ZjE2ZDlhMWY1ZjMyNjlkM2QzMzM1MDQuLmNlMmQ3MWFlY2Q5NjZkODViZWExYTRhNzAzYzYx
MzhmMDQzZDM5OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiAg
ICAgICAgICAgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMjAwNyBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAg
ICAgICAgIChDKSAyMDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgpAQCAtNjAsNyArNjAsNiBAQAogI2luY2x1ZGUgIkdldEFuaW1hdGlvbnNPcHRpb25zLmgiCiAj
aW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1l
bnQuaCIKQEAgLTM0MDEsMjYgKzM0MDAsMTQgQEAgdW5zaWduZWQgRWxlbWVudDo6cmFyZURhdGFD
aGlsZEluZGV4KCkgY29uc3QKIAogQXRvbVN0cmluZyBFbGVtZW50Ojpjb21wdXRlSW5oZXJpdGVk
TGFuZ3VhZ2UoKSBjb25zdAogewotICAgIGlmIChjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERh
dGEgPSB0aGlzLT5lbGVtZW50RGF0YSgpKSB7Ci0gICAgICAgIGlmIChjb25zdCBBdHRyaWJ1dGUq
IGF0dHJpYnV0ZSA9IGVsZW1lbnREYXRhLT5maW5kTGFuZ3VhZ2VBdHRyaWJ1dGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7Ci0gICAgfQotCiAgICAgLy8gVGhlIGxh
bmd1YWdlIHByb3BlcnR5IGlzIGluaGVyaXRlZCwgc28gd2UgaXRlcmF0ZSBvdmVyIHRoZSBwYXJl
bnRzIHRvIGZpbmQgdGhlIGZpcnN0IGxhbmd1YWdlLgotICAgIGNvbnN0IE5vZGUqIGN1cnJlbnRO
b2RlID0gdGhpczsKLSAgICB3aGlsZSAoKGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVu
dE5vZGUoKSkpIHsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpjdXJyZW50Tm9kZSkpIHsKLSAg
ICAgICAgICAgIGlmIChjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERhdGEgPSBkb3duY2FzdDxF
bGVtZW50PigqY3VycmVudE5vZGUpLmVsZW1lbnREYXRhKCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBlbGVtZW50RGF0YS0+ZmluZExhbmd1YWdl
QXR0cmlidXRlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVl
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8RG9jdW1lbnQ+KCpjdXJy
ZW50Tm9kZSkpIHsKLSAgICAgICAgICAgIC8vIGNoZWNraW5nIHRoZSBNSU1FIGNvbnRlbnQtbGFu
Z3VhZ2UKLSAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVudD4oKmN1cnJlbnROb2Rl
KS5jb250ZW50TGFuZ3VhZ2UoKTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaW5lYWdlT2ZU
eXBlPEVsZW1lbnQ+KCp0aGlzKSkgeworICAgICAgICBpZiAoYXV0byogZWxlbWVudERhdGEgPSBl
bGVtZW50LmVsZW1lbnREYXRhKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBhdHRyaWJ1dGUg
PSBlbGVtZW50RGF0YS0+ZmluZExhbmd1YWdlQXR0cmlidXRlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGF0dHJpYnV0ZS0+dmFsdWUoKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVy
biBudWxsQXRvbSgpOworICAgIHJldHVybiBkb2N1bWVudCgpLmNvbnRlbnRMYW5ndWFnZSgpOwog
fQogCiBMb2NhbGUmIEVsZW1lbnQ6OmxvY2FsZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0
b3JRdWVyeS5jcHAKaW5kZXggZWYwNTUyOTM0Mjc3ZDQzYjExOWE0Njc1MWZmNDI4ZTBhMTgwMzc5
MC4uYzA2MWEzZGUyYmM1NTgyNWY5NWNmNzJkNDgwMzNhMWVjZDE5ZDI2ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TZWxlY3RvclF1ZXJ5LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIlNlbGVjdG9yUXVlcnku
aCIKIAogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUgIkVsZW1lbnREZXNjZW5kYW50
SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTdGF0aWNO
b2RlTGlzdC5oIgpAQCAtMTUwLDE1ICsxNTAsMTIgQEAgYm9vbCBTZWxlY3RvckRhdGFMaXN0Ojpt
YXRjaGVzKEVsZW1lbnQmIHRhcmdldEVsZW1lbnQpIGNvbnN0CiAKIEVsZW1lbnQqIFNlbGVjdG9y
RGF0YUxpc3Q6OmNsb3Nlc3QoRWxlbWVudCYgdGFyZ2V0RWxlbWVudCkgY29uc3QKIHsKLSAgICBF
bGVtZW50KiBjdXJyZW50Tm9kZSA9ICZ0YXJnZXRFbGVtZW50OwotICAgIGRvIHsKKyAgICBmb3Ig
KGF1dG8mIGN1cnJlbnRFbGVtZW50IDogbGluZWFnZU9mVHlwZTxFbGVtZW50Pih0YXJnZXRFbGVt
ZW50KSkgewogICAgICAgICBmb3IgKGF1dG8mIHNlbGVjdG9yIDogbV9zZWxlY3RvcnMpIHsKLSAg
ICAgICAgICAgIEVsZW1lbnQqIGNhbmRpZGF0ZUVsZW1lbnQgPSBzZWxlY3RvckNsb3Nlc3Qoc2Vs
ZWN0b3IsICpjdXJyZW50Tm9kZSwgdGFyZ2V0RWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoY2Fu
ZGlkYXRlRWxlbWVudCkKKyAgICAgICAgICAgIGlmIChhdXRvKiBjYW5kaWRhdGVFbGVtZW50ID0g
c2VsZWN0b3JDbG9zZXN0KHNlbGVjdG9yLCBjdXJyZW50RWxlbWVudCwgdGFyZ2V0RWxlbWVudCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUVsZW1lbnQ7CiAgICAgICAgIH0KLSAg
ICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cGFyZW50RWxlbWVudCgpOwotICAgIH0g
d2hpbGUgKGN1cnJlbnROb2RlKTsKKyAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAg
LTI5NSw3ICsyOTIsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0Pgog
c3RhdGljIGlubGluZSB2b2lkIGVsZW1lbnRzRm9yTG9jYWxOYW1lKGNvbnN0IENvbnRhaW5lck5v
ZGUmIHJvb3ROb2RlLCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IEF0b21TdHJp
bmcmIGxvd2VyY2FzZUxvY2FsTmFtZSwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRw
dXRUeXBlJiBvdXRwdXQpCiB7CiAgICAgaWYgKGxvY2FsTmFtZSA9PSBsb3dlcmNhc2VMb2NhbE5h
bWUpIHsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudERlc2NlbmRhbnRzKGNv
bnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHJvb3ROb2RlKSkpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oY29uc3RfY2FzdDxDb250YWlu
ZXJOb2RlJj4ocm9vdE5vZGUpKSkgewogICAgICAgICAgICAgaWYgKGVsZW1lbnQudGFnUU5hbWUo
KS5sb2NhbE5hbWUoKSA9PSBsb2NhbE5hbWUpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvclF1
ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZvckVsZW1lbnQob3V0cHV0LCAmZWxlbWVudCk7CiAgICAg
ICAgICAgICAgICAgaWYgKFNlbGVjdG9yUXVlcnlUcmFpdDo6c2hvdWxkT25seU1hdGNoRmlyc3RF
bGVtZW50KQpAQCAtMzAzLDcgKzMwMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlbGVtZW50c0Zv
ckxvY2FsTmFtZShjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQXRvCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGF1dG8mIGVs
ZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9v
dE5vZGUpKSkgeworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlw
ZTxFbGVtZW50Pihjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihyb290Tm9kZSkpKSB7CiAgICAg
ICAgICAgICBpZiAobG9jYWxOYW1lTWF0Y2hlcyhlbGVtZW50LCBsb2NhbE5hbWUsIGxvd2VyY2Fz
ZUxvY2FsTmFtZSkpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvclF1ZXJ5VHJhaXQ6OmFwcGVu
ZE91dHB1dEZvckVsZW1lbnQob3V0cHV0LCAmZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYg
KFNlbGVjdG9yUXVlcnlUcmFpdDo6c2hvdWxkT25seU1hdGNoRmlyc3RFbGVtZW50KQpAQCAtMzE2
LDcgKzMxMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlbGVtZW50c0ZvckxvY2FsTmFtZShjb25z
dCBDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQXRvCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
U2VsZWN0b3JRdWVyeVRyYWl0Pgogc3RhdGljIGlubGluZSB2b2lkIGFueUVsZW1lbnQoY29uc3Qg
Q29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdDo6T3V0
cHV0VHlwZSYgb3V0cHV0KQogewotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnREZXNj
ZW5kYW50cyhjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihyb290Tm9kZSkpKSB7CisgICAgZm9y
IChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oY29uc3RfY2FzdDxD
b250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkgewogICAgICAgICBTZWxlY3RvclF1ZXJ5VHJhaXQ6
OmFwcGVuZE91dHB1dEZvckVsZW1lbnQob3V0cHV0LCAmZWxlbWVudCk7CiAgICAgICAgIGlmIChT
ZWxlY3RvclF1ZXJ5VHJhaXQ6OnNob3VsZE9ubHlNYXRjaEZpcnN0RWxlbWVudCkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTM0NSw3ICszNDIsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0
b3JEYXRhTGlzdDo6ZXhlY3V0ZVNpbmdsZVRhZ05hbWVTZWxlY3RvckRhdGEoY29uc3QgQ29udAog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRmFsbGJhY2s6IE5hbWVzcGFjZVVS
SSBpcyBzZXQsIHNlbGVjdG9yTG9jYWxOYW1lIG1heSBiZSBzdGFyQXRvbSgpLgotICAgICAgICBm
b3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWlu
ZXJOb2RlJj4ocm9vdE5vZGUpKSkgeworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNj
ZW5kYW50c09mVHlwZTxFbGVtZW50Pihjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihyb290Tm9k
ZSkpKSB7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkoKSA9PSBzZWxlY3Rv
ck5hbWVzcGFjZVVSSSAmJiBsb2NhbE5hbWVNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yTG9jYWxO
YW1lLCBzZWxlY3Rvckxvd2VyY2FzZUxvY2FsTmFtZSkpIHsKICAgICAgICAgICAgICAgICBTZWxl
Y3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZvckVsZW1lbnQob3V0cHV0LCAmZWxlbWVudCk7
CiAgICAgICAgICAgICAgICAgaWYgKFNlbGVjdG9yUXVlcnlUcmFpdDo6c2hvdWxkT25seU1hdGNo
Rmlyc3RFbGVtZW50KQpAQCAtMzYyLDcgKzM1OSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxl
Y3RvckRhdGFMaXN0OjpleGVjdXRlU2luZ2xlQ2xhc3NOYW1lU2VsZWN0b3JEYXRhKGNvbnN0IENv
CiAgICAgQVNTRVJUKGlzU2luZ2xlQ2xhc3NOYW1lU2VsZWN0b3IoKnNlbGVjdG9yRGF0YS5zZWxl
Y3RvcikpOwogCiAgICAgY29uc3QgQXRvbVN0cmluZyYgY2xhc3NOYW1lID0gc2VsZWN0b3JEYXRh
LnNlbGVjdG9yLT52YWx1ZSgpOwotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnREZXNj
ZW5kYW50cyhjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihyb290Tm9kZSkpKSB7CisgICAgZm9y
IChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oY29uc3RfY2FzdDxD
b250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkgewogICAgICAgICBpZiAoZWxlbWVudC5oYXNDbGFz
cygpICYmIGVsZW1lbnQuY2xhc3NOYW1lcygpLmNvbnRhaW5zKGNsYXNzTmFtZSkpIHsKICAgICAg
ICAgICAgIFNlbGVjdG9yUXVlcnlUcmFpdDo6YXBwZW5kT3V0cHV0Rm9yRWxlbWVudChvdXRwdXQs
ICZlbGVtZW50KTsKICAgICAgICAgICAgIGlmIChTZWxlY3RvclF1ZXJ5VHJhaXQ6OnNob3VsZE9u
bHlNYXRjaEZpcnN0RWxlbWVudCkKQEAgLTM3Niw3ICszNzMsNyBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZVNpbmdsZVNlbGVjdG9yRGF0YShjb25zdCBDb250
YWluZXJObwogewogICAgIEFTU0VSVChtX3NlbGVjdG9ycy5zaXplKCkgPT0gMSk7CiAKLSAgICBm
b3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWlu
ZXJOb2RlJj4oc2VhcmNoUm9vdE5vZGUpKSkgeworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRl
c2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHNlYXJj
aFJvb3ROb2RlKSkpIHsKICAgICAgICAgaWYgKHNlbGVjdG9yTWF0Y2hlcyhzZWxlY3RvckRhdGEs
IGVsZW1lbnQsIHJvb3ROb2RlKSkgewogICAgICAgICAgICAgU2VsZWN0b3JRdWVyeVRyYWl0Ojph
cHBlbmRPdXRwdXRGb3JFbGVtZW50KG91dHB1dCwgJmVsZW1lbnQpOwogICAgICAgICAgICAgaWYg
KFNlbGVjdG9yUXVlcnlUcmFpdDo6c2hvdWxkT25seU1hdGNoRmlyc3RFbGVtZW50KQpAQCAtMzg4
LDcgKzM4NSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRl
U2luZ2xlU2VsZWN0b3JEYXRhKGNvbnN0IENvbnRhaW5lck5vCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
U2VsZWN0b3JRdWVyeVRyYWl0PgogQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6
OmV4ZWN1dGVTaW5nbGVNdWx0aVNlbGVjdG9yRGF0YShjb25zdCBDb250YWluZXJOb2RlJiByb290
Tm9kZSwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJiBvdXRwdXQpIGNv
bnN0CiB7Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0
X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHJvb3ROb2RlKSkpIHsKKyAgICBmb3IgKGF1dG8mIGVsZW1l
bnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50Pihjb25zdF9jYXN0PENvbnRhaW5lck5vZGUm
Pihyb290Tm9kZSkpKSB7CiAgICAgICAgIGZvciAoYXV0byYgc2VsZWN0b3IgOiBtX3NlbGVjdG9y
cykgewogICAgICAgICAgICAgaWYgKHNlbGVjdG9yTWF0Y2hlcyhzZWxlY3RvciwgZWxlbWVudCwg
cm9vdE5vZGUpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JRdWVyeVRyYWl0OjphcHBlbmRP
dXRwdXRGb3JFbGVtZW50KG91dHB1dCwgJmVsZW1lbnQpOwpAQCAtNDA0LDcgKzQwMSw3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlU2luZ2xlTXVsdGlTZWxl
Y3RvckRhdGEoY29uc3QgQ29udGFpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRy
YWl0PgogQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxl
ZFNpbXBsZVNlbGVjdG9yQ2hlY2tlcihjb25zdCBDb250YWluZXJOb2RlJiBzZWFyY2hSb290Tm9k
ZSwgU2VsZWN0b3JDb21waWxlcjo6UXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlciBz
ZWxlY3RvckNoZWNrZXIsIHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdDo6T3V0cHV0VHlwZSYg
b3V0cHV0LCBjb25zdCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0YSkgY29uc3QKIHsKLSAgICBm
b3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWlu
ZXJOb2RlJj4oc2VhcmNoUm9vdE5vZGUpKSkgeworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRl
c2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHNlYXJj
aFJvb3ROb2RlKSkpIHsKICAgICAgICAgc2VsZWN0b3JEYXRhLmNvbXBpbGVkU2VsZWN0b3Iud2Fz
VXNlZCgpOwogCiAgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIoJmVsZW1lbnQpKSB7CkBAIC00
MjEsNyArNDE4LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1
dGVDb21waWxlZFNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0MKICAgICBTZWxlY3RvckNoZWNr
ZXI6OkNoZWNraW5nQ29udGV4dCBjaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2Rl
OjpRdWVyeWluZ1J1bGVzKTsKICAgICBjaGVja2luZ0NvbnRleHQuc2NvcGUgPSByb290Tm9kZS5p
c0RvY3VtZW50Tm9kZSgpID8gbnVsbHB0ciA6ICZyb290Tm9kZTsKIAotICAgIGZvciAoYXV0byYg
ZWxlbWVudCA6IGVsZW1lbnREZXNjZW5kYW50cyhjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihz
ZWFyY2hSb290Tm9kZSkpKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNP
ZlR5cGU8RWxlbWVudD4oY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4oc2VhcmNoUm9vdE5vZGUp
KSkgewogICAgICAgICBzZWxlY3RvckRhdGEuY29tcGlsZWRTZWxlY3Rvci53YXNVc2VkKCk7CiAK
ICAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlcigmZWxlbWVudCwgJmNoZWNraW5nQ29udGV4dCkp
IHsKQEAgLTQzNyw3ICs0MzQsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlz
dDo6ZXhlY3V0ZUNvbXBpbGVkU2luZ2xlTXVsdGlTZWxlY3RvckRhdGEoY29ucwogewogICAgIFNl
bGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dChTZWxlY3RvckNo
ZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwogICAgIGNoZWNraW5nQ29udGV4dC5zY29wZSA9
IHJvb3ROb2RlLmlzRG9jdW1lbnROb2RlKCkgPyBudWxscHRyIDogJnJvb3ROb2RlOwotICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnREZXNjZW5kYW50cyhjb25zdF9jYXN0PENvbnRhaW5l
ck5vZGUmPihyb290Tm9kZSkpKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFu
dHNPZlR5cGU8RWxlbWVudD4oY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkg
ewogICAgICAgICBmb3IgKGF1dG8mIHNlbGVjdG9yIDogbV9zZWxlY3RvcnMpIHsKICAgICAgICAg
ICAgIHNlbGVjdG9yLmNvbXBpbGVkU2VsZWN0b3Iud2FzVXNlZCgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vVGFnQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
VGFnQ29sbGVjdGlvbi5jcHAKaW5kZXggZTA2N2YyZjFkMjk4NGNiNzg3ZmVlOWEzMDQ5MTIxNTVk
YzljMzc0NC4uMWYzMjRjYzA3N2ExYTMwMGNhYWViODVlYzQyOTM3YWRlZGZhYzEwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RhZ0NvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9UYWdDb2xsZWN0aW9uLmNwcApAQCAtMzQsNyArMzQsNyBAQCBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoVGFnQ29sbGVjdGlvbk5TKTsKIFdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChIVE1MVGFnQ29sbGVjdGlvbik7CiAKIFRhZ0NvbGxlY3Rpb25OUzo6VGFnQ29sbGVj
dGlvbk5TKENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZSkKLSAgICA6IENhY2hlZEhUTUxDb2xs
ZWN0aW9uPFRhZ0NvbGxlY3Rpb25OUywgQ29sbGVjdGlvblR5cGVUcmFpdHM8QnlUYWc+Ojp0cmF2
ZXJzYWxUeXBlPihyb290Tm9kZSwgQnlUYWcpCisgICAgOiBDYWNoZWRIVE1MQ29sbGVjdGlvbihy
b290Tm9kZSwgQnlUYWcpCiAgICAgLCBtX25hbWVzcGFjZVVSSShuYW1lc3BhY2VVUkkpCiAgICAg
LCBtX2xvY2FsTmFtZShsb2NhbE5hbWUpCiB7CkBAIC00Nyw3ICs0Nyw3IEBAIFRhZ0NvbGxlY3Rp
b25OUzo6flRhZ0NvbGxlY3Rpb25OUygpCiB9CiAKIFRhZ0NvbGxlY3Rpb246OlRhZ0NvbGxlY3Rp
b24oQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIGNvbnN0IEF0b21TdHJpbmcmIHF1YWxpZmllZE5h
bWUpCi0gICAgOiBDYWNoZWRIVE1MQ29sbGVjdGlvbjxUYWdDb2xsZWN0aW9uLCBDb2xsZWN0aW9u
VHlwZVRyYWl0czxCeVRhZz46OnRyYXZlcnNhbFR5cGU+KHJvb3ROb2RlLCBCeVRhZykKKyAgICA6
IENhY2hlZEhUTUxDb2xsZWN0aW9uKHJvb3ROb2RlLCBCeVRhZykKICAgICAsIG1fcXVhbGlmaWVk
TmFtZShxdWFsaWZpZWROYW1lKQogewogICAgIEFTU0VSVChxdWFsaWZpZWROYW1lICE9IHN0YXJB
dG9tKCkpOwpAQCAtNTksNyArNTksNyBAQCBUYWdDb2xsZWN0aW9uOjp+VGFnQ29sbGVjdGlvbigp
CiB9CiAKIEhUTUxUYWdDb2xsZWN0aW9uOjpIVE1MVGFnQ29sbGVjdGlvbihDb250YWluZXJOb2Rl
JiByb290Tm9kZSwgY29uc3QgQXRvbVN0cmluZyYgcXVhbGlmaWVkTmFtZSkKLSAgICA6IENhY2hl
ZEhUTUxDb2xsZWN0aW9uPEhUTUxUYWdDb2xsZWN0aW9uLCBDb2xsZWN0aW9uVHlwZVRyYWl0czxC
eUhUTUxUYWc+Ojp0cmF2ZXJzYWxUeXBlPihyb290Tm9kZSwgQnlIVE1MVGFnKQorICAgIDogQ2Fj
aGVkSFRNTENvbGxlY3Rpb24ocm9vdE5vZGUsIEJ5SFRNTFRhZykKICAgICAsIG1fcXVhbGlmaWVk
TmFtZShxdWFsaWZpZWROYW1lKQogICAgICwgbV9sb3dlcmVkUXVhbGlmaWVkTmFtZShxdWFsaWZp
ZWROYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKaW5kZXggMzkyMGEwYjcwODMzYmY5YjZmNDNmYzc1OGM0YmQxM2M2YmRlMWNmNC4uNmM2
ZDgzYTcyOGYzMDIwM2I4ZWZmY2UwZjA4YmFhNDU1YzMyNmE2YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQu
aCIKKyNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRmlsZS5oIgpAQCAtNjEsNyAr
NjIsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxBdHRh
Y2htZW50RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCUkVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCkBAIC0zNDMxLDIzICszNDMyLDE4
IEBAIHZvaWQgRWRpdG9yOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KiBlKQogCiB2
b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29uc3QKIHsKLSAg
ICBhdXRvIGNvbGxlY3Rpb24gPSBkb2N1bWVudCgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKEhUTUxO
YW1lczo6Ym9keVRhZy0+bG9jYWxOYW1lKCkpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNvbGxl
Y3Rpb24tPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkKLSAgICAgICAgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoY29sbGVjdGlvbi0+aXRlbShp
KSk7Ci19Ci0KLXZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChFbGVtZW50
KiBlbGVtZW50KSBjb25zdAotewotICAgIEFTU0VSVCghZWxlbWVudCB8fCBpczxTdHlsZWRFbGVt
ZW50PigqZWxlbWVudCkpOwotICAgIGlmICghaXM8U3R5bGVkRWxlbWVudD4oZWxlbWVudCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIE11dGF0ZSB1c2luZyB0aGUgQ1NTT00gd3JhcHBlciBz
byB3ZSBnZXQgdGhlIHNhbWUgZXZlbnQgYmVoYXZpb3IgYXMgYSBzY3JpcHQuCi0gICAgYXV0byYg
c3R5bGUgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50PigqZWxlbWVudCkuY3Nzb21TdHlsZSgpOwot
ICAgIHN0eWxlLnNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlXb3JkV3JhcCwgImJyZWFr
LXdvcmQiLCBmYWxzZSk7Ci0gICAgc3R5bGUuc2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0
eVdlYmtpdE5ic3BNb2RlLCAic3BhY2UiLCBmYWxzZSk7Ci0gICAgc3R5bGUuc2V0UHJvcGVydHlJ
bnRlcm5hbChDU1NQcm9wZXJ0eUxpbmVCcmVhaywgImFmdGVyLXdoaXRlLXNwYWNlIiwgZmFsc2Up
OworICAgIC8vIEZJWE1FOiBOb3QgY2xlYXIgaXQncyB2YWx1YWJsZSB0byBkbyB0aGlzIHRvIGFs
bCBib2R5IGVsZW1lbnRzIHJhdGhlciB0aGFuIGp1c3QgZG9pbmcgaXQgb24gdGhlIHNpbmdsZSBv
bmUgcmV0dXJuZWQgYnkgRG9jdW1lbnQ6OmJvZHkuCisgICAgVmVjdG9yPFJlZjxIVE1MQm9keUVs
ZW1lbnQ+PiBib2RpZXM7CisgICAgZm9yIChhdXRvJiBib2R5IDogZGVzY2VuZGFudHNPZlR5cGU8
SFRNTEJvZHlFbGVtZW50Pihkb2N1bWVudCgpKSkKKyAgICAgICAgYm9kaWVzLmFwcGVuZChib2R5
KTsKKworICAgIGZvciAoYXV0byYgYm9keSA6IGJvZGllcykgeworICAgICAgICAvLyBNdXRhdGUg
dXNpbmcgdGhlIENTU09NIHdyYXBwZXIgc28gd2UgZ2V0IHRoZSBzYW1lIGV2ZW50IGJlaGF2aW9y
IGFzIGEgc2NyaXB0LgorICAgICAgICBhdXRvJiBzdHlsZSA9IGJvZHktPmNzc29tU3R5bGUoKTsK
KyAgICAgICAgc3R5bGUuc2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eVdvcmRXcmFwLCAi
YnJlYWstd29yZCIsIGZhbHNlKTsKKyAgICAgICAgc3R5bGUuc2V0UHJvcGVydHlJbnRlcm5hbChD
U1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlLCAic3BhY2UiLCBmYWxzZSk7CisgICAgICAgIHN0eWxl
LnNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlMaW5lQnJlYWssICJhZnRlci13aGl0ZS1z
cGFjZSIsIGZhbHNlKTsKKyAgICB9CiB9CiAKIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmgKaW5kZXggMTljNDIwOGQ0NWQ5ZWM5ZjVjMjljOTI4MTc0ODgwZTRmMWI5ODQxMC4uZjg2Nzdi
MzE4ZThlODA2YzAyMmEzZTczODZlZWYyNjA4MDViNDUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCkBAIC00MzUsNyArNDM1LDYgQEAgcHVibGljOgogICAgIHZvaWQgY29tcHV0ZUFuZFNldFR5
cGluZ1N0eWxlKEVkaXRpbmdTdHlsZSYgLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbjo6VW5zcGVj
aWZpZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxl
KFN0eWxlUHJvcGVydGllcyYgLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbjo6VW5zcGVjaWZpZWQp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50
KCkgY29uc3Q7Ci0gICAgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChFbGVtZW50Kikg
Y29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGZpcnN0UmVjdEZvclJhbmdlKFJh
bmdlKikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAK
aW5kZXggY2ZkYzM5ZjA0ZWFjNDA2ODRkMWQyNDhiN2I4NzM1NjRlMDI4Mjk2NC4uZDhjY2FiMDc4
NDEzNzI1ZWY5MGRkMDFkMGI3ZmU0OTc1NGZhN2FjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTIzNTMsMjAgKzIzNTMsMTYgQEAgc3RhdGljIEhUTUxG
b3JtRWxlbWVudCogc2NhbkZvckZvcm0oRWxlbWVudCogc3RhcnQpCiB7CiAgICAgaWYgKCFzdGFy
dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGRlc2NlbmRhbnRzID0gZGVz
Y2VuZGFudHNPZlR5cGU8SFRNTEVsZW1lbnQ+KHN0YXJ0LT5kb2N1bWVudCgpKTsKLSAgICBmb3Ig
KGF1dG8gaXQgPSBkZXNjZW5kYW50cy5mcm9tKCpzdGFydCksIGVuZCA9IGRlc2NlbmRhbnRzLmVu
ZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSFRNTEVsZW1lbnQmIGVsZW1lbnQgPSAq
aXQ7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTEVsZW1l
bnQ+KHN0YXJ0LT5kb2N1bWVudCgpKSkgewogICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50
PihlbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50
PihlbGVtZW50KTsKICAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1l
bnQpKQogICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
KGVsZW1lbnQpLmZvcm0oKTsKICAgICAgICAgaWYgKGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPihl
bGVtZW50KSkgewotICAgICAgICAgICAgRG9jdW1lbnQqIGNvbnRlbnREb2N1bWVudCA9IGRvd25j
YXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlPihlbGVtZW50KS5jb250ZW50RG9jdW1lbnQoKTsKLSAg
ICAgICAgICAgIGlmICghY29udGVudERvY3VtZW50KQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgaWYgKEhUTUxGb3JtRWxlbWVudCogZnJhbWVSZXN1bHQgPSBzY2FuRm9y
Rm9ybShjb250ZW50RG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZnJhbWVSZXN1bHQ7CisgICAgICAgICAgICBpZiAoYXV0byogY29udGVudERvY3Vt
ZW50ID0gZG93bmNhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2U+KGVsZW1lbnQpLmNvbnRlbnREb2N1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGZyYW1lUmVzdWx0ID0gc2NhbkZv
ckZvcm0oY29udGVudERvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmcmFtZVJlc3VsdDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggY2RlOWE3OGM4ZmU3ZGExMzFl
MTFmNDRmNGJiMDkxYzVmZTZmMDJmMy4uMWU3NjBkZTcyMzE2MDlkMDU5Mjk4MjhmN2UxM2YzZDIy
YmEyNTJmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogCiAgICAgICAg
IFR5cGUgdHlwZSA9IFR5cGU6OkluY2x1ZGU7CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBtYXRj
aGluZ0VsZW1lbnQ7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRMaW5lYWdl
KHN0YXJ0aW5nRWxlbWVudC5nZXQoKSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDog
bGluZWFnZU9mVHlwZTxFbGVtZW50Pigqc3RhcnRpbmdFbGVtZW50KSkgewogICAgICAgICAgICAg
aWYgKGF1dG8gdHlwZU9yTnVsbG9wdCA9IHR5cGVGb3JFbGVtZW50KGVsZW1lbnQpKSB7CiAgICAg
ICAgICAgICAgICAgdHlwZSA9ICp0eXBlT3JOdWxsb3B0OwogICAgICAgICAgICAgICAgIG1hdGNo
aW5nRWxlbWVudCA9ICZlbGVtZW50OwpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50
TGluZWFnZShzdGFydGluZ0VsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IGxpbmVhZ2VPZlR5cGU8RWxlbWVudD4oKnN0YXJ0aW5nRWxlbWVudCkpIHsKICAgICAg
ICAgICAgIG1fY2FjaGUuc2V0KGVsZW1lbnQsIHR5cGUpOwogICAgICAgICAgICAgaWYgKCZlbGVt
ZW50ID09IG1hdGNoaW5nRWxlbWVudCkKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uaAppbmRleCAxMzU4NDE2ZmUzODkyYTk5ODg1YTZm
OWY0MDQ5Y2RlMWQ5ZDM3ZDBiLi5mNmVkMzM3YzViN2FiMTI1ZWRjNDc4ODlhZTM5ZjEzY2M1MzRm
NjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oCkBAIC01NCw3ICs1
NCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBIVE1MQWxsTmFtZWRTdWJDb2xsZWN0aW9u
KERvY3VtZW50JiBkb2N1bWVudCwgQ29sbGVjdGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbVN0cmlu
ZyYgbmFtZSkKLSAgICAgICAgOiBDYWNoZWRIVE1MQ29sbGVjdGlvbjxIVE1MQWxsTmFtZWRTdWJD
b2xsZWN0aW9uLCBDb2xsZWN0aW9uVHJhdmVyc2FsVHlwZTo6RGVzY2VuZGFudHM+KGRvY3VtZW50
LCB0eXBlKQorICAgICAgICA6IENhY2hlZEhUTUxDb2xsZWN0aW9uKGRvY3VtZW50LCB0eXBlKQog
ICAgICAgICAsIG1fbmFtZShuYW1lKQogICAgIHsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gRG9j
dW1lbnRBbGxOYW1lZEl0ZW1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXgg
NjhjZjU1M2FiNDkwYWU0ZGYwN2M3ZGZiNjJiN2RkZDA2NjkwNjBlYS4uMzJlZDRhZDMxYmQzMGVj
ZjRjY2M0OGZiMTQyNDRhMzIzMjRlMDRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykK
ICAqIENvcHlyaWdodCAoQykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSAiSFRNTEJESUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEJ1dHRvbkVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkhUTUxFbGVtZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIkhUTUxGaWVsZFNl
dEVsZW1lbnQuaCIKQEAgLTYwLDYgKzU5LDcgQEAKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgi
CiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCIKICNpbmNsdWRlICJTaGFkb3dS
b290LmgiCiAjaW5jbHVkZSAiU2ltdWxhdGVkQ2xpY2suaCIKICNpbmNsdWRlICJTdHlsZVByb3Bl
cnRpZXMuaCIKQEAgLTc2NywxNCArNzY3LDE2IEBAIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogSFRN
TEVsZW1lbnQ6OmFzRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHkoY29u
c3QgTm9kZSYgbm9kZSkKK3N0YXRpYyBib29sIGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHko
Y29uc3QgSFRNTEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4o
bm9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBIVE1MRWxlbWVudCYgZWxl
bWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKTsKICAgICByZXR1cm4gaXM8SFRNTEJE
SUVsZW1lbnQ+KGVsZW1lbnQpIHx8IGVsZW1lbnQuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihkaXJBdHRyKTsKIH0KIAorc3RhdGljIGJvb2wgZWxlbWVudEFmZmVjdHNEaXJlY3Rp
b25hbGl0eShjb25zdCBOb2RlJiBub2RlKQoreworICAgIHJldHVybiBpczxIVE1MRWxlbWVudD4o
bm9kZSkgJiYgZWxlbWVudEFmZmVjdHNEaXJlY3Rpb25hbGl0eShkb3duY2FzdDxIVE1MRWxlbWVu
dD4obm9kZSkpOworfQorCiBzdGF0aWMgdm9pZCBzZXRIYXNEaXJBdXRvRmxhZ1JlY3Vyc2l2ZWx5
KE5vZGUqIGZpcnN0Tm9kZSwgYm9vbCBmbGFnLCBOb2RlKiBsYXN0Tm9kZSA9IG51bGxwdHIpCiB7
CiAgICAgZmlyc3ROb2RlLT5zZXRTZWxmT3JBbmNlc3Rvckhhc0RpckF1dG9BdHRyaWJ1dGUoZmxh
Zyk7CkBAIC04ODUsMTAgKzg4NywxMCBAQCB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rp
b25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGlsZEF0dHJpYnV0ZUNoYW5nZWQoRWxlbWVudAogICAgIHNl
dEhhc0RpckF1dG9GbGFnUmVjdXJzaXZlbHkoY2hpbGQsIGZhbHNlKTsKICAgICBpZiAoIXJlbmRl
cmVyKCkgfHwgcmVuZGVyZXIoKS0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSB0ZXh0RGlyZWN0aW9u
KQogICAgICAgICByZXR1cm47Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50VG9BZGp1c3QgOiBlbGVt
ZW50TGluZWFnZSh0aGlzKSkgewotICAgICAgICBpZiAoZWxlbWVudEFmZmVjdHNEaXJlY3Rpb25h
bGl0eShlbGVtZW50VG9BZGp1c3QpKSB7Ci0gICAgICAgICAgICBlbGVtZW50VG9BZGp1c3QuaW52
YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IGxpbmVhZ2VPZlR5cGU8SFRNTEVsZW1lbnQ+KCp0aGlzKSkgeworICAg
ICAgICBpZiAoZWxlbWVudEFmZmVjdHNEaXJlY3Rpb25hbGl0eShlbGVtZW50KSkgeworICAgICAg
ICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAppbmRl
eCAzOTVkYjFlNjJlZWRkMWQ5MDBlOWU3YzNlYzg4OGNiMDBjYjJhNGEzLi43ZTA3NGViNjEyODk3
NjI4OTBlMTFlODFhZmNkNmEwOTNlN2ZkZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5o
CkBAIC0yMiwxOSArMjIsMTcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJJbnB1dE1v
ZGUuaCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCisKICNpZiBFTkFCTEUoQVVUT0NBUElU
QUxJWkUpCiAjaW5jbHVkZSAiQXV0b2NhcGl0YWxpemUuaCIKICNlbmRpZgogCi0jaW5jbHVkZSAi
SW5wdXRNb2RlLmgiCi0jaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ7CiBjbGFzcyBGb3JtTmFtZWRJdGVtOwotY2xhc3MgSFRNTENvbGxlY3Rpb247CiBjbGFz
cyBIVE1MRm9ybUVsZW1lbnQ7CiAKIGVudW0gY2xhc3MgRW50ZXJLZXlIaW50IDogdWludDhfdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCmluZGV4IDhjZGY5MDMwOWY3
MGI0ZGYyNzU0ODU5YmNmMzQ1MjRlMDIxNWM5YWYuLjNiYmNlMDg3N2FkMGE0NzQzOGNjNGJmN2I2
MGNlNzI4ZTU4Y2VjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVk
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNw
cApAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpICgxU3Rl
aW5AZ214LmRlKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5
LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCkBAIC02NiwxNSArNjYsMTAgQEAgUmVmPEhUTUxFbWJlZEVsZW1lbnQ+IEhUTUxF
bWJlZEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCiAKIHN0YXRpYyBpbmxpbmUg
UmVuZGVyV2lkZ2V0KiBmaW5kV2lkZ2V0UmVuZGVyZXIoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAg
ICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgfSB3aGlsZSAobm9kZSAmJiAhaXM8SFRN
TE9iamVjdEVsZW1lbnQ+KCpub2RlKSk7Ci0gICAgfQotCisgICAgaWYgKCFub2RlLT5yZW5kZXJl
cigpKQorICAgICAgICBub2RlID0gYW5jZXN0b3JzT2ZUeXBlPEhUTUxPYmplY3RFbGVtZW50Pigq
bm9kZSkuZmlyc3QoKTsKICAgICBpZiAobm9kZSAmJiBpczxSZW5kZXJXaWRnZXQ+KG5vZGUtPnJl
bmRlcmVyKCkpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0Pihub2RlLT5y
ZW5kZXJlcigpKTsKLQogICAgIHJldHVybiBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCBkNjExYmMxYjIyNTFmZjhm
MDg4NDRmNjhkNDI0ZmI5ZGM5NjY4MmY0Li5mZDc3ZDdiYTA0M2U5YTdjZDcyZmY5NmU4NTY4ZmI5
ZWM5ODNmN2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5jcHAKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEBueXBvcC5jb20pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgorI2luY2x1ZGUgIkhUTUxEYXRhTGlzdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
RmllbGRTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgpAQCAtNDEyLDE0ICs0MTMsMTIgQEAgYm9vbCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjptYXRjaGVzSW52YWxpZFBzZXVkb0NsYXNzKCkgY29uc3QKIGJvb2wg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZVdpbGxWYWxpZGF0ZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKG1fZGF0YUxpc3RBbmNlc3RvclN0YXRlID09IFVua25vd24pIHsKLSAgICAgICAgZm9y
IChDb250YWluZXJOb2RlKiBhbmNlc3RvciA9IHBhcmVudE5vZGUoKTsgYW5jZXN0b3I7IGFuY2Vz
dG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKGFuY2VzdG9y
LT5oYXNUYWdOYW1lKGRhdGFsaXN0VGFnKSkgewotICAgICAgICAgICAgICAgIG1fZGF0YUxpc3RB
bmNlc3RvclN0YXRlID0gSW5zaWRlRGF0YUxpc3Q7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZGF0YUxpc3RBbmNlc3RvclN0
YXRlID09IFVua25vd24pCi0gICAgICAgICAgICBtX2RhdGFMaXN0QW5jZXN0b3JTdGF0ZSA9IE5v
dEluc2lkZURhdGFMaXN0OworI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQorICAgICAgICBt
X2RhdGFMaXN0QW5jZXN0b3JTdGF0ZSA9IGFuY2VzdG9yc09mVHlwZTxIVE1MRGF0YUxpc3RFbGVt
ZW50PigqdGhpcykuZmlyc3QoKQorICAgICAgICAgICAgPyBJbnNpZGVEYXRhTGlzdCA6IE5vdElu
c2lkZURhdGFMaXN0OworI2Vsc2UKKyAgICAgICAgbV9kYXRhTGlzdEFuY2VzdG9yU3RhdGUgPSBO
b3RJbnNpZGVEYXRhTGlzdDsKKyNlbmRpZgogICAgIH0KICAgICByZXR1cm4gbV9kYXRhTGlzdEFu
Y2VzdG9yU3RhdGUgPT0gTm90SW5zaWRlRGF0YUxpc3QgJiYgIWlzRGlzYWJsZWRPclJlYWRPbmx5
KCk7CiB9CkBAIC02NDUsMTUgKzY0NCw2IEBAIEF1dG9jYXBpdGFsaXplVHlwZSBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjphdXRvY2FwaXRhbGl6ZVR5cGUoKSBjb25zdAogCiAjZW5kaWYKIAotSFRN
TEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZW5jbG9zaW5nRm9y
bUNvbnRyb2xFbGVtZW50KE5vZGUqIG5vZGUpCi17Ci0gICAgZm9yICg7IG5vZGU7IG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KCpub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Pihub2RlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KIFN0cmluZyBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdXRvY29tcGxldGUoKSBjb25zdAogewogICAgIHJldHVy
biBhdXRvZmlsbERhdGEoKS5pZGxFeHBvc2VkVmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oCmluZGV4IDYxMzQwYmZhNzNhM2E5NjZiYTYzN2FkNDRm
NTZjYmQ4ZmNmYzk2ZjAuLjNhZGIzMTFjN2E2MWQ3OGQ4MGI5OTBhMTU2OWU2ODFkMGY2NTMwMGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCkBAIC0x
MTYsOCArMTE2LDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQXV0b2ZvY3VzZWQoKSB7IHJldHVy
biBtX2hhc0F1dG9mb2N1c2VkOyB9CiAgICAgdm9pZCBzZXRBdXRvZm9jdXNlZCgpIHsgbV9oYXNB
dXRvZm9jdXNlZCA9IHRydWU7IH0KIAotICAgIHN0YXRpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiBlbmNsb3NpbmdGb3JtQ29udHJvbEVsZW1lbnQoTm9kZSopOwotCiAgICAgV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIGF1dG9jb21wbGV0ZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0QXV0b2NvbXBsZXRlKGNvbnN0IFN0cmluZyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCmluZGV4IGEyYjAwZThmODE2ZGEx
YzIyMWIxYzM2NmVhNmU2ODljM2IxYzY4YjkuLjg0YTFjYjc5ZTM2MDE0M2VjM2Q0ODI5YzY1NzU3
OGM4MjgzN2QwZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250
cm9sc0NvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250
cm9sc0NvbGxlY3Rpb24uY3BwCkBAIC00MCw3ICs0MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSFRNTEZvcm1Db250cm9sc0NvbGxl
Y3Rpb24pOwogCiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6SFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb24oQ29udGFpbmVyTm9kZSYgb3duZXJOb2RlKQotICAgIDogQ2FjaGVkSFRNTENvbGxl
Y3Rpb248SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24sIENvbGxlY3Rpb25UeXBlVHJhaXRzPEZv
cm1Db250cm9scz46OnRyYXZlcnNhbFR5cGU+KG93bmVyTm9kZSwgRm9ybUNvbnRyb2xzKQorICAg
IDogQ2FjaGVkSFRNTENvbGxlY3Rpb24ob3duZXJOb2RlLCBGb3JtQ29udHJvbHMpCiAgICAgLCBt
X2NhY2hlZEVsZW1lbnQobnVsbHB0cikKICAgICAsIG1fY2FjaGVkRWxlbWVudE9mZnNldEluQXJy
YXkoMCkKIHsKQEAgLTExMSw3ICsxMTEsNyBAQCBIVE1MRWxlbWVudCogSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb246OmN1c3RvbUVsZW1lbnRBZnRlcihFbGVtZW50KiBjdXJyZW50KSBjbwogCiBI
VE1MRm9ybUVsZW1lbnQmIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpvd25lck5vZGUoKSBj
b25zdAogewotICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KENhY2hlZEhUTUxD
b2xsZWN0aW9uPEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLCBDb2xsZWN0aW9uVHlwZVRyYWl0
czxGb3JtQ29udHJvbHM+Ojp0cmF2ZXJzYWxUeXBlPjo6b3duZXJOb2RlKCkpOworICAgIHJldHVy
biBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KENhY2hlZEhUTUxDb2xsZWN0aW9uOjpvd25lck5v
ZGUoKSk7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OnVwZGF0ZU5hbWVk
RWxlbWVudENhY2hlKCkgY29uc3QKQEAgLTE1OCw3ICsxNTgsNyBAQCB2b2lkIEhUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uOjp1cGRhdGVOYW1lZEVsZW1lbnRDYWNoZSgpIGNvbnN0CiAKIHZvaWQg
SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OmludmFsaWRhdGVDYWNoZUZvckRvY3VtZW50KERv
Y3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBDYWNoZWRIVE1MQ29sbGVjdGlvbjxIVE1MRm9ybUNv
bnRyb2xzQ29sbGVjdGlvbiwgQ29sbGVjdGlvblR5cGVUcmFpdHM8Rm9ybUNvbnRyb2xzPjo6dHJh
dmVyc2FsVHlwZT46OmludmFsaWRhdGVDYWNoZUZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAgICBD
YWNoZWRIVE1MQ29sbGVjdGlvbjo6aW52YWxpZGF0ZUNhY2hlRm9yRG9jdW1lbnQoZG9jdW1lbnQp
OwogICAgIG1fY2FjaGVkRWxlbWVudCA9IG51bGxwdHI7CiAgICAgbV9jYWNoZWRFbGVtZW50T2Zm
c2V0SW5BcnJheSA9IDA7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxP
cHRHcm91cEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVt
ZW50LmNwcAppbmRleCA5ZThjZmZkYjkxYTUxMDkwNDI4NDU5ZWZmZTg2NWE0OGUwN2Y0ODA4Li42
NzY4ZmUxMmExZTVlNzIyMGM1MzY5MGZlNmY5NzM1N2NhZTdjZGIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAg
ICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgpAQCAtMTA5LDE0ICsxMDksNyBAQCBTdHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVudDo6Z3JvdXBM
YWJlbFRleHQoKSBjb25zdAogICAgIAogSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRHcm91cEVs
ZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPENvbnRhaW5l
ck5vZGU+IHNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0ICYmICFpczxI
VE1MU2VsZWN0RWxlbWVudD4oKnNlbGVjdCkpCi0gICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFy
ZW50Tm9kZSgpOwotICAgIAotICAgIGlmICghc2VsZWN0KQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAKLSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KHNlbGVjdC5n
ZXQoKSk7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihhbmNlc3Rv
cnNPZlR5cGU8SFRNTFNlbGVjdEVsZW1lbnQ+KCp0aGlzKS5maXJzdCgpKTsKIH0KIAogdm9pZCBI
VE1MT3B0R3JvdXBFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKaW5kZXggYzNkZDMwZDVkYzYyYmY4MzE3MDllNTcw
MDQ2ODhkNGE4OGIzZTJhNi4uM2MwMWU2OTVhZDEwMjY3N2FhZmYwMmRiMGYyMTFkYjg4ZjY5Mjg0
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKQEAgLTMsNyAr
Myw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3Au
Y29tKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMTY2LDggKzE2Niw4IEBAIHZvaWQgSFRNTE9w
dGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
bnN0IEF0b21TdHJpCiB7CiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgaWYgKG5h
bWUgPT0gdmFsdWVBdHRyKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8SFRNTERhdGFMaXN0RWxlbWVu
dD4gZGF0YUxpc3QgPSBvd25lckRhdGFMaXN0RWxlbWVudCgpKQotICAgICAgICAgICAgZGF0YUxp
c3QtPm9wdGlvbkVsZW1lbnRDaGlsZHJlbkNoYW5nZWQoKTsKKyAgICAgICAgZm9yIChhdXRvJiBk
YXRhTGlzdCA6IGFuY2VzdG9yc09mVHlwZTxIVE1MRGF0YUxpc3RFbGVtZW50PigqdGhpcykpCisg
ICAgICAgICAgICBkYXRhTGlzdC5vcHRpb25FbGVtZW50Q2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAg
fSBlbHNlCiAjZW5kaWYKICAgICBpZiAobmFtZSA9PSBkaXNhYmxlZEF0dHIpIHsKQEAgLTIzOCwz
OSArMjM4LDE3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUoYm9v
bCBzZWxlY3RlZCkKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25z
dCBDaGlsZENoYW5nZSYgY2hhbmdlKQogewogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQot
ICAgIGlmIChSZWZQdHI8SFRNTERhdGFMaXN0RWxlbWVudD4gZGF0YUxpc3QgPSBvd25lckRhdGFM
aXN0RWxlbWVudCgpKQotICAgICAgICBkYXRhTGlzdC0+b3B0aW9uRWxlbWVudENoaWxkcmVuQ2hh
bmdlZCgpOwotICAgIGVsc2UKKyAgICBmb3IgKGF1dG8mIGRhdGFMaXN0IDogYW5jZXN0b3JzT2ZU
eXBlPEhUTUxEYXRhTGlzdEVsZW1lbnQ+KCp0aGlzKSkKKyAgICAgICAgZGF0YUxpc3Qub3B0aW9u
RWxlbWVudENoaWxkcmVuQ2hhbmdlZCgpOwogI2VuZGlmCiAgICAgaWYgKFJlZlB0cjxIVE1MU2Vs
ZWN0RWxlbWVudD4gc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCkpCiAgICAgICAgIHNlbGVj
dC0+b3B0aW9uRWxlbWVudENoaWxkcmVuQ2hhbmdlZCgpOwogICAgIEhUTUxFbGVtZW50OjpjaGls
ZHJlbkNoYW5nZWQoY2hhbmdlKTsKIH0KIAotI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQot
SFRNTERhdGFMaXN0RWxlbWVudCogSFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyRGF0YUxpc3RFbGVt
ZW50KCkgY29uc3QKLXsKLSAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gZGF0YWxpc3QgPSBwYXJl
bnROb2RlKCk7Ci0gICAgd2hpbGUgKGRhdGFsaXN0ICYmICFpczxIVE1MRGF0YUxpc3RFbGVtZW50
PigqZGF0YWxpc3QpKQotICAgICAgICBkYXRhbGlzdCA9IGRhdGFsaXN0LT5wYXJlbnROb2RlKCk7
Ci0KLSAgICBpZiAoIWRhdGFsaXN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBkb3duY2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihkYXRhbGlzdC5nZXQoKSk7Ci19Ci0j
ZW5kaWYKLQogSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRpb25FbGVtZW50Ojpvd25lclNlbGVj
dEVsZW1lbnQoKSBjb25zdAogewotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBzZWxlY3QgPSBw
YXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKHNlbGVjdCAmJiAhaXM8SFRNTFNlbGVjdEVsZW1lbnQ+
KCpzZWxlY3QpKQotICAgICAgICBzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5vZGUoKTsKLQotICAg
IGlmICghc2VsZWN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBkb3du
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oc2VsZWN0LmdldCgpKTsKKyAgICByZXR1cm4gY29uc3Rf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KGFuY2VzdG9yc09mVHlwZTxIVE1MU2VsZWN0RWxlbWVu
dD4oKnRoaXMpLmZpcnN0KCkpOwogfQogCiBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OmxhYmVs
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAppbmRleCBmMGQ5
NGM4YTZiNWYzMDgzMzRlYWExMWRhOWU0MDIxYjVjMGU1N2U2Li45MWM1YWJjN2UwMTdjMTFmYTEz
MmZkMzFmMDFiZTFlMzI0ZTI2YjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxl
bWVudC5oCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMTAsIDIw
MTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpA
QCAtMjgsNyArMjgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxEYXRh
TGlzdEVsZW1lbnQ7CiBjbGFzcyBIVE1MU2VsZWN0RWxlbWVudDsKIAogY2xhc3MgSFRNTE9wdGlv
bkVsZW1lbnQgZmluYWwgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewpAQCAtNDksOSArNDgsNiBAQCBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZWxlY3RlZCgpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbCk7CiAKLSNpZiBFTkFCTEUoREFUQUxJU1RfRUxF
TUVOVCkKLSAgICBXRUJDT1JFX0VYUE9SVCBIVE1MRGF0YUxpc3RFbGVtZW50KiBvd25lckRhdGFM
aXN0RWxlbWVudCgpIGNvbnN0OwotI2VuZGlmCiAgICAgV0VCQ09SRV9FWFBPUlQgSFRNTFNlbGVj
dEVsZW1lbnQqIG93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIGxhYmVsKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRp
b25zQ29sbGVjdGlvbi5jcHAKaW5kZXggYTYwNzY2YmQ3ODU4NTk4NmEyMjlmZTg2ZmI0MmM2OGFm
ZDkxYmE0OS4uMzBiYmNmMzY5ODQyNzYxZGQwYjUzNDQxNzhiNDcwMTA2MzU1NTIyMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcApAQCAtMjgsNyAr
MjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SFRNTE9wdGlvbnNDb2xsZWN0aW9uKTsKIAogSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpIVE1MT3B0
aW9uc0NvbGxlY3Rpb24oSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdCkKLSAgICA6IENhY2hlZEhU
TUxDb2xsZWN0aW9uPEhUTUxPcHRpb25zQ29sbGVjdGlvbiwgQ29sbGVjdGlvblR5cGVUcmFpdHM8
U2VsZWN0T3B0aW9ucz46OnRyYXZlcnNhbFR5cGU+KHNlbGVjdCwgU2VsZWN0T3B0aW9ucykKKyAg
ICA6IENhY2hlZEhUTUxDb2xsZWN0aW9uKHNlbGVjdCwgU2VsZWN0T3B0aW9ucykKIHsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAppbmRleCBmYmY4
ZjczM2U0ODAwMDQ5MWVhZDg2MTY3M2I4NjMxOTIzZjk5MTg2Li5hNjAwMzhmZTk0ZjI5OGIwOGVh
NGFiNmVkYWNkN2QxNTU3YWE4NzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUNlbGxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJs
ZUNlbGxFbGVtZW50LmNwcApAQCAtMTMxLDkgKzEzMSw5IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
b21TCiAKIGNvbnN0IFN0eWxlUHJvcGVydGllcyogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmFkZGl0
aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKFJlZlB0
cjxIVE1MVGFibGVFbGVtZW50PiB0YWJsZSA9IGZpbmRQYXJlbnRUYWJsZSgpKQorICAgIGlmIChh
dXRvIHRhYmxlID0gZmluZFBhcmVudFRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0YWJsZS0+YWRk
aXRpb25hbENlbGxTdHlsZSgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwog
fQogCiBib29sIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShjb25zdCBBdHRy
aWJ1dGUmIGF0dHJpYnV0ZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRhYmxlQ29sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNv
bEVsZW1lbnQuY3BwCmluZGV4IDcyOGI1ZjNkMmI1NTIzYjA0YjM5OWYyY2M0YjU1YWE0ZjhiMWZj
NzQuLmY0ZDQ0NzU4MTFlOGE0MGNhMzJhNjdiY2Y2YjIxNmMyNTNhN2U3YTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcApAQCAtOTIsNyArOTIsNyBAQCBj
b25zdCBTdHlsZVByb3BlcnRpZXMqIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OmFkZGl0aW9uYWxQcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZQogewogICAgIGlmICghaGFzVGFnTmFtZShjb2xncm91cFRh
ZykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChSZWZQdHI8SFRNTFRhYmxlRWxl
bWVudD4gdGFibGUgPSBmaW5kUGFyZW50VGFibGUoKSkKKyAgICBpZiAoYXV0byB0YWJsZSA9IGZp
bmRQYXJlbnRUYWJsZSgpKQogICAgICAgICByZXR1cm4gdGFibGUtPmFkZGl0aW9uYWxHcm91cFN0
eWxlKGZhbHNlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUVsZW1lbnQuY3BwCmluZGV4IDc2N2EzZTM4YWY0ODJkZDkyYjE0OWM4ZjBlZThiODY2
ZTdkNGI3YmYuLmE1ZjgwZmUwYzkxZjg4ZDk2MGFiN2ZlN2FmMDY4YTQ4Yjg5NjQ1ZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcApAQCAtNDczLDcgKzQ3Myw3IEBA
IEhUTUxUYWJsZUVsZW1lbnQ6OkNlbGxCb3JkZXJzIEhUTUxUYWJsZUVsZW1lbnQ6OmNlbGxCb3Jk
ZXJzKCkgY29uc3QKICAgICByZXR1cm4gTm9Cb3JkZXJzOwogfQogCi1SZWY8U3R5bGVQcm9wZXJ0
aWVzPiBIVE1MVGFibGVFbGVtZW50OjpjcmVhdGVTaGFyZWRDZWxsU3R5bGUoKQorUmVmPFN0eWxl
UHJvcGVydGllcz4gSFRNTFRhYmxlRWxlbWVudDo6Y3JlYXRlU2hhcmVkQ2VsbFN0eWxlKCkgY29u
c3QKIHsKICAgICBhdXRvIHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7
CiAKQEAgLTUxNCw3ICs1MTQsNyBAQCBSZWY8U3R5bGVQcm9wZXJ0aWVzPiBIVE1MVGFibGVFbGVt
ZW50OjpjcmVhdGVTaGFyZWRDZWxsU3R5bGUoKQogICAgIHJldHVybiBzdHlsZTsKIH0KIAotY29u
c3QgU3R5bGVQcm9wZXJ0aWVzKiBIVE1MVGFibGVFbGVtZW50OjphZGRpdGlvbmFsQ2VsbFN0eWxl
KCkKK2NvbnN0IFN0eWxlUHJvcGVydGllcyogSFRNTFRhYmxlRWxlbWVudDo6YWRkaXRpb25hbENl
bGxTdHlsZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NoYXJlZENlbGxTdHlsZSkKICAgICAgICAg
bV9zaGFyZWRDZWxsU3R5bGUgPSBjcmVhdGVTaGFyZWRDZWxsU3R5bGUoKTsKQEAgLTUzOCwxMSAr
NTM4LDEwIEBAIHN0YXRpYyBTdHlsZVByb3BlcnRpZXMqIGxlYWtHcm91cEJvcmRlclN0eWxlKGlu
dCByb3dzKQogICAgIHJldHVybiAmc3R5bGUubGVha1JlZigpOwogfQogCi1jb25zdCBTdHlsZVBy
b3BlcnRpZXMqIEhUTUxUYWJsZUVsZW1lbnQ6OmFkZGl0aW9uYWxHcm91cFN0eWxlKGJvb2wgcm93
cykKK2NvbnN0IFN0eWxlUHJvcGVydGllcyogSFRNTFRhYmxlRWxlbWVudDo6YWRkaXRpb25hbEdy
b3VwU3R5bGUoYm9vbCByb3dzKSBjb25zdAogewogICAgIGlmIChtX3J1bGVzQXR0ciAhPSBHcm91
cHNSdWxlcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgaWYgKHJvd3MpIHsKICAgICAgICAgc3RhdGljIFN0eWxlUHJvcGVydGllcyogcm93Qm9yZGVy
U3R5bGUgPSBsZWFrR3JvdXBCb3JkZXJTdHlsZSh0cnVlKTsKICAgICAgICAgcmV0dXJuIHJvd0Jv
cmRlclN0eWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuaAppbmRleCBiMzY1
NDIwOWJkYTg1Nzg4NWM2OTMxYzgxYjRlZTNmOTg2ZjM4NDE2Li44MjQ2ODk2OGVjMmY2YmE3ZTEz
NzczNTIxYjNlMzZiOTdjNmJhMzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1l
bnQuaApAQCAtNjUsOCArNjUsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXRvbVN0cmluZyYgcnVs
ZXMoKSBjb25zdDsKICAgICBjb25zdCBBdG9tU3RyaW5nJiBzdW1tYXJ5KCkgY29uc3Q7CiAKLSAg
ICBjb25zdCBTdHlsZVByb3BlcnRpZXMqIGFkZGl0aW9uYWxDZWxsU3R5bGUoKTsKLSAgICBjb25z
dCBTdHlsZVByb3BlcnRpZXMqIGFkZGl0aW9uYWxHcm91cFN0eWxlKGJvb2wgcm93cyk7CisgICAg
Y29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBhZGRpdGlvbmFsQ2VsbFN0eWxlKCkgY29uc3Q7CisgICAg
Y29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBhZGRpdGlvbmFsR3JvdXBTdHlsZShib29sIHJvd3MpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIEhUTUxUYWJsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Jik7CkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAKICAgICBDZWxsQm9y
ZGVycyBjZWxsQm9yZGVycygpIGNvbnN0OwogCi0gICAgUmVmPFN0eWxlUHJvcGVydGllcz4gY3Jl
YXRlU2hhcmVkQ2VsbFN0eWxlKCk7CisgICAgUmVmPFN0eWxlUHJvcGVydGllcz4gY3JlYXRlU2hh
cmVkQ2VsbFN0eWxlKCkgY29uc3Q7CiAKICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogbGFz
dEJvZHkoKSBjb25zdDsKIApAQCAtOTUsNyArOTUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9m
cmFtZUF0dHIgeyBmYWxzZSB9OyAvLyBJbXBsaWVzIGEgdGhpbiBib3JkZXIgd2lkdGggaWYgbm8g
Ym9yZGVyIGlzIHNldCBhbmQgdGhlbiBhIGNlcnRhaW4gc2V0IG9mIHNvbGlkL2hpZGRlbiBib3Jk
ZXJzIGJhc2VkIG9mZiB0aGUgdmFsdWUuCiAgICAgVGFibGVSdWxlcyBtX3J1bGVzQXR0ciB7IFVu
c2V0UnVsZXMgfTsgLy8gSW1wbGllcyBhIHRoaW4gYm9yZGVyIHdpZHRoLCBhIGNvbGxhcHNpbmcg
Ym9yZGVyIG1vZGVsLCBhbmQgYWxsIGJvcmRlcnMgb24gdGhlIHRhYmxlIGJlY29taW5nIHNldCB0
byBoaWRkZW4gKGlmIGZyYW1lL2JvcmRlciBhcmUgcHJlc2VudCwgdG8gbm9uZSBvdGhlcndpc2Up
LgogICAgIHVuc2lnbmVkIHNob3J0IG1fcGFkZGluZyB7IDEgfTsKLSAgICBSZWZQdHI8U3R5bGVQ
cm9wZXJ0aWVzPiBtX3NoYXJlZENlbGxTdHlsZTsKKyAgICBtdXRhYmxlIFJlZlB0cjxjb25zdCBT
dHlsZVByb3BlcnRpZXM+IG1fc2hhcmVkQ2VsbFN0eWxlOwogfTsKIAogfSAvL25hbWVzcGFjZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcAppbmRleCAzNTg3
ODAxNjIxMGZjYWFmZjYwOTBlNjk1Mzk0MTU1YzQ1NWFlYTdjLi4zNDliMDM1MTJhOGVjNTQwNTI0
MWJiYTZmYzNkNGE5ZmY3NDM2ZWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZVBhcnRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJs
ZVBhcnRFbGVtZW50LmNwcApAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OCBX
YWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNiBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTg1LDEyICs4NSw5
IEBAIHZvaWQgSFRNTFRhYmxlUGFydEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlv
bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROCiAgICAgICAgIEhUTUxFbGVtZW50Ojpjb2xsZWN0
U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHN0eWxlKTsKIH0KIAot
UmVmUHRyPEhUTUxUYWJsZUVsZW1lbnQ+IEhUTUxUYWJsZVBhcnRFbGVtZW50OjpmaW5kUGFyZW50
VGFibGUoKSBjb25zdAorUmVmUHRyPGNvbnN0IEhUTUxUYWJsZUVsZW1lbnQ+IEhUTUxUYWJsZVBh
cnRFbGVtZW50OjpmaW5kUGFyZW50VGFibGUoKSBjb25zdAogewotICAgIFJlZlB0cjxDb250YWlu
ZXJOb2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKHBhcmVudCAmJiAhaXM8
SFRNTFRhYmxlRWxlbWVudD4oKnBhcmVudCkpCi0gICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFy
ZW50Tm9kZSgpOwotICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50PihwYXJlbnQu
Z2V0KCkpOworICAgIHJldHVybiBhbmNlc3RvcnNPZlR5cGU8SFRNTFRhYmxlRWxlbWVudD4oKnRo
aXMpLmZpcnN0KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRhYmxlUGFydEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVs
ZW1lbnQuaAppbmRleCBkM2JjZjUwYmFlMjFjMzU4Y2RlMjNmMzM2M2U1YzY5MmQ1NmYxMWU2Li4w
NGY5NDcxYmFiYTI4NzdmNzU0NTQwYzliMWE1ODA5NzI3YmViNTcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVudC5oCkBAIC00LDcgKzQsNyBAQAogICogICAgICAg
ICAgIChDKSAxOTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgYm9vbCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmLCBNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8SFRNTFRhYmxlRWxlbWVudD4gZmlu
ZFBhcmVudFRhYmxlKCkgY29uc3Q7CisgICAgUmVmUHRyPGNvbnN0IEhUTUxUYWJsZUVsZW1lbnQ+
IGZpbmRQYXJlbnRUYWJsZSgpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAppbmRl
eCA3YTY3Yjc3M2FiMzk5ZWIzOTIzMDA4NDYwMjFlOWViYjA5YTI5MWFiLi4yM2VlY2RhMTU3NmM0
YzNlYzc1NDBlM2FhMDYxNmYzZjIwNTBlMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcApAQCAtMTUyLDcgKzE1Miw3IEBAIEhUTUxUYWJs
ZVJvd0VsZW1lbnQqIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpsYXN0Um93KEhUTUxUYWJsZUVs
ZW1lbnQmIHRhYmxlKQogfQogCiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6SFRNTFRhYmxlUm93
c0NvbGxlY3Rpb24oSFRNTFRhYmxlRWxlbWVudCYgdGFibGUpCi0gICAgOiBDYWNoZWRIVE1MQ29s
bGVjdGlvbjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbiwgQ29sbGVjdGlvblR5cGVUcmFpdHM8VGFi
bGVSb3dzPjo6dHJhdmVyc2FsVHlwZT4odGFibGUsIFRhYmxlUm93cykKKyAgICA6IENhY2hlZEhU
TUxDb2xsZWN0aW9uKHRhYmxlLCBUYWJsZVJvd3MpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggOTljNTZlYmY1
ZTA2ZDc2NmJlMjcwYmFjM2FhMjk2MmJiNTlkMzQ4MC4uYTdiYTQxN2Q3ZDUxNzE0YzBlNTUyYzBk
NTlhMDExYjUxNTFiMGM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAw
NiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNzY0
LDM0ICs3NjQsMjQgQEAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIGVuY2xvc2luZ1RleHRG
b3JtQ29udHJvbChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgcmV0dXJuIGFuY2VzdG9y
ICYmIGFuY2VzdG9yLT5pc1RleHRGaWVsZCgpID8gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ+KGFuY2VzdG9yLmdldCgpKSA6IG51bGxwdHI7CiB9CiAKLXN0YXRpYyBjb25zdCBF
bGVtZW50KiBwYXJlbnRIVE1MRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAg
IHdoaWxlIChlbGVtZW50KSB7Ci0gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCk7Ci0gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkK
LSAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQog
U3RyaW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXJlY3Rpb25Gb3JGb3JtRGF0YSgp
IGNvbnN0CiB7Ci0gICAgZm9yIChjb25zdCBFbGVtZW50KiBlbGVtZW50ID0gdGhpczsgZWxlbWVu
dDsgZWxlbWVudCA9IHBhcmVudEhUTUxFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgIGNvbnN0
IEF0b21TdHJpbmcmIGRpckF0dHJpYnV0ZVZhbHVlID0gZWxlbWVudC0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihkaXJBdHRyKTsKLSAgICAgICAgaWYgKGRpckF0dHJpYnV0ZVZhbHVl
LmlzTnVsbCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGRpckF0dHJpYnV0ZVZhbHVlLCAicnRsIikgfHwgZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZGlyQXR0cmlidXRlVmFsdWUsICJsdHIiKSkKLSAgICAg
ICAgICAgIHJldHVybiBkaXJBdHRyaWJ1dGVWYWx1ZTsKLQotICAgICAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZGlyQXR0cmlidXRlVmFsdWUsICJhdXRvIikpIHsKLSAgICAg
ICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0
aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihlbGVtZW50KS0+ZGlyZWN0aW9u
YWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKLSAgICAgICAgICAgIHJldHVybiB0
ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCA/ICJydGwiIDogImx0ciI7CisgICAg
YXV0byBkaXJlY3Rpb24gPSBbdGhpc10geworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBs
aW5lYWdlT2ZUeXBlPEhUTUxFbGVtZW50PigqdGhpcykpIHsKKyAgICAgICAgICAgIGF1dG8mIHZh
bHVlID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGRpckF0dHIpOwor
ICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAicnRs
IikpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAg
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImx0ciIpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgICAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJhdXRvIikpIHsKKyAgICAgICAg
ICAgICAgICBib29sIGlzQXV0bzsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5kaXJl
Y3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOworICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgfQorICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAg
IH0oKTsKIAotICAgIHJldHVybiAibHRyIjsKKyAgICByZXR1cm4gZGlyZWN0aW9uID09IFRleHRE
aXJlY3Rpb246OkxUUiA/ICJsdHIiX3MgOiAicnRsIl9zOwogfQogCiBFeGNlcHRpb25Pcjx2b2lk
PiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0TWF4TGVuZ3RoKGludCBtYXhMZW5ndGgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRBY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JB
dWRpdEFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IGUxZTIzYTc2YTRkOTQ2ZjllYTI3ZjYy
NmEyMmIyY2M3NzhhOTRkMzEuLjQ0ODNkZjcwMDNmYjFlZDU0OTZkY2FiYjIzMDNlYWE1NTBjN2Rm
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdEFj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JBdWRpdEFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC0zMiwxMCArMzIsOCBAQAogI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJDb250YWlu
ZXJOb2RlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIgorI2luY2x1ZGUgIkVsZW1lbnRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIk5vZGUuaCIKICNp
bmNsdWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNzAsNyArNjgsNyBAQCBFeGNlcHRpb25P
cjxWZWN0b3I8UmVmPE5vZGU+Pj4gSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpn
ZXRFbGVtZW50c0J5QwogCiAgICAgVmVjdG9yPFJlZjxOb2RlPj4gbm9kZXM7CiAKLSAgICBmb3Ig
KEVsZW1lbnQmIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFudHMoaXM8Q29udGFpbmVyTm9kZT4o
Y29udGFpbmVyKSA/IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpjb250YWluZXIpIDogZG9jdW1l
bnQpKSB7CisgICAgZm9yIChFbGVtZW50JiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxl
bWVudD4oaXM8Q29udGFpbmVyTm9kZT4oY29udGFpbmVyKSA/IGRvd25jYXN0PENvbnRhaW5lck5v
ZGU+KCpjb250YWluZXIpIDogZG9jdW1lbnQpKSB7CiAgICAgICAgIGlmIChBWENvcmVPYmplY3Qq
IGF4T2JqZWN0ID0gYWNjZXNzaWJsaXR5T2JqZWN0Rm9yTm9kZShlbGVtZW50KSkgewogICAgICAg
ICAgICAgaWYgKGF4T2JqZWN0LT5jb21wdXRlZFJvbGVTdHJpbmcoKSA9PSByb2xlKQogICAgICAg
ICAgICAgICAgIG5vZGVzLmFwcGVuZChlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggMjkzMGI0NWY4
ZjIwNzUxZTg1NmNkYTNlMDUxODlhYTQ0NGUxODU1MS4uYWNlNWY5YWM1M2NiZTI2ZmQzYzRkOWQ0
ZjIyNDk0ZmQ4MDY1YTU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwOSwyMCArNTA5LDE4IEBAIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IG5vCiAgICAgICAgIC8vIEluaGVyaXRlZCBzdHlsZXMuCiAgICAgICAg
IGlmICghaW5jbHVkZUluaGVyaXRlZCB8fCAqaW5jbHVkZUluaGVyaXRlZCkgewogICAgICAgICAg
ICAgYXV0byBlbnRyaWVzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkluaGVyaXRlZFN0eWxlRW50cnk+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIEVsZW1lbnQqIHBh
cmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICB3aGls
ZSAocGFyZW50RWxlbWVudCkgewotICAgICAgICAgICAgICAgIGF1dG8mIHBhcmVudFN0eWxlUmVz
b2x2ZXIgPSBwYXJlbnRFbGVtZW50LT5zdHlsZVJlc29sdmVyKCk7Ci0gICAgICAgICAgICAgICAg
YXV0byBwYXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRTdHlsZVJlc29sdmVyLnN0eWxlUnVsZXNG
b3JFbGVtZW50KHBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZXNvbHZlcjo6QWxsQ1NTUnVsZXMpOwor
ICAgICAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxFbGVtZW50
PigqZWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBwYXJlbnRTdHlsZVJlc29sdmVy
ID0gYW5jZXN0b3Iuc3R5bGVSZXNvbHZlcigpOworICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50
TWF0Y2hlZFJ1bGVzID0gcGFyZW50U3R5bGVSZXNvbHZlci5zdHlsZVJ1bGVzRm9yRWxlbWVudCgm
YW5jZXN0b3IsIFN0eWxlOjpSZXNvbHZlcjo6QWxsQ1NTUnVsZXMpOwogICAgICAgICAgICAgICAg
IGF1dG8gZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50
cnk6OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRNYXRjaGVkQ1NTUnVsZXMoYnVp
bGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChwYXJlbnRNYXRjaGVkUnVsZXMsIHN0eWxlUmVzb2x2
ZXIsICpwYXJlbnRFbGVtZW50LCBQc2V1ZG9JZDo6Tm9uZSkpCisgICAgICAgICAgICAgICAgICAg
IC5zZXRNYXRjaGVkQ1NTUnVsZXMoYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChwYXJlbnRN
YXRjaGVkUnVsZXMsIHN0eWxlUmVzb2x2ZXIsIGFuY2VzdG9yLCBQc2V1ZG9JZDo6Tm9uZSkpCiAg
ICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPFN0
eWxlZEVsZW1lbnQ+KCpwYXJlbnRFbGVtZW50KSAmJiBkb3duY2FzdDxTdHlsZWRFbGVtZW50Pigq
cGFyZW50RWxlbWVudCkuY3Nzb21TdHlsZSgpLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8mIHN0eWxlU2hlZXQgPSBhc0luc3BlY3RvclN0eWxlU2hlZXQoZG93bmNhc3Q8U3R5
bGVkRWxlbWVudD4oKnBhcmVudEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8U3R5
bGVkRWxlbWVudD4oYW5jZXN0b3IpICYmIGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGFuY2VzdG9y
KS5jc3NvbVN0eWxlKCkubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgc3R5
bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihh
bmNlc3RvcikpOwogICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c2V0SW5saW5lU3R5bGUoc3R5
bGVTaGVldC5idWlsZE9iamVjdEZvclN0eWxlKHN0eWxlU2hlZXQuc3R5bGVGb3JJZChJbnNwZWN0
b3JDU1NJZChzdHlsZVNoZWV0LmlkKCksIDApKSkpOwogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgIGVudHJpZXMtPmFkZEl0ZW0oV1RGTW92ZShlbnRyeSkpOwotICAgICAgICAg
ICAgICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGluaGVyaXRlZEVudHJpZXMgPSBXVEZNb3ZlKGVu
dHJpZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAppbmRleCAwZjQ2YTMwMzNhZWY0MDA3ZjZlYjgzN2E2MTA1ZjA1YTBj
NTkwNjdmLi5kMmNhNWJiZTEwOWFhYWQxODJiYWUxODVjNGQ1MmQ4YWFlY2RhODRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBKb3Nl
cGggUGVjb3Jhcm8KICAqCkBAIC0xMTE0LDcgKzExMTQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjppbnNwZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUpCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUg
PSBpbnNwZWN0ZWROb2RlOwogICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoaWdub3JlZCwgZmFsc2Us
IG51bGxwdHIsIGZhbHNlKTsKIAotICAgIGlmIChub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVM
RU1FTlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX05PREUpCisg
ICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIW5vZGUtPmlzRG9jdW1lbnROb2RlKCkp
CiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgbV9ub2RlVG9Gb2N1cyA9
IG5vZGU7CiAKQEAgLTExNTksNyArMTE1OSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zCiB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRNb3VzZWRPdmVyTm9kZSgpCiB7CiAgICAg
Tm9kZSogbm9kZSA9IG1fbW91c2VkT3Zlck5vZGUuZ2V0KCk7Ci0gICAgd2hpbGUgKG5vZGUgJiYg
bm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUpCisgICAgaWYgKG5vZGUgJiYgbm9k
ZS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAg
IGlmIChub2RlICYmIG1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcpCiAgICAgICAgIG1fb3Zl
cmxheS0+aGlnaGxpZ2h0Tm9kZShub2RlLCAqbV9pbnNwZWN0TW9kZUhpZ2hsaWdodENvbmZpZyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IGRhZDAwMmIxOTY4YWQw
YjQyNmZiMTJiN2E2NWEwZjM3Mzg2YmU4YmIuLjA1OWY0NWQ2MjlmNTg4NjViNDA3Y2NiZTFhNzJh
ZDJlZGY1M2Q2YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTI2MCw2ICsxMjYwLDE1IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmJlZ2luRHJhZyhEcmFnSXRl
bSBkcmFnSXRlbSwgRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQb2ludCYKICAgICBjbGllbnQoKS5i
ZWdpbkRyYWcoV1RGTW92ZShkcmFnSXRlbSksIGZyYW1lLCBtb3VzZURvd25Qb2ludEluUm9vdFZp
ZXdDb29yZGluYXRlcywgbW91c2VEcmFnZ2VkUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIGRh
dGFUcmFuc2ZlciwgZHJhZ1NvdXJjZUFjdGlvbik7CiB9CiAKK3N0YXRpYyBSZWZQdHI8RWxlbWVu
dD4gY29udGFpbmluZ0xpbmtFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgZm9yIChh
dXRvJiBjdXJyZW50RWxlbWVudCA6IGxpbmVhZ2VPZlR5cGU8RWxlbWVudD4oZWxlbWVudCkpIHsK
KyAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmlzTGluaygpKQorICAgICAgICAgICAgcmV0dXJu
ICZjdXJyZW50RWxlbWVudDsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIHZvaWQg
RHJhZ0NvbnRyb2xsZXI6OmRvU3lzdGVtRHJhZyhEcmFnSW1hZ2UgaW1hZ2UsIGNvbnN0IEludFBv
aW50JiBkcmFnTG9jLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIEZyYW1lJiBmcmFtZSwgY29u
c3QgRHJhZ1N0YXRlJiBzdGF0ZSwgUHJvbWlzZWRBdHRhY2htZW50SW5mbyYmIHByb21pc2VkQXR0
YWNobWVudEluZm8pCiB7CiAgICAgbV9kaWRJbml0aWF0ZURyYWcgPSB0cnVlOwpAQCAtMTI5Niwx
OCArMTMwNSw3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvU3lzdGVtRHJhZyhEcmFnSW1hZ2Ug
aW1hZ2UsIGNvbnN0IEludFBvaW50JiBkcmFnTG9jLCBjb25zCiAgICAgICAgICAgICBpdGVtLmRy
YWdQcmV2aWV3RnJhbWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBlbGVtZW50LT5ib3VuZHNJblJv
b3RWaWV3U3BhY2UoKTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBsaW5r
OwotICAgICAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgICAgICBsaW5rID0gZWxl
bWVudDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnRFbGVt
ZW50IDogZWxlbWVudExpbmVhZ2UoZWxlbWVudC5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudEVsZW1lbnQuaXNMaW5rKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbGluayA9
ICZjdXJyZW50RWxlbWVudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsaW5rKSB7Cisg
ICAgICAgIGlmIChhdXRvIGxpbmsgPSBjb250YWluaW5nTGlua0VsZW1lbnQoKmVsZW1lbnQpKSB7
CiAgICAgICAgICAgICBhdXRvIHRpdGxlQXR0cmlidXRlID0gbGluay0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnRpdGxlQXR0cik7CiAgICAgICAgICAgICBpdGVt
LnRpdGxlID0gdGl0bGVBdHRyaWJ1dGUuaXNFbXB0eSgpID8gbGluay0+aW5uZXJUZXh0KCkgOiB0
aXRsZUF0dHJpYnV0ZS5zdHJpbmcoKTsKICAgICAgICAgICAgIGl0ZW0udXJsID0gZnJhbWUuZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGxp
bmstPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggODhjYTNlNTAz
NzM3MzAxNWM1MjAzMGYwNTQ4YzBmYjMzMmUxMDc2ZC4uZmNhZjAwYzUwYmJmNjAzZWYzYTNhOWZk
ODM0ZDNjOTllMzMzYjk1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCisjaW5jbHVkZSAi
RWxlbWVudEFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVu
dC5oIgpAQCAtNDgxLDYgKzQ4Myw3IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6c3R5bGVDaGFu
Z2VkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSoKIH0KIAogI2lm
IEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCisKIGJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6aXNvbGF0
ZXNCbGVuZGluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIHN0eWxl
LnN2Z1N0eWxlKCkuaXNvbGF0ZXNCbGVuZGluZygpIHx8IHN0eWxlLmhhc0ZpbHRlcigpIHx8IHN0
eWxlLmhhc0JsZW5kTW9kZSgpIHx8IHN0eWxlLm9wYWNpdHkoKSA8IDEuMGY7CkBAIC00OTEsMjAg
KzQ5NCwxNiBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OnVwZGF0ZU1hc2tlZEFuY2VzdG9yU2hv
dWxkSXNvbGF0ZUJsZW5kaW5nKGNvbnN0IFJlbmRlckVsZQogICAgIEFTU0VSVChyZW5kZXJlci5l
bGVtZW50KCkpOwogICAgIEFTU0VSVChyZW5kZXJlci5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgp
KTsKIAotICAgIGJvb2wgbWFza2VkQW5jZXN0b3JTaG91bGRJc29sYXRlQmxlbmRpbmcgPSByZW5k
ZXJlci5zdHlsZSgpLmhhc0JsZW5kTW9kZSgpOwotICAgIGZvciAoYXV0byogYW5jZXN0b3IgPSBy
ZW5kZXJlci5lbGVtZW50KCktPnBhcmVudEVsZW1lbnQoKTsgYW5jZXN0b3IgJiYgYW5jZXN0b3It
PmlzU1ZHRWxlbWVudCgpOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRFbGVtZW50KCkpIHsK
LSAgICAgICAgaWYgKCFkb3duY2FzdDxTVkdFbGVtZW50PigqYW5jZXN0b3IpLmlzU1ZHR3JhcGhp
Y3NFbGVtZW50KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25zdCBhdXRv
KiBzdHlsZSA9IGFuY2VzdG9yLT5jb21wdXRlZFN0eWxlKCk7CisgICAgZm9yIChhdXRvJiBhbmNl
c3RvciA6IGFuY2VzdG9yc09mVHlwZTxTVkdHcmFwaGljc0VsZW1lbnQ+KCpyZW5kZXJlci5lbGVt
ZW50KCkpKSB7CisgICAgICAgIGF1dG8qIHN0eWxlID0gYW5jZXN0b3IuY29tcHV0ZWRTdHlsZSgp
OwogICAgICAgICBpZiAoIXN0eWxlIHx8ICFpc29sYXRlc0JsZW5kaW5nKCpzdHlsZSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoYW5jZXN0b3ItPmNvbXB1dGVkU3R5bGUo
KS0+c3ZnU3R5bGUoKS5oYXNNYXNrZXIoKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFNWR0dyYXBo
aWNzRWxlbWVudD4oKmFuY2VzdG9yKS5zZXRTaG91bGRJc29sYXRlQmxlbmRpbmcobWFza2VkQW5j
ZXN0b3JTaG91bGRJc29sYXRlQmxlbmRpbmcpOwotCisgICAgICAgIGlmIChzdHlsZS0+c3ZnU3R5
bGUoKS5oYXNNYXNrZXIoKSkKKyAgICAgICAgICAgIGFuY2VzdG9yLnNldFNob3VsZElzb2xhdGVC
bGVuZGluZyhyZW5kZXJlci5zdHlsZSgpLmhhc0JsZW5kTW9kZSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIH0KKwogI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCmluZGV4IDk4
ZmNmZmJjYTRkNzEyNjdlNzQ1ZmVkYjliMzBlODBkMGM5YjYyY2YuLjc2NmExMjhjZmM1ODUyYjdh
NjUyNzQwODNmZjY0YWIxOGEwYWZjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaApAQCAtMTQx
LDYgKzE0MSw4IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8U1ZHQXR0cmlidXRlQW5pbWF0b3I+IGNy
ZWF0ZUFuaW1hdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBBbmltYXRpb25Nb2RlLCBDYWxjTW9k
ZSwgYm9vbCBpc0FjY3VtdWxhdGVkLCBib29sIGlzQWRkaXRpdmUpOwogICAgIHZvaWQgYW5pbWF0
b3JXaWxsQmVEZWxldGVkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAorICAgIGNvbnN0IFJlbmRl
clN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkID0gUHNldWRvSWQ6Ok5vbmUpIGZpbmFsOwor
CiAgICAgLy8gVGhlc2UgYXJlIG5lZWRlZCBmb3IgdGhlIFJlbmRlclRyZWUsIGFuaW1hdGlvbiBh
bmQgRE9NLgogICAgIFN0cmluZyBjbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzTmFt
ZS0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBTVkdBbmltYXRlZFN0cmluZyYgY2xhc3NOYW1lQW5p
bWF0ZWQoKSB7IHJldHVybiBtX2NsYXNzTmFtZTsgfQpAQCAtMTczLDggKzE3NSw2IEBAIHByb3Rl
Y3RlZDoKICAgICB2b2lkIHdpbGxSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdlKSBvdmVycmlkZTsK
IAogcHJpdmF0ZToKLSAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9J
ZCA9IFBzZXVkb0lkOjpOb25lKSBmaW5hbDsKLQogICAgIHZpcnR1YWwgdm9pZCBjbGVhclRhcmdl
dCgpIHsgfQogCiAgICAgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZXNJZk5lZWRlZCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCA3
N2Q5NGFmZTg1ZWJhMTY0MjZhNDE5N2Q3ZjkwNTY4YzNjMzZkMGFkLi5mNGVmZmVjOGVmNWQ0Nzdl
NDFjN2ZiMDc4ZTYyOTMwMjI1ODczY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMjU5LDYgKzI1OSwzOCBAQCB2b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpwYXVzZVBhcnNpbmcoKQogICAgIG1fcGFyc2VyUGF1c2VkID0gdHJ1ZTsK
IH0KIAorc3RydWN0IFhNTFBhcnNpbmdOYW1lc3BhY2VzIHsKKyAgICBBdG9tU3RyaW5nIGRlZmF1
bHROYW1lc3BhY2U7CisgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBBdG9tU3RyaW5nPiBwcmVmaXhO
YW1lc3BhY2VzOworfTsKKworc3RhdGljIFhNTFBhcnNpbmdOYW1lc3BhY2VzIGZpbmRYTUxQYXJz
aW5nTmFtZXNwYWNlcyhFbGVtZW50KiBjb250ZXh0RWxlbWVudCkKK3sKKyAgICBpZiAoIWNvbnRl
eHRFbGVtZW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgWE1MUGFyc2luZ05hbWVzcGFj
ZXMgcmVzdWx0OworCisgICAgYm9vbCBzdG9wTG9va2luZ0ZvckRlZmF1bHROYW1lc3BhY2UgPSBm
YWxzZTsKKworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpbmVhZ2VPZlR5cGU8RWxlbWVudD4o
KmNvbnRleHRFbGVtZW50KSkgeworICAgICAgICBpZiAoaXM8U1ZHRm9yZWlnbk9iamVjdEVsZW1l
bnQ+KGVsZW1lbnQpKQorICAgICAgICAgICAgc3RvcExvb2tpbmdGb3JEZWZhdWx0TmFtZXNwYWNl
ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoIXN0b3BMb29raW5nRm9yRGVmYXVsdE5hbWVzcGFj
ZSkKKyAgICAgICAgICAgIHJlc3VsdC5kZWZhdWx0TmFtZXNwYWNlID0gZWxlbWVudC5uYW1lc3Bh
Y2VVUkkoKTsKKworICAgICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlcygpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBlbGVtZW50
LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlLnByZWZp
eCgpID09IHhtbG5zQXRvbSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5wcmVmaXhOYW1lc3Bh
Y2VzLnNldChhdHRyaWJ1dGUubG9jYWxOYW1lKCksIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIGJvb2wgWE1MRG9jdW1lbnRQ
YXJzZXI6OnBhcnNlRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmIGNodW5rLCBEb2N1bWVu
dEZyYWdtZW50JiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIFBhcnNlckNvbnRl
bnRQb2xpY3kgcGFyc2VyQ29udGVudFBvbGljeSkKIHsKICAgICBpZiAoIWNodW5rLmxlbmd0aCgp
KQpAQCAtMjcyLDI4ICszMDQsOCBAQCBib29sIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZURvY3Vt
ZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiBjaHVuaywgRG9jdW1lbnRGcmFnbQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBIYXNoTWFwPEF0b21TdHJpbmcsIEF0b21TdHJpbmc+
IHByZWZpeFRvTmFtZXNwYWNlTWFwOwotICAgIEF0b21TdHJpbmcgZGVmYXVsdE5hbWVzcGFjZVVS
STsKLSAgICBib29sIHN0b3BMb29raW5nRm9yRGVmYXVsdE5hbWVzcGFjZVVSSSA9IGZhbHNlOwot
ICAgIAotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRMaW5lYWdlKGNvbnRleHRFbGVt
ZW50KSkgewotICAgICAgICBpZiAoaXM8U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ+KGVsZW1lbnQp
KQotICAgICAgICAgICAgc3RvcExvb2tpbmdGb3JEZWZhdWx0TmFtZXNwYWNlVVJJID0gdHJ1ZTsK
LSAgICAgICAgZWxzZSBpZiAoIXN0b3BMb29raW5nRm9yRGVmYXVsdE5hbWVzcGFjZVVSSSkKLSAg
ICAgICAgICAgIGRlZmF1bHROYW1lc3BhY2VVUkkgPSBlbGVtZW50Lm5hbWVzcGFjZVVSSSgpOwot
Ci0gICAgICAgIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogZWxlbWVu
dC5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5wcmVm
aXgoKSA9PSB4bWxuc0F0b20oKSkKLSAgICAgICAgICAgICAgICBwcmVmaXhUb05hbWVzcGFjZU1h
cC5zZXQoYXR0cmlidXRlLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSk7Ci0gICAgICAg
ICAgICBlbHNlIGlmICghc3RvcExvb2tpbmdGb3JEZWZhdWx0TmFtZXNwYWNlVVJJICYmIGF0dHJp
YnV0ZS5wcmVmaXgoKSA9PSB4bWxuc0F0b20oKSkKLSAgICAgICAgICAgICAgICBkZWZhdWx0TmFt
ZXNwYWNlVVJJID0gYXR0cmlidXRlLnZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBh
dXRvIHBhcnNlciA9IFhNTERvY3VtZW50UGFyc2VyOjpjcmVhdGUoZnJhZ21lbnQsIFdURk1vdmUo
cHJlZml4VG9OYW1lc3BhY2VNYXApLCBkZWZhdWx0TmFtZXNwYWNlVVJJLCBwYXJzZXJDb250ZW50
UG9saWN5KTsKKyAgICBhdXRvIG5hbWVzcGFjZXMgPSBmaW5kWE1MUGFyc2luZ05hbWVzcGFjZXMo
Y29udGV4dEVsZW1lbnQpOworICAgIGF1dG8gcGFyc2VyID0gWE1MRG9jdW1lbnRQYXJzZXI6OmNy
ZWF0ZShmcmFnbWVudCwgV1RGTW92ZShuYW1lc3BhY2VzLnByZWZpeE5hbWVzcGFjZXMpLCBuYW1l
c3BhY2VzLmRlZmF1bHROYW1lc3BhY2UsIHBhcnNlckNvbnRlbnRQb2xpY3kpOwogICAgIGJvb2wg
d2VsbEZvcm1lZCA9IHBhcnNlci0+YXBwZW5kRnJhZ21lbnRTb3VyY2UoY2h1bmspOwogICAgIC8v
IERvIG5vdCBjYWxsIGZpbmlzaCgpLiBUaGUgZmluaXNoKCkgYW5kIGRvRW5kKCkgaW1wbGVtZW50
YXRpb25zIHRvdWNoIHRoZSBtYWluIGRvY3VtZW50IGFuZCBsb2FkZXIgYW5kIGNhbiBjYXVzZSBj
cmFzaGVzIGluIHRoZSBmcmFnbWVudCBjYXNlLgogICAgIHBhcnNlci0+ZGV0YWNoKCk7IC8vIEFs
bG93cyB+RG9jdW1lbnRQYXJzZXIgdG8gYXNzZXJ0IGl0IHdhcyBkZXRhY2hlZCBiZWZvcmUgZGVz
dHJ1Y3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0b21hdGlv
bi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCmluZGV4IDNmNWI2MTgx
ZTA2ZTBhODQ2ODhiZGE5MTZmMTBkODdhNjFkMTRiZTcuLjZiMjc3M2VjOTczNTE4YTAxZTE0NTU0
MDUyNzI1ZTU1OTQwNmJjMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCkBA
IC01NTksMTIgKzU1OSwxMSBAQCBzdGF0aWMgV2ViQ29yZTo6RWxlbWVudCogY29udGFpbmVyRWxl
bWVudEZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCYgZWxlbWVudCkKICAgICAvLyDCpzEzLiBF
bGVtZW50IFN0YXRlLgogICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2Vi
ZHJpdmVyLXNwZWMuaHRtbCNkZm4tY29udGFpbmVyLgogICAgIGlmIChpczxXZWJDb3JlOjpIVE1M
T3B0aW9uRWxlbWVudD4oZWxlbWVudCkpIHsKLSAgICAgICAgYXV0byYgb3B0aW9uRWxlbWVudCA9
IGRvd25jYXN0PFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KTsKICNpZiBFTkFC
TEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICAgICAgaWYgKGF1dG8qIHBhcmVudEVsZW1lbnQgPSBv
cHRpb25FbGVtZW50Lm93bmVyRGF0YUxpc3RFbGVtZW50KCkpCisgICAgICAgIGlmIChhdXRvKiBw
YXJlbnRFbGVtZW50ID0gV2ViQ29yZTo6YW5jZXN0b3JzT2ZUeXBlPFdlYkNvcmU6OkhUTUxEYXRh
TGlzdEVsZW1lbnQ+KGVsZW1lbnQpLmZpcnN0KCkpCiAgICAgICAgICAgICByZXR1cm4gcGFyZW50
RWxlbWVudDsKICNlbmRpZgotICAgICAgICBpZiAoYXV0byogcGFyZW50RWxlbWVudCA9IG9wdGlv
bkVsZW1lbnQub3duZXJTZWxlY3RFbGVtZW50KCkpCisgICAgICAgIGlmIChhdXRvKiBwYXJlbnRF
bGVtZW50ID0gZG93bmNhc3Q8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpLm93
bmVyU2VsZWN0RWxlbWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHBhcmVudEVsZW1lbnQ7CiAK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggNzFhNzg2MGQ1OGY2ZDUyMTUxNGQzMzdiOGMwNzIxNjY4
ODJmMDZmMC4uZDQ1ZDE1MjUyOWEyMjQ4ZjIyZmZmOTlhMDMwNDBkMDczODFkZGQxOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYg
KzU1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnRMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0VkaXRvci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRWxlbWVudENoaWxkSXRlcmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50
SGFuZGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWUuaD4KQEAgLTcxLDcgKzcyLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0pTRWxlbWVudC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSlNGaWxlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU1Jhbmdl
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob2RlVHJhdmVyc2FsLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5Eb2N1bWVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyVHJlZUFzVGV4dC5oPgpAQCAtNjY2LDE3ICs2NjYsOCBAQCBib29sIFdl
YkZyYW1lOjpjb250YWluc0FueUZvcm1FbGVtZW50cygpIGNvbnN0CiAgICAgaWYgKCFtX2NvcmVG
cmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IG1fY29yZUZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVu
dEVsZW1lbnQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0g
ICAgICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmIChpczxIVE1MRm9ybUVsZW1lbnQ+KCpub2RlKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byogZG9jdW1lbnQgPSBt
X2NvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQgJiYgY2hpbGRyZW5P
ZlR5cGU8SFRNTEZvcm1FbGVtZW50PigqZG9jdW1lbnQpLmZpcnN0KCk7CiB9CiAKIGJvb2wgV2Vi
RnJhbWU6OmNvbnRhaW5zQW55Rm9ybUNvbnRyb2xzKCkgY29uc3QKQEAgLTY4NCwxNCArNjc1LDEy
IEBAIGJvb2wgV2ViRnJhbWU6OmNvbnRhaW5zQW55Rm9ybUNvbnRyb2xzKCkgY29uc3QKICAgICBp
ZiAoIW1fY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbV9jb3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgYXV0byogZG9jdW1l
bnQgPSBtX2NvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1l
bnRFbGVtZW50KCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewot
ICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpIHx8IGlzPEhUTUxTZWxlY3RF
bGVtZW50Pigqbm9kZSkgfHwgaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKm5vZGUpKQorICAgIGZv
ciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxFbGVtZW50PigqZG9jdW1lbnQpKSB7Cisg
ICAgICAgIGlmIChpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oY2hpbGQpIHx8IGlzPEhU
TUxTZWxlY3RFbGVtZW50PihjaGlsZCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCA5NzkxMzA5ZWY4ZWUzNWIzYWY4ZTNmNjYwMzQ2
MTU0NGY5M2M4MzliLi4wMzYyODhhMjdmMzlhM2E0M2E3YmM3MDVjMjcwYjc2ZGFkYmNhM2I2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQpAQCAtMjUxNCwxMSArMjUxNCwxMiBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBdXRvY29y
cmVjdGlvbkNvbnRleHQoKQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SGFuZGxl
QXV0b2NvcnJlY3Rpb25Db250ZXh0KGF1dG9jb3JyZWN0aW9uQ29udGV4dCgpKSk7CiB9CiAKLXN0
YXRpYyBIVE1MQW5jaG9yRWxlbWVudCogY29udGFpbmluZ0xpbmtFbGVtZW50KEVsZW1lbnQqIGVs
ZW1lbnQpCitzdGF0aWMgSFRNTEFuY2hvckVsZW1lbnQqIGNvbnRhaW5pbmdMaW5rQW5jaG9yRWxl
bWVudChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGZvciAoYXV0byYgY3VycmVudEVsZW1lbnQg
OiBlbGVtZW50TGluZWFnZShlbGVtZW50KSkgewotICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQu
aXNMaW5rKCkgJiYgaXM8SFRNTEFuY2hvckVsZW1lbnQ+KGN1cnJlbnRFbGVtZW50KSkKLSAgICAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oJmN1cnJlbnRFbGVtZW50
KTsKKyAgICAvLyBGSVhNRTogVGhlcmUgaXMgY29kZSBpbiB0aGUgZHJhZyBjb250cm9sbGVyIHRo
YXQgc3VwcG9ydHMgYW55IGxpbmssIGV2ZW4gaWYgaXQncyBub3QgYW4gSFRNTEFuY2hvckVsZW1l
bnQuIFdoeSBpcyB0aGlzIGRpZmZlcmVudD8KKyAgICBmb3IgKGF1dG8mIGN1cnJlbnRFbGVtZW50
IDogbGluZWFnZU9mVHlwZTxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAg
aWYgKGN1cnJlbnRFbGVtZW50LmlzTGluaygpKQorICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50
RWxlbWVudDsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0yNjg4LDcgKzI2ODks
NyBAQCBzdGF0aWMgdm9pZCBlbGVtZW50UG9zaXRpb25JbmZvcm1hdGlvbihXZWJQYWdlJiBwYWdl
LCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBJbgogewogICAgIEVsZW1lbnQqIGxpbmtFbGVtZW50
ID0gbnVsbHB0cjsKICAgICBpZiAoZWxlbWVudC5yZW5kZXJlcigpICYmIGVsZW1lbnQucmVuZGVy
ZXIoKS0+aXNSZW5kZXJJbWFnZSgpKQotICAgICAgICBsaW5rRWxlbWVudCA9IGNvbnRhaW5pbmdM
aW5rRWxlbWVudCgmZWxlbWVudCk7CisgICAgICAgIGxpbmtFbGVtZW50ID0gY29udGFpbmluZ0xp
bmtBbmNob3JFbGVtZW50KGVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNMaW5rKCkp
CiAgICAgICAgIGxpbmtFbGVtZW50ID0gJmVsZW1lbnQ7CiAKQEAgLTI5NTcsNyArMjk1OCw3IEBA
IHZvaWQgV2ViUGFnZTo6cGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1aW50MzJfdCBhY3Rpb24pCiAg
ICAgICAgIGlmIChpczxSZW5kZXJJbWFnZT4oKmVsZW1lbnQucmVuZGVyZXIoKSkpIHsKICAgICAg
ICAgICAgIFVSTCB1cmw7CiAgICAgICAgICAgICBTdHJpbmcgdGl0bGU7Ci0gICAgICAgICAgICBp
ZiAoYXV0byogbGlua0VsZW1lbnQgPSBjb250YWluaW5nTGlua0VsZW1lbnQoJmVsZW1lbnQpKSB7
CisgICAgICAgICAgICBpZiAoYXV0byogbGlua0VsZW1lbnQgPSBjb250YWluaW5nTGlua0FuY2hv
ckVsZW1lbnQoZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICB1cmwgPSBsaW5rRWxlbWVudC0+
aHJlZigpOwogICAgICAgICAgICAgICAgIHRpdGxlID0gbGlua0VsZW1lbnQtPmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjp0aXRsZUF0dHIpOwogICAgICAgICAgICAg
ICAgIGlmICghdGl0bGUubGVuZ3RoKCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391472</attachid>
            <date>2020-02-22 18:07:28 -0800</date>
            <delta_ts>2020-02-23 14:43:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208097-20200222180727.patch</filename>
            <type>text/plain</type>
            <size>77656</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGNhYzE5YjdjYzYxNTA5
NzVmMDQ4YmE2YTg5NTJlZTg0ZmU4N2Q2OC4uMmI2YzJiY2NjMmIxMTFmYmRkMTdlOGU2NGU1ZDM1
OTQwOGEyYzZjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NSBAQAorMjAyMC0wMi0yMiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIERPTSBlbGVtZW50IGl0
ZXJhdG9ycyBtb3JlLCBhbmQgbW9yZSBjb25zaXN0ZW50bHkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODA5NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gQWRkZWQgdXNlcyBvZiBlbGVtZW50IGl0ZXJh
dG9ycyBpbiBtYW55IHBsYWNlcyB0aGF0IGhhZCBoYW5kLXdyaXR0ZW4gbG9vcHMuCisgICAgICAg
IC0gRWxpbWluYXRlZCBtb3N0IHVzZXMgb2YgZWxlbWVudEFuY2VzdG9ycywgZWxlbWVudENoaWxk
cmVuLCBlbGVtZW50RGVzY2VuZGFudHMsCisgICAgICAgICAgYW5kIGVsZW1lbnRMaW5lYWdlIGZ1
bmN0aW9ucyBhbmQgdXNlIGFuY2VzdG9yc09mVHlwZTxFbGVtZW50PiwKKyAgICAgICAgICBjaGls
ZHJlbk9mVHlwZTxFbGVtZW50PiwgZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4gYW5kIGxpbmVh
Z2VPZlR5cGU8RWxlbWVudD4KKyAgICAgICAgICBpbnN0ZWFkLiBJbiBwYXJ0aWN1bGFyLCBkZXNj
ZW5kYW50c09mVHlwZTxFbGVtZW50PiB1c2VzIGEgYmV0dGVyIHRyYXZlcnNhbAorICAgICAgICAg
IGFsZ29yaXRobSB0aGFuIGVsZW1lbnREZXNjZW5kYW50cyBkb2VzLgorCisgICAgICAgIC0gVW5y
ZWxhdGVkOiBPbWl0IHRlbXBsYXRlIGFyZ3VtZW50cyBpbiB2YXJpb3VzIGNhc2VzIHdoZXJlIHRo
ZSBDKysgbGFuZ3VhZ2UgbGV0cworICAgICAgICAgIHVzIGp1c3QgZ2l2ZSB0aGUgbmFtZSBvZiB0
aGUgY2xhc3MgdGVtcGxhdGUgd2l0aG91dCByZXBlYXRpbmcgdGhlIGFyZ3VtZW50cy4KKyAgICAg
ICAgLSBVbnJlbGF0ZWQ6IFJlbW92ZSBzb21lIHVzZXMgb2YgdGhlIGluZWZmaWNpZW50IE5vZGU6
Om5vZGVUeXBlIGZ1bmN0aW9uLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6bW91c2VCdXR0b25MaXN0ZW5lciBjb25zdCk6IFVzZQorICAgICAgICBsaW5lYWdlT2ZU
eXBlIGluc3RlYWQgb2YgZWxlbWVudExpbmVhZ2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdCBjb25zdCk6
CisgICAgICAgIFVzZSBhbmNlc3RvcnNPZlR5cGUgaW5zdGVhZCBvZiBhIGhhbmR3cml0dGVuIGxv
b3AuCisKKyAgICAgICAgKiBkb20vQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9uLmg6CisgICAgICAg
IChXZWJDb3JlOjpBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb246OkFsbERlc2NlbmRhbnRzQ29sbGVj
dGlvbik6IFJlbW92ZWQKKyAgICAgICAgY2xhc3MgdGVtcGxhdGUgYXJndW1lbnRzLgorICAgICAg
ICAqIGRvbS9DbGFzc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNsYXNzQ29sbGVj
dGlvbjo6Q2xhc3NDb2xsZWN0aW9uKTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnRG
cmFnbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50OjpnZXRFbGVt
ZW50QnlJZCBjb25zdCk6IFVzZQorICAgICAgICBkZXNjZW5kYW50c09mVHlwZSBpbnN0ZWFkb2Yg
ZWxlbWVudERlc2NlbmRhbnRzLgorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlIGNvbnN0KTogVXNl
IGxpbmVhZ2VPZlR5cGUKKyAgICAgICAgaW5zdGVhZCBvZiBhIGhhbmRyd2l0dGVuIGxvb3AuCisK
KyAgICAgICAgKiBkb20vU2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckRhdGFMaXN0OjpjbG9zZXN0IGNvbnN0KTogVXNlIGxpbmVhZ2VPZlR5cGUgaW5zdGVhZCBv
ZiBhbgorICAgICAgICBleHBsaWNpdCBsb29wLgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudHNG
b3JMb2NhbE5hbWUpOiBVc2UgZGVzY2VuZGFudHNPZlR5cGUgaW5zdGVhZCBvZiBlbGVtZW50RGVz
Y2VuZGFudHMuCisgICAgICAgIChXZWJDb3JlOjphbnlFbGVtZW50KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlU2luZ2xlVGFnTmFtZVNlbGVjdG9y
RGF0YSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6
ZXhlY3V0ZVNpbmdsZUNsYXNzTmFtZVNlbGVjdG9yRGF0YSBjb25zdCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZVNpbmdsZVNlbGVjdG9yRGF0YSBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0
ZVNpbmdsZU11bHRpU2VsZWN0b3JEYXRhIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXIg
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1
dGVDb21waWxlZFNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNp
bmdsZU11bHRpU2VsZWN0b3JEYXRhIGNvbnN0KTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vVGFn
Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUYWdDb2xsZWN0aW9uTlM6OlRhZ0Nv
bGxlY3Rpb25OUyk6IFJlbW92ZWQgY2xhc3MgdGVtcGxhdGUgYXJndW1lbnRzLgorICAgICAgICAo
V2ViQ29yZTo6VGFnQ29sbGVjdGlvbjo6VGFnQ29sbGVjdGlvbik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRhZ0NvbGxlY3Rpb246OkhUTUxUYWdDb2xsZWN0aW9uKTogRGl0dG8uCisK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCBjb25zdCk6IFVzZSB0aGUgZnVuY3Rpb24K
KyAgICAgICAgZGVzY2VuZGFudHNPZlR5cGU8SFRNTEJvZHlFbGVtZW50PiBpbnN0ZWFkIG9mIGdl
dEVsZW1lbnRCeVRhZ05hbWUoYm9keVRhZykuCisgICAgICAgIEFsc28gbWVyZ2VkIGFwcGx5RWRp
dGluZ1N0eWxlVG9FbGVtZW50IGluIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFw
cGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50IGNvbnN0KTogRGVsZXRlZC4KKworICAgICAgICAqIGVk
aXRpbmcvRWRpdG9yLmg6IERlbGV0ZWQgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQuCisKKyAg
ICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNj
YW5Gb3JGb3JtKTogQ2xlYW5lZCB1cCBkZXNjZW5kYW50c09mVHlwZSBsb29wIHNvIHRoZXJlJ3Mg
bm8KKyAgICAgICAgZXhwbGljaXQgdXNlIG9mIGVuZC4gQWxzbyBjaGFuZ2VkIGlmIG5lc3Rpbmcg
YSBsaXR0bGUgYml0LgorCisgICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25SdWxlTWF0Y2hlcjo6aXNFeGNs
dWRlZCk6IFVzZSBsaW5lYWdlT2ZUeXBlIGluc3RlYWQgb2YKKyAgICAgICAgZWxlbWVudExpbmVh
Z2UuCisKKyAgICAgICAgKiBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmg6IFJlbW92ZWQgY2xhc3Mg
dGVtcGxhdGUgYXJndW1lbnRzLgorCisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjplbGVtZW50QWZmZWN0c0RpcmVjdGlvbmFsaXR5KTogUmVmYWN0b3Jl
ZCBzbyB3ZSBnZXQgYSBtb3JlIGVmZmljaWVudAorICAgICAgICBpbXBsZW1lbnRhdGlvbiB3aGVu
IHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50IGlzIGtub3duLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIFVzZSBsaW5lYWdlT2ZUeXBlIGluc3RlYWQgb2YgZWxlbWVudExp
bmVhZ2UuCisKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50Lmg6IFJlbW92ZWQgc29tZSB1bmVl
ZWRlZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kV2lkZ2V0UmVuZGVyZXIpOiBVc2UgYW5j
ZXN0b3JzT2ZUeXBlIGluc3RlYWQgb2YgYSBsb29wLgorCisgICAgICAgICogaHRtbC9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OmVuY2xvc2luZ0Zvcm1Db250cm9sRWxlbWVudCk6IERlbGV0ZWQuCisKKyAgICAgICAg
KiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaDogRGVsZXRlZCB1bnVzZWQgZW5jbG9zaW5n
Rm9ybUNvbnRyb2xFbGVtZW50LgorCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlv
bjo6SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24pOiBSZW1vdmVkCisgICAgICAgIGNsYXNzIHRl
bXBsYXRlIGFyZ3VtZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbHNDb2xs
ZWN0aW9uOjpvd25lck5vZGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uOjppbnZhbGlkYXRlQ2FjaGVGb3JEb2N1bWVudCk6IERpdHRv
LgorCisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6Om93bmVyU2VsZWN0RWxlbWVudCBjb25zdCk6IFVz
ZSBhbmNlc3RvcnNPZlR5cGUKKyAgICAgICAgaW5zdGVhZCBvZiBhIGhhbmQtd3JpdHRlbiBsb29w
LgorCisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOiBVc2UgYW5jZXN0b3JzT2ZU
eXBlIGluc3RlYWQgb2YKKyAgICAgICAgY2FsbGluZyBvd25lckRhdGFMaXN0RWxlbWVudC4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Ojpvd25lckRhdGFMaXN0RWxl
bWVudCBjb25zdCk6IERlbGV0ZWQuIFNpbmNlIHRoZQorICAgICAgICBzYW1lIG9wdGlvbiBlbGVt
ZW50IGNhbiBiZSB1c2VkIGJ5IG11bHRpcGxlIG5lc3RlZCBkYXRhIGxpc3QgZWxlbWVudHMsIHRo
ZQorICAgICAgICBjb25jZXB0IG9mIGEgc2luZ2xlICJvd25lciIgZGF0YSBsaXN0IGVsZW1lbnQg
aXNuJ3QgY29ycmVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Ojpvd25l
clNlbGVjdEVsZW1lbnQgY29uc3QpOiBVc2UgYW5jZXN0b3JzT2ZUeXBlCisgICAgICAgIGluc3Rl
YWQgb2YgYSBoYW5kLXdyaXR0ZW4gbG9vcC4KKworICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVs
ZW1lbnQuaDogRGVsZXRlZCBvd25lckRhdGFMaXN0RWxlbWVudC4KKworICAgICAgICAqIGh0bWwv
SFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25z
Q29sbGVjdGlvbjo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uKTogUmVtb3ZlZCBjbGFzcworICAgICAg
ICB0ZW1wbGF0ZSBhcmd1bWVudHMuCisKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUNlbGxFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50OjphZGRpdGlv
bmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUgY29uc3QpOgorICAgICAgICBVc2UgYXV0byBz
aW5jZSBmaW5kUGFyZW50VGFibGUgbm93IHJldHVybnMgYSBjb25zdCB0YWJsZSBwb2ludGVyLgor
ICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVGFibGVDb2xFbGVtZW50OjphZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5
bGUgY29uc3QpOgorICAgICAgICBEaXR0by4KKworICAgICAgICAqIGh0bWwvSFRNTFRhYmxlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50OjpjcmVhdGVTaGFy
ZWRDZWxsU3R5bGUpOiBNYWRlIGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxl
bWVudDo6YWRkaXRpb25hbENlbGxTdHlsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRhYmxlRWxlbWVudDo6YWRkaXRpb25hbEdyb3VwU3R5bGUpOiBEaXR0by4KKworICAgICAgICAq
IGh0bWwvSFRNTFRhYmxlRWxlbWVudC5oOiBNYWRlIHRoZSBmdW5jdGlvbnMgY29uc3QsIGFuZCBt
X3NoYXJlZENlbGxTdHlsZQorICAgICAgICBtdXRhYmxlLgorCisgICAgICAgICogaHRtbC9IVE1M
VGFibGVQYXJ0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVQYXJ0RWxl
bWVudDo6ZmluZFBhcmVudFRhYmxlIGNvbnN0KTogVXNlIGFuY2VzdG9yc09mVHlwZQorICAgICAg
ICBpbnN0ZWFkIG9mIGEgaGFuZC13cml0dGVuIGxvb3AuIEFsc28gcmV2aXNlZCByZXR1cm4gdHlw
ZSB0byBiZSBjb25zdC1jb25zaXN0ZW50LgorCisgICAgICAgICogaHRtbC9IVE1MVGFibGVQYXJ0
RWxlbWVudC5oOiBVcGRhdGVkIHJldHVybiB0eXBlLgorCisgICAgICAgICogaHRtbC9IVE1MVGFi
bGVSb3dzQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29s
bGVjdGlvbjo6SFRNTFRhYmxlUm93c0NvbGxlY3Rpb24pOiBSZW1vdmVkIGNsYXNzCisgICAgICAg
IHRlbXBsYXRlIGFyZ3VtZW50cy4KKworICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyZW50SFRNTEVsZW1lbnQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpcmVj
dGlvbkZvckZvcm1EYXRhIGNvbnN0KTogVXNlCisgICAgICAgIGxpbmVhZ2VPZlR5cGUgcmF0aGVy
IHRoYW4gYSBoYW5kLXdyaXR0ZW4gbG9vcC4gQWxzbyBnb3QgcmlkIG9mIHRoZSBtdWx0aXBsZQor
ICAgICAgICBzdHJpbmdzIGluIHJldHVybiBwYXRocyBzaW5jZSB0aGUgZnVuY3Rpb24gYWx3YXlz
IHJldHVybnMgb25lIG9mIHR3byBzdHJpbmdzLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckF1ZGl0QWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBdWRpdEFjY2Vzc2liaWxpdHlPYmplY3Q6OmdldEVsZW1lbnRzQnlDb21wdXRlZFJvbGUp
OgorICAgICAgICBVc2UgZGVzY2VuZGFudHNPZlR5cGUgaW5zdGVhZCBvZiBlbGVtZW50RGVzY2Vu
ZGFudHMuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0FnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVz
Rm9yTm9kZSk6IFVzZSBhbmNlc3RvcnNPZlR5cGUKKyAgICAgICAgaW5zdGVhZCBvZiBhIGhhbmQt
d3JpdHRlbiBsb29wLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01B
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aW5zcGVjdCk6
IFVzZSBpc0VsZW1lbnROb2RlIGFuZCBpc0RvY3VtZW50Tm9kZQorICAgICAgICBpbnN0ZWFkIG9m
IHRoZSBtdWNoIHNsb3dlciBub2RlVHlwZS4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpoaWdobGlnaHRNb3VzZWRPdmVyTm9kZSk6IFVzZSBpc1RleHROb2RlIGluc3RlYWQg
b2YKKyAgICAgICAgdGhlIG11Y2ggc2xvd2VyIG5vZGVUeXBlLgorCisgICAgICAgICogcGFnZS9E
cmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb250YWluaW5nTGlua0VsZW1l
bnQpOiBBZGRlZC4gVXNlcyBsaW5lYWdlT2ZUeXBlIGluc3RlYWQgb2YgZWxlbWVudExpbmVhZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZG9TeXN0ZW1EcmFnKTogVXBkYXRl
ZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBw
b3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OnVwZGF0ZU1hc2tl
ZEFuY2VzdG9yU2hvdWxkSXNvbGF0ZUJsZW5kaW5nKToKKyAgICAgICAgVXNlIGFuY2VzdG9yc09m
VHlwZSBpbnN0ZWFkIG9mIGEgaGFuZC13cml0dGVuIGxvb3AuCisKKyAgICAgICAgKiBzdmcvU1ZH
RWxlbWVudC5oOiBNYWtlIGNvbXB1dGVkU3R5bGUgcHVibGljIHNvIHdlIGNhbiB1c2UgaXQgZXZl
biBhZnRlciBkb3duY2FzdGluZworICAgICAgICB0byBTVkdFbGVtZW50IG9yIGEgY2xhc3MgZGVy
aXZlZCBmcm9tIGl0LiBUaGlzIGFyaXNlcyBpbiB0aGUgcmV2aXNlZCB2ZXJzaW9uIG9mCisgICAg
ICAgIFNWR1JlbmRlclN1cHBvcnQ6OnVwZGF0ZU1hc2tlZEFuY2VzdG9yU2hvdWxkSXNvbGF0ZUJs
ZW5kaW5nLCB3aGljaCB3aWxsIG5vdyBiZSBhYmxlCisgICAgICAgIHRvIGNvbXBpbGUgYSBub24t
dmlydHVhbCBjYWxsIHRvIHRoZSBmdW5jdGlvbiBhcyBhIGJvbnVzLgorCisgICAgICAgICogeG1s
L3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kWE1M
UGFyc2luZ05hbWVzcGFjZXMpOiBGYWN0b3JlZCB0aGlzIGZ1bmN0aW9uIG91dCBmcm9tCisgICAg
ICAgIHBhcnNlRG9jdW1lbnRGcmFnbWVudC4gVXNlIGxpbmVhZ2VPZlR5cGUgaW5zdGVhZCBvZiBl
bGVtZW50TGluZWFnZS4gQWxzbyBhZGQgYSBudWxsCisgICAgICAgIGNoZWNrIHRoYXQgc2VlbXMg
dG8gaGF2ZSBiZWVuIG5lZWRlZCBiZWZvcmUuCisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVu
dFBhcnNlcjo6cGFyc2VEb2N1bWVudEZyYWdtZW50KTogVXNlIGZpbmRYTUxQYXJzaW5nTmFtZXNw
YWNlcy4KKwogMjAyMC0wMi0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgU29tZSBzbWFsbCBpbXByb3ZlbWVudHMgdG8gRE9NIGJpbmRpbmdzIGZvciBIVE1MIGNv
bGxlY3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDU2MTAyYmNjODhjYWI3YjA2OGI0ZjRlMmI1OTkyZjA3N2Rk
NGJlMzAuLjBmOTBmMDA1NDYxMTY3ODJjMzVlYWJjMjUxNjZlY2Q3ZDgyOTJlODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzAgQEAKKzIwMjAtMDItMjIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFVzZSBET00gZWxlbWVudCBpdGVyYXRvcnMgbW9yZSwgYW5kIG1vcmUg
Y29uc2lzdGVudGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDgwOTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6Y29udGFpbmVyRWxlbWVudEZvckVsZW1lbnQpOiBVc2UgYW5j
ZXN0b3JzT2ZUeXBlIHRvIGZpbmQgdGhlCisgICAgICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQgcmF0
aGVyIHRoYW4gYW4gb3duZXJEYXRhTGlzdEVsZW1lbnQgZnVuY3Rpb24uCisgICAgICAgIFdoaWxl
IHRoaXMgYmVoYXZpb3IgaXMgY29ycmVjdCBhcyBzcGVjaWZpZWQsIHRoZSBpZGVhIG9mIGFuICJv
d25lciIKKyAgICAgICAgZGF0YSBsaXN0IGVsZW1lbnQgZG9lc24ndCBtYWtlIHNlbnNlIHNpbmNl
IHRlY2huaWNhbGx5IHRoZSBzYW1lIG9wdGlvbgorICAgICAgICBjYW4gYmUgdXNlZCBmb3IgbXVs
dGlwbGUgbmVzdGVkIGRhdGEgbGlzdHMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y29udGFpbnNBbnlGb3Jt
RWxlbWVudHMgY29uc3QpOiBVc2UgY2hpbGRyZW5PZlR5cGUKKyAgICAgICAgaW5zdGVhZCBvZiBO
b2RlVHJhdmVyc2FsLgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y29udGFpbnNBbnlGb3Jt
Q29udHJvbHMgY29uc3QpOiBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29udGFpbmluZ0xpbmtBbmNob3JF
bGVtZW50KTogUmVuYW1lZCB0byBhZGQgdGhlIHdvcmQgImFuY2hvciIKKyAgICAgICAgc2luY2Ug
dGhpcyB3b24ndCByZXR1cm4gbGluayBlbGVtZW50cyB0aGF0IGFyZW4ndCBIVE1MQW5jaG9yRWxl
bWVudAorICAgICAgICBpbnN0YW5jZXMuIFVzZSBsaW5lYWdlT2ZUeXBlPEhUTUxBbmNob3JFbGVt
ZW50PiBpbnN0ZWFkIG9mIGVsZW1lbnRMaW5lYWdlCisgICAgICAgIHdpdGggYSBzZXBhcmF0ZSB0
eXBlIGNoZWNrLgorICAgICAgICAoV2ViS2l0OjplbGVtZW50UG9zaXRpb25JbmZvcm1hdGlvbik6
IFVwZGF0ZWQgZm9yIG5ldyBuYW1lLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3Jt
QWN0aW9uT25FbGVtZW50KTogRGl0dG8uCisKIDIwMjAtMDItMjEgIEthdGUgQ2hlbmV5ICA8a2F0
aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgQXBwLWJvdW5kIGRvbWFpbnMgc2hv
dWxkIGhhdmUgc2VwYXJhdGUgTmV0d29yayBTZXNzaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAppbmRleCAy
MDllYjhlNjU4ZTBiNzM0MThlYzJjZDAwY2Q4MGE0MTZmYTI5MzNhLi40NThhNDA1N2UyY2ZmZDJm
NmY4NWNlODAxY2FmOWQ2MWQyODAyOWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcApAQCAtMTA0NCw3ICsx
MDQ0LDcgQEAgRWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1vdXNlQnV0dG9uTGlz
dGVuZXIoTW91c2VCdXR0b25MaXN0ZW5lclJlc3VsdEYKIAogICAgIC8vIGNoZWNrIGlmIG91ciBw
YXJlbnQgaXMgYSBtb3VzZSBidXR0b24gbGlzdGVuZXIKICAgICAvLyBGSVhNRTogRG8gdGhlIGNv
bnRpbnVhdGlvbiBzZWFyY2ggbGlrZSBhbmNob3JFbGVtZW50IGRvZXMKLSAgICBmb3IgKGF1dG8m
IGVsZW1lbnQgOiBlbGVtZW50TGluZWFnZShpczxFbGVtZW50Pigqbm9kZSkgPyBkb3duY2FzdDxF
bGVtZW50Pihub2RlKSA6IG5vZGUtPnBhcmVudEVsZW1lbnQoKSkpIHsKKyAgICBmb3IgKGF1dG8m
IGVsZW1lbnQgOiBsaW5lYWdlT2ZUeXBlPEVsZW1lbnQ+KGlzPEVsZW1lbnQ+KCpub2RlKSA/IGRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKSA6ICpub2RlLT5wYXJlbnRFbGVtZW50KCkpKSB7CiAgICAg
ICAgIC8vIElmIHdlJ3ZlIHJlYWNoZWQgdGhlIGJvZHkgYW5kIHRoaXMgaXMgbm90IGEgY29udHJv
bCBlbGVtZW50LCBkbyBub3QgZXhwb3NlIHByZXNzIGFjdGlvbiBmb3IgdGhpcyBlbGVtZW50IHVu
bGVzcyBmaWx0ZXIgaXMgSW5jbHVkZUJvZHlFbGVtZW50LgogICAgICAgICAvLyBJdCBjYW4gY2F1
c2UgZmFsc2UgcG9zaXRpdmVzLCB3aGVyZSBldmVyeSBwaWVjZSBvZiB0ZXh0IGlzIGxhYmVsZWQg
YXMgYWNjZXB0aW5nIHByZXNzIGFjdGlvbnMuCiAgICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05h
bWUoYm9keVRhZykgJiYgaXNTdGF0aWNUZXh0KCkgJiYgZmlsdGVyID09IEV4Y2x1ZGVCb2R5RWxl
bWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDk2ZjMzY2I3MzRhNzA4MzY5YjRmM2JhM2Q1
NDg0ODhlNTA0OTU3NzAuLjhhODMwMGQwOTdlMTBmYzRmMzMwMzczMzQxYzExNGExNzE5YTMwMDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHlyaWdodCAo
QykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzc1LDIxICsyMzc1LDE5IEBAIEFYQ29yZU9iamVjdCog
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdChI
VE1MQXJlYUVsCiAgICAgaWYgKCFhcmVhKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG51bGxwdHI7Ci0gICAgZm9yIChFbGVtZW50
KiBtYXBQYXJlbnQgPSBhcmVhLT5wYXJlbnRFbGVtZW50KCk7IG1hcFBhcmVudDsgbWFwUGFyZW50
ID0gbWFwUGFyZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxNYXBF
bGVtZW50PigqbWFwUGFyZW50KSkgewotICAgICAgICAgICAgcGFyZW50ID0gYWNjZXNzaWJpbGl0
eVBhcmVudEZvckltYWdlTWFwKGRvd25jYXN0PEhUTUxNYXBFbGVtZW50PihtYXBQYXJlbnQpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIGF1dG8qIG1hcFBhcmVu
dCA9IGFuY2VzdG9yc09mVHlwZTxIVE1MTWFwRWxlbWVudD4oKmFyZWEpLmZpcnN0KCk7CisgICAg
aWYgKCFtYXBQYXJlbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byogcGFy
ZW50ID0gYWNjZXNzaWJpbGl0eVBhcmVudEZvckltYWdlTWFwKG1hcFBhcmVudCk7CiAgICAgaWYg
KCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorCiAgICAgZm9yIChjb25z
dCBhdXRvJiBjaGlsZCA6IHBhcmVudC0+Y2hpbGRyZW4oKSkgewogICAgICAgICBpZiAoY2hpbGQt
PmVsZW1lbnRSZWN0KCkuY29udGFpbnMocG9pbnQpKQogICAgICAgICAgICAgcmV0dXJuIGNoaWxk
LmdldCgpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBudWxscHRyOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9uLmgKaW5kZXggODU3MmFmNTUw
ODY0OTc1OGZkMDM3YTM0ZmUzOWYzZTMyMzBhOTU5MS4uMTIwY2YzMGNlOTJlNzY4OTIzMmMyYjM5
NjYwNGQzNGUyOGExODQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0FsbERlc2Nl
bmRhbnRzQ29sbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BbGxEZXNjZW5kYW50
c0NvbGxlY3Rpb24uaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAg
ICBBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24oQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIENvbGxl
Y3Rpb25UeXBlIHR5cGUpCi0gICAgICAgIDogQ2FjaGVkSFRNTENvbGxlY3Rpb248QWxsRGVzY2Vu
ZGFudHNDb2xsZWN0aW9uLCBDb2xsZWN0aW9uVHlwZVRyYWl0czxBbGxEZXNjZW5kYW50cz46OnRy
YXZlcnNhbFR5cGU+KHJvb3ROb2RlLCB0eXBlKQorICAgICAgICA6IENhY2hlZEhUTUxDb2xsZWN0
aW9uKHJvb3ROb2RlLCB0eXBlKQogICAgIHsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0NsYXNzQ29sbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzQ29s
bGVjdGlvbi5oCmluZGV4IGVjZjdmM2QyMGM2MTVjNDY4OTgyMGYxOWFhOWNmM2E4NjMyZjZiZGQu
LmE2NzVkMzA2YmRmNzVmMzhhZjlmZmU4OWE2YjRiZTg5MjNmZDRjNDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DbGFzc0NvbGxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ2xhc3NDb2xsZWN0aW9uLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHJpdmF0ZToKIH07CiAKIGlu
bGluZSBDbGFzc0NvbGxlY3Rpb246OkNsYXNzQ29sbGVjdGlvbihDb250YWluZXJOb2RlJiByb290
Tm9kZSwgQ29sbGVjdGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbVN0cmluZyYgY2xhc3NOYW1lcykK
LSAgICA6IENhY2hlZEhUTUxDb2xsZWN0aW9uPENsYXNzQ29sbGVjdGlvbiwgQ29sbGVjdGlvblR5
cGVUcmFpdHM8QnlDbGFzcz46OnRyYXZlcnNhbFR5cGU+KHJvb3ROb2RlLCB0eXBlKQorICAgIDog
Q2FjaGVkSFRNTENvbGxlY3Rpb24ocm9vdE5vZGUsIHR5cGUpCiAgICAgLCBtX2NsYXNzTmFtZXMo
Y2xhc3NOYW1lcywgcm9vdE5vZGUuZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSkKICAgICAsIG1f
b3JpZ2luYWxDbGFzc05hbWVzKGNsYXNzTmFtZXMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRGcmFnbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRGcmFnbWVudC5jcHAKaW5kZXggOGYyMWIyNzkzNTAzNzYxOWViMTAzYjk0Y2MyMGM3MmNiYjcx
MWExOC4uMmEyNWFiMmU1YWE3Njc5NjUwODM3MGFlZmEyOTFlNzJjN2MxYzY3NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmNwcApAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1
ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIgorI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIgpAQCAtMTAzLDcgKzEwMyw3IEBAIEVsZW1l
bnQqIERvY3VtZW50RnJhZ21lbnQ6OmdldEVsZW1lbnRCeUlkKGNvbnN0IEF0b21TdHJpbmcmIGlk
KSBjb25zdAogICAgICAgICByZXR1cm4gdHJlZVNjb3BlKCkuZ2V0RWxlbWVudEJ5SWQoaWQpOwog
CiAgICAgLy8gT3RoZXJ3aXNlLCBmYWxsIGJhY2sgdG8gaXRlcmF0aW5nIGFsbCBvZiB0aGUgZWxl
bWVudCBkZXNjZW5kYW50cy4KLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50RGVzY2Vu
ZGFudHMoKnRoaXMpKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5
cGU8RWxlbWVudD4oKnRoaXMpKSB7CiAgICAgICAgIGlmIChlbGVtZW50LmdldElkQXR0cmlidXRl
KCkgPT0gaWQpCiAgICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxFbGVtZW50Kj4oJmVsZW1l
bnQpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA2MmE5ZmI4MDk1MzNmNmI1NGYx
NmQ5YTFmNWYzMjY5ZDNkMzMzNTA0Li5jZTJkNzFhZWNkOTY2ZDg1YmVhMWE0YTcwM2M2MTM4ZjA0
M2QzOTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC00LDcgKzQsNyBAQAogICogICAgICAg
ICAgIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDcgRGF2aWQgU21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAg
ICAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAg
LTYwLDcgKzYwLDYgQEAKICNpbmNsdWRlICJHZXRBbmltYXRpb25zT3B0aW9ucy5oIgogI2luY2x1
ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50Lmgi
CkBAIC0zNDAxLDI2ICszNDAwLDE0IEBAIHVuc2lnbmVkIEVsZW1lbnQ6OnJhcmVEYXRhQ2hpbGRJ
bmRleCgpIGNvbnN0CiAKIEF0b21TdHJpbmcgRWxlbWVudDo6Y29tcHV0ZUluaGVyaXRlZExhbmd1
YWdlKCkgY29uc3QKIHsKLSAgICBpZiAoY29uc3QgRWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0g
dGhpcy0+ZWxlbWVudERhdGEoKSkgewotICAgICAgICBpZiAoY29uc3QgQXR0cmlidXRlKiBhdHRy
aWJ1dGUgPSBlbGVtZW50RGF0YS0+ZmluZExhbmd1YWdlQXR0cmlidXRlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gYXR0cmlidXRlLT52YWx1ZSgpOwotICAgIH0KLQogICAgIC8vIFRoZSBsYW5ndWFn
ZSBwcm9wZXJ0eSBpcyBpbmhlcml0ZWQsIHNvIHdlIGl0ZXJhdGUgb3ZlciB0aGUgcGFyZW50cyB0
byBmaW5kIHRoZSBmaXJzdCBsYW5ndWFnZS4KLSAgICBjb25zdCBOb2RlKiBjdXJyZW50Tm9kZSA9
IHRoaXM7Ci0gICAgd2hpbGUgKChjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wYXJlbnROb2Rl
KCkpKSB7Ci0gICAgICAgIGlmIChpczxFbGVtZW50PigqY3VycmVudE5vZGUpKSB7Ci0gICAgICAg
ICAgICBpZiAoY29uc3QgRWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0gZG93bmNhc3Q8RWxlbWVu
dD4oKmN1cnJlbnROb2RlKS5lbGVtZW50RGF0YSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNv
bnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZWxlbWVudERhdGEtPmZpbmRMYW5ndWFnZUF0dHJp
YnV0ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlLT52YWx1ZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGlzPERvY3VtZW50PigqY3VycmVudE5v
ZGUpKSB7Ci0gICAgICAgICAgICAvLyBjaGVja2luZyB0aGUgTUlNRSBjb250ZW50LWxhbmd1YWdl
Ci0gICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjdXJyZW50Tm9kZSkuY29u
dGVudExhbmd1YWdlKCk7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbGluZWFnZU9mVHlwZTxF
bGVtZW50PigqdGhpcykpIHsKKyAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnREYXRhID0gZWxlbWVu
dC5lbGVtZW50RGF0YSgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogYXR0cmlidXRlID0gZWxl
bWVudERhdGEtPmZpbmRMYW5ndWFnZUF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gbnVs
bEF0b20oKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5jb250ZW50TGFuZ3VhZ2UoKTsKIH0KIAog
TG9jYWxlJiBFbGVtZW50Ojpsb2NhbGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVl
cnkuY3BwCmluZGV4IGVmMDU1MjkzNDI3N2Q0M2IxMTlhNDY3NTFmZjQyOGUwYTE4MDM3OTAuLmMw
NjFhM2RlMmJjNTU4MjVmOTVjZjcyZDQ4MDMzYTFlY2QxOWQyNmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2VsZWN0b3JRdWVyeS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJTZWxlY3RvclF1ZXJ5LmgiCiAK
ICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKLSNpbmNsdWRlICJFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yLmgiCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxp
c3QuaCIKQEAgLTE1MCwxNSArMTUwLDEyIEBAIGJvb2wgU2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hl
cyhFbGVtZW50JiB0YXJnZXRFbGVtZW50KSBjb25zdAogCiBFbGVtZW50KiBTZWxlY3RvckRhdGFM
aXN0OjpjbG9zZXN0KEVsZW1lbnQmIHRhcmdldEVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgRWxlbWVu
dCogY3VycmVudE5vZGUgPSAmdGFyZ2V0RWxlbWVudDsKLSAgICBkbyB7CisgICAgZm9yIChhdXRv
JiBjdXJyZW50RWxlbWVudCA6IGxpbmVhZ2VPZlR5cGU8RWxlbWVudD4odGFyZ2V0RWxlbWVudCkp
IHsKICAgICAgICAgZm9yIChhdXRvJiBzZWxlY3RvciA6IG1fc2VsZWN0b3JzKSB7Ci0gICAgICAg
ICAgICBFbGVtZW50KiBjYW5kaWRhdGVFbGVtZW50ID0gc2VsZWN0b3JDbG9zZXN0KHNlbGVjdG9y
LCAqY3VycmVudE5vZGUsIHRhcmdldEVsZW1lbnQpOwotICAgICAgICAgICAgaWYgKGNhbmRpZGF0
ZUVsZW1lbnQpCisgICAgICAgICAgICBpZiAoYXV0byogY2FuZGlkYXRlRWxlbWVudCA9IHNlbGVj
dG9yQ2xvc2VzdChzZWxlY3RvciwgY3VycmVudEVsZW1lbnQsIHRhcmdldEVsZW1lbnQpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGVFbGVtZW50OwogICAgICAgICB9Ci0gICAgICAg
IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudEVsZW1lbnQoKTsKLSAgICB9IHdoaWxl
IChjdXJyZW50Tm9kZSk7CisgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0yOTUs
NyArMjkyLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4KIHN0YXRp
YyBpbmxpbmUgdm9pZCBlbGVtZW50c0ZvckxvY2FsTmFtZShjb25zdCBDb250YWluZXJOb2RlJiBy
b290Tm9kZSwgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lLCBjb25zdCBBdG9tU3RyaW5nJiBs
b3dlcmNhc2VMb2NhbE5hbWUsIHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdDo6T3V0cHV0VHlw
ZSYgb3V0cHV0KQogewogICAgIGlmIChsb2NhbE5hbWUgPT0gbG93ZXJjYXNlTG9jYWxOYW1lKSB7
Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnREZXNjZW5kYW50cyhjb25zdF9j
YXN0PENvbnRhaW5lck5vZGUmPihyb290Tm9kZSkpKSB7CisgICAgICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9k
ZSY+KHJvb3ROb2RlKSkpIHsKICAgICAgICAgICAgIGlmIChlbGVtZW50LnRhZ1FOYW1lKCkubG9j
YWxOYW1lKCkgPT0gbG9jYWxOYW1lKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JRdWVyeVRy
YWl0OjphcHBlbmRPdXRwdXRGb3JFbGVtZW50KG91dHB1dCwgJmVsZW1lbnQpOwogICAgICAgICAg
ICAgICAgIGlmIChTZWxlY3RvclF1ZXJ5VHJhaXQ6OnNob3VsZE9ubHlNYXRjaEZpcnN0RWxlbWVu
dCkKQEAgLTMwMyw3ICszMDAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZWxlbWVudHNGb3JMb2Nh
bE5hbWUoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIGNvbnN0IEF0bwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHJvb3ROb2Rl
KSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxl
bWVudD4oY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkgewogICAgICAgICAg
ICAgaWYgKGxvY2FsTmFtZU1hdGNoZXMoZWxlbWVudCwgbG9jYWxOYW1lLCBsb3dlcmNhc2VMb2Nh
bE5hbWUpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JRdWVyeVRyYWl0OjphcHBlbmRPdXRw
dXRGb3JFbGVtZW50KG91dHB1dCwgJmVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChTZWxl
Y3RvclF1ZXJ5VHJhaXQ6OnNob3VsZE9ubHlNYXRjaEZpcnN0RWxlbWVudCkKQEAgLTMxNiw3ICsz
MTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZWxlbWVudHNGb3JMb2NhbE5hbWUoY29uc3QgQ29u
dGFpbmVyTm9kZSYgcm9vdE5vZGUsIGNvbnN0IEF0bwogdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVj
dG9yUXVlcnlUcmFpdD4KIHN0YXRpYyBpbmxpbmUgdm9pZCBhbnlFbGVtZW50KGNvbnN0IENvbnRh
aW5lck5vZGUmIHJvb3ROb2RlLCB0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1dFR5
cGUmIG91dHB1dCkKIHsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFu
dHMoY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkgeworICAgIGZvciAoYXV0
byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8Q29udGFp
bmVyTm9kZSY+KHJvb3ROb2RlKSkpIHsKICAgICAgICAgU2VsZWN0b3JRdWVyeVRyYWl0OjphcHBl
bmRPdXRwdXRGb3JFbGVtZW50KG91dHB1dCwgJmVsZW1lbnQpOwogICAgICAgICBpZiAoU2VsZWN0
b3JRdWVyeVRyYWl0OjpzaG91bGRPbmx5TWF0Y2hGaXJzdEVsZW1lbnQpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0zNDUsNyArMzQyLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0
YUxpc3Q6OmV4ZWN1dGVTaW5nbGVUYWdOYW1lU2VsZWN0b3JEYXRhKGNvbnN0IENvbnQKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZhbGxiYWNrOiBOYW1lc3BhY2VVUkkgaXMg
c2V0LCBzZWxlY3RvckxvY2FsTmFtZSBtYXkgYmUgc3RhckF0b20oKS4KLSAgICAgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9k
ZSY+KHJvb3ROb2RlKSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFu
dHNPZlR5cGU8RWxlbWVudD4oY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkg
ewogICAgICAgICAgICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJKCkgPT0gc2VsZWN0b3JOYW1l
c3BhY2VVUkkgJiYgbG9jYWxOYW1lTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvckxvY2FsTmFtZSwg
c2VsZWN0b3JMb3dlcmNhc2VMb2NhbE5hbWUpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JR
dWVyeVRyYWl0OjphcHBlbmRPdXRwdXRGb3JFbGVtZW50KG91dHB1dCwgJmVsZW1lbnQpOwogICAg
ICAgICAgICAgICAgIGlmIChTZWxlY3RvclF1ZXJ5VHJhaXQ6OnNob3VsZE9ubHlNYXRjaEZpcnN0
RWxlbWVudCkKQEAgLTM2Miw3ICszNTksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JE
YXRhTGlzdDo6ZXhlY3V0ZVNpbmdsZUNsYXNzTmFtZVNlbGVjdG9yRGF0YShjb25zdCBDbwogICAg
IEFTU0VSVChpc1NpbmdsZUNsYXNzTmFtZVNlbGVjdG9yKCpzZWxlY3RvckRhdGEuc2VsZWN0b3Ip
KTsKIAogICAgIGNvbnN0IEF0b21TdHJpbmcmIGNsYXNzTmFtZSA9IHNlbGVjdG9yRGF0YS5zZWxl
Y3Rvci0+dmFsdWUoKTsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFu
dHMoY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkgeworICAgIGZvciAoYXV0
byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8Q29udGFp
bmVyTm9kZSY+KHJvb3ROb2RlKSkpIHsKICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoKSAm
JiBlbGVtZW50LmNsYXNzTmFtZXMoKS5jb250YWlucyhjbGFzc05hbWUpKSB7CiAgICAgICAgICAg
ICBTZWxlY3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZvckVsZW1lbnQob3V0cHV0LCAmZWxl
bWVudCk7CiAgICAgICAgICAgICBpZiAoU2VsZWN0b3JRdWVyeVRyYWl0OjpzaG91bGRPbmx5TWF0
Y2hGaXJzdEVsZW1lbnQpCkBAIC0zNzYsNyArMzczLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNl
bGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVTaW5nbGVTZWxlY3RvckRhdGEoY29uc3QgQ29udGFpbmVy
Tm8KIHsKICAgICBBU1NFUlQobV9zZWxlY3RvcnMuc2l6ZSgpID09IDEpOwogCi0gICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9k
ZSY+KHNlYXJjaFJvb3ROb2RlKSkpIHsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5k
YW50c09mVHlwZTxFbGVtZW50Pihjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihzZWFyY2hSb290
Tm9kZSkpKSB7CiAgICAgICAgIGlmIChzZWxlY3Rvck1hdGNoZXMoc2VsZWN0b3JEYXRhLCBlbGVt
ZW50LCByb290Tm9kZSkpIHsKICAgICAgICAgICAgIFNlbGVjdG9yUXVlcnlUcmFpdDo6YXBwZW5k
T3V0cHV0Rm9yRWxlbWVudChvdXRwdXQsICZlbGVtZW50KTsKICAgICAgICAgICAgIGlmIChTZWxl
Y3RvclF1ZXJ5VHJhaXQ6OnNob3VsZE9ubHlNYXRjaEZpcnN0RWxlbWVudCkKQEAgLTM4OCw3ICsz
ODUsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZVNpbmds
ZVNlbGVjdG9yRGF0YShjb25zdCBDb250YWluZXJObwogdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVj
dG9yUXVlcnlUcmFpdD4KIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVj
dXRlU2luZ2xlTXVsdGlTZWxlY3RvckRhdGEoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUs
IHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdDo6T3V0cHV0VHlwZSYgb3V0cHV0KSBjb25zdAog
ewotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnREZXNjZW5kYW50cyhjb25zdF9jYXN0
PENvbnRhaW5lck5vZGUmPihyb290Tm9kZSkpKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDog
ZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9v
dE5vZGUpKSkgewogICAgICAgICBmb3IgKGF1dG8mIHNlbGVjdG9yIDogbV9zZWxlY3RvcnMpIHsK
ICAgICAgICAgICAgIGlmIChzZWxlY3Rvck1hdGNoZXMoc2VsZWN0b3IsIGVsZW1lbnQsIHJvb3RO
b2RlKSkgewogICAgICAgICAgICAgICAgIFNlbGVjdG9yUXVlcnlUcmFpdDo6YXBwZW5kT3V0cHV0
Rm9yRWxlbWVudChvdXRwdXQsICZlbGVtZW50KTsKQEAgLTQwNCw3ICs0MDEsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZVNpbmdsZU11bHRpU2VsZWN0b3JE
YXRhKGNvbnN0IENvbnRhaQogdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4K
IEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTaW1w
bGVTZWxlY3RvckNoZWNrZXIoY29uc3QgQ29udGFpbmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUsIFNl
bGVjdG9yQ29tcGlsZXI6OlF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIgc2VsZWN0
b3JDaGVja2VyLCB0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1dFR5cGUmIG91dHB1
dCwgY29uc3QgU2VsZWN0b3JEYXRhJiBzZWxlY3RvckRhdGEpIGNvbnN0CiB7Ci0gICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9k
ZSY+KHNlYXJjaFJvb3ROb2RlKSkpIHsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5k
YW50c09mVHlwZTxFbGVtZW50Pihjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihzZWFyY2hSb290
Tm9kZSkpKSB7CiAgICAgICAgIHNlbGVjdG9yRGF0YS5jb21waWxlZFNlbGVjdG9yLndhc1VzZWQo
KTsKIAogICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyKCZlbGVtZW50KSkgewpAQCAtNDIxLDcg
KzQxOCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29t
cGlsZWRTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDCiAgICAgU2VsZWN0b3JDaGVja2VyOjpD
aGVja2luZ0NvbnRleHQgY2hlY2tpbmdDb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVl
cnlpbmdSdWxlcyk7CiAgICAgY2hlY2tpbmdDb250ZXh0LnNjb3BlID0gcm9vdE5vZGUuaXNEb2N1
bWVudE5vZGUoKSA/IG51bGxwdHIgOiAmcm9vdE5vZGU7CiAKLSAgICBmb3IgKGF1dG8mIGVsZW1l
bnQgOiBlbGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4oc2VhcmNo
Um9vdE5vZGUpKSkgeworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBl
PEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHNlYXJjaFJvb3ROb2RlKSkpIHsK
ICAgICAgICAgc2VsZWN0b3JEYXRhLmNvbXBpbGVkU2VsZWN0b3Iud2FzVXNlZCgpOwogCiAgICAg
ICAgIGlmIChzZWxlY3RvckNoZWNrZXIoJmVsZW1lbnQsICZjaGVja2luZ0NvbnRleHQpKSB7CkBA
IC00MzcsNyArNDM0LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4
ZWN1dGVDb21waWxlZFNpbmdsZU11bHRpU2VsZWN0b3JEYXRhKGNvbnMKIHsKICAgICBTZWxlY3Rv
ckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCBjaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2Vy
OjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsKICAgICBjaGVja2luZ0NvbnRleHQuc2NvcGUgPSByb290
Tm9kZS5pc0RvY3VtZW50Tm9kZSgpID8gbnVsbHB0ciA6ICZyb290Tm9kZTsKLSAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWluZXJOb2Rl
Jj4ocm9vdE5vZGUpKSkgeworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZU
eXBlPEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHJvb3ROb2RlKSkpIHsKICAg
ICAgICAgZm9yIChhdXRvJiBzZWxlY3RvciA6IG1fc2VsZWN0b3JzKSB7CiAgICAgICAgICAgICBz
ZWxlY3Rvci5jb21waWxlZFNlbGVjdG9yLndhc1VzZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1RhZ0NvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RhZ0Nv
bGxlY3Rpb24uY3BwCmluZGV4IGUwNjdmMmYxZDI5ODRjYjc4N2ZlZTlhMzA0OTEyMTU1ZGM5YzM3
NDQuLjFmMzI0Y2MwNzdhMWEzMDBjYWFlYjg1ZWM0MjkzN2FkZWRmYWMxMDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9UYWdDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vVGFnQ29sbGVjdGlvbi5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKFRhZ0NvbGxlY3Rpb25OUyk7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoSFRNTFRhZ0NvbGxlY3Rpb24pOwogCiBUYWdDb2xsZWN0aW9uTlM6OlRhZ0NvbGxlY3Rpb25O
UyhDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQXRvbVN0cmluZyYgbmFtZXNwYWNlVVJJ
LCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUpCi0gICAgOiBDYWNoZWRIVE1MQ29sbGVjdGlv
bjxUYWdDb2xsZWN0aW9uTlMsIENvbGxlY3Rpb25UeXBlVHJhaXRzPEJ5VGFnPjo6dHJhdmVyc2Fs
VHlwZT4ocm9vdE5vZGUsIEJ5VGFnKQorICAgIDogQ2FjaGVkSFRNTENvbGxlY3Rpb24ocm9vdE5v
ZGUsIEJ5VGFnKQogICAgICwgbV9uYW1lc3BhY2VVUkkobmFtZXNwYWNlVVJJKQogICAgICwgbV9s
b2NhbE5hbWUobG9jYWxOYW1lKQogewpAQCAtNDcsNyArNDcsNyBAQCBUYWdDb2xsZWN0aW9uTlM6
On5UYWdDb2xsZWN0aW9uTlMoKQogfQogCiBUYWdDb2xsZWN0aW9uOjpUYWdDb2xsZWN0aW9uKENv
bnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25zdCBBdG9tU3RyaW5nJiBxdWFsaWZpZWROYW1lKQot
ICAgIDogQ2FjaGVkSFRNTENvbGxlY3Rpb248VGFnQ29sbGVjdGlvbiwgQ29sbGVjdGlvblR5cGVU
cmFpdHM8QnlUYWc+Ojp0cmF2ZXJzYWxUeXBlPihyb290Tm9kZSwgQnlUYWcpCisgICAgOiBDYWNo
ZWRIVE1MQ29sbGVjdGlvbihyb290Tm9kZSwgQnlUYWcpCiAgICAgLCBtX3F1YWxpZmllZE5hbWUo
cXVhbGlmaWVkTmFtZSkKIHsKICAgICBBU1NFUlQocXVhbGlmaWVkTmFtZSAhPSBzdGFyQXRvbSgp
KTsKQEAgLTU5LDcgKzU5LDcgQEAgVGFnQ29sbGVjdGlvbjo6flRhZ0NvbGxlY3Rpb24oKQogfQog
CiBIVE1MVGFnQ29sbGVjdGlvbjo6SFRNTFRhZ0NvbGxlY3Rpb24oQ29udGFpbmVyTm9kZSYgcm9v
dE5vZGUsIGNvbnN0IEF0b21TdHJpbmcmIHF1YWxpZmllZE5hbWUpCi0gICAgOiBDYWNoZWRIVE1M
Q29sbGVjdGlvbjxIVE1MVGFnQ29sbGVjdGlvbiwgQ29sbGVjdGlvblR5cGVUcmFpdHM8QnlIVE1M
VGFnPjo6dHJhdmVyc2FsVHlwZT4ocm9vdE5vZGUsIEJ5SFRNTFRhZykKKyAgICA6IENhY2hlZEhU
TUxDb2xsZWN0aW9uKHJvb3ROb2RlLCBCeUhUTUxUYWcpCiAgICAgLCBtX3F1YWxpZmllZE5hbWUo
cXVhbGlmaWVkTmFtZSkKICAgICAsIG1fbG93ZXJlZFF1YWxpZmllZE5hbWUocXVhbGlmaWVkTmFt
ZS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CmluZGV4IDM5MjBhMGI3MDgzM2JmOWI2ZjQzZmM3NThjNGJkMTNjNmJkZTFjZjQuLjZjNmQ4M2E3
MjhmMzAyMDNiOGVmZmNlMGYwOGJhYTQ1NWMzMjZhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCisj
aW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZpbGUuaCIKQEAgLTYxLDcgKzYyLDcg
QEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MQXR0YWNobWVu
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTENv
bGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgpAQCAtMzQzMSwyMyArMzQzMiwxOCBAQCB2
b2lkIEVkaXRvcjo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCogZSkKIAogdm9pZCBF
ZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgYXV0
byBjb2xsZWN0aW9uID0gZG9jdW1lbnQoKS5nZXRFbGVtZW50c0J5VGFnTmFtZShIVE1MTmFtZXM6
OmJvZHlUYWctPmxvY2FsTmFtZSgpKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBjb2xsZWN0aW9u
LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0g
ICAgICAgIGFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KGNvbGxlY3Rpb24tPml0ZW0oaSkpOwot
fQotCi12b2lkIEVkaXRvcjo6YXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudCogZWxl
bWVudCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWVsZW1lbnQgfHwgaXM8U3R5bGVkRWxlbWVudD4o
KmVsZW1lbnQpKTsKLSAgICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBNdXRhdGUgdXNpbmcgdGhlIENTU09NIHdyYXBwZXIgc28gd2Ug
Z2V0IHRoZSBzYW1lIGV2ZW50IGJlaGF2aW9yIGFzIGEgc2NyaXB0LgotICAgIGF1dG8mIHN0eWxl
ID0gZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oKmVsZW1lbnQpLmNzc29tU3R5bGUoKTsKLSAgICBz
dHlsZS5zZXRQcm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5V29yZFdyYXAsICJicmVhay13b3Jk
IiwgZmFsc2UpOwotICAgIHN0eWxlLnNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlXZWJr
aXROYnNwTW9kZSwgInNwYWNlIiwgZmFsc2UpOwotICAgIHN0eWxlLnNldFByb3BlcnR5SW50ZXJu
YWwoQ1NTUHJvcGVydHlMaW5lQnJlYWssICJhZnRlci13aGl0ZS1zcGFjZSIsIGZhbHNlKTsKKyAg
ICAvLyBGSVhNRTogTm90IGNsZWFyIGl0J3MgdmFsdWFibGUgdG8gZG8gdGhpcyB0byBhbGwgYm9k
eSBlbGVtZW50cyByYXRoZXIgdGhhbiBqdXN0IGRvaW5nIGl0IG9uIHRoZSBzaW5nbGUgb25lIHJl
dHVybmVkIGJ5IERvY3VtZW50Ojpib2R5LgorICAgIFZlY3RvcjxSZWY8SFRNTEJvZHlFbGVtZW50
Pj4gYm9kaWVzOworICAgIGZvciAoYXV0byYgYm9keSA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxC
b2R5RWxlbWVudD4oZG9jdW1lbnQoKSkpCisgICAgICAgIGJvZGllcy5hcHBlbmQoYm9keSk7CisK
KyAgICBmb3IgKGF1dG8mIGJvZHkgOiBib2RpZXMpIHsKKyAgICAgICAgLy8gTXV0YXRlIHVzaW5n
IHRoZSBDU1NPTSB3cmFwcGVyIHNvIHdlIGdldCB0aGUgc2FtZSBldmVudCBiZWhhdmlvciBhcyBh
IHNjcmlwdC4KKyAgICAgICAgYXV0byYgc3R5bGUgPSBib2R5LT5jc3NvbVN0eWxlKCk7CisgICAg
ICAgIHN0eWxlLnNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlXb3JkV3JhcCwgImJyZWFr
LXdvcmQiLCBmYWxzZSk7CisgICAgICAgIHN0eWxlLnNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJv
cGVydHlXZWJraXROYnNwTW9kZSwgInNwYWNlIiwgZmFsc2UpOworICAgICAgICBzdHlsZS5zZXRQ
cm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5TGluZUJyZWFrLCAiYWZ0ZXItd2hpdGUtc3BhY2Ui
LCBmYWxzZSk7CisgICAgfQogfQogCiBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJp
bmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmlu
ZGV4IDE5YzQyMDhkNDVkOWVjOWY1YzI5YzkyODE3NDg4MGU0ZjFiOTg0MTAuLmY4Njc3YjMxOGU4
ZTgwNmMwMjJhM2U3Mzg2ZWVmMjYwODA1YjQ1M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApA
QCAtNDM1LDcgKzQzNSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXB1dGVBbmRTZXRUeXBpbmdT
dHlsZShFZGl0aW5nU3R5bGUmICwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3BlY2lmaWVk
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHls
ZVByb3BlcnRpZXMmICwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb246OlVuc3BlY2lmaWVkKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNv
bnN0OwotICAgIHZvaWQgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudCopIGNvbnN0
OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSop
IGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4
IGNmZGMzOWYwNGVhYzQwNjg0ZDFkMjQ4YjdiODczNTY0ZTAyODI5NjQuLmQ4Y2NhYjA3ODQxMzcy
NWVmOTBkZDAxZDBiN2ZlNDk3NTRmYTdhYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwCkBAIC0yMzUzLDIwICsyMzUzLDE2IEBAIHN0YXRpYyBIVE1MRm9ybUVs
ZW1lbnQqIHNjYW5Gb3JGb3JtKEVsZW1lbnQqIHN0YXJ0KQogewogICAgIGlmICghc3RhcnQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBkZXNjZW5kYW50cyA9IGRlc2NlbmRh
bnRzT2ZUeXBlPEhUTUxFbGVtZW50PihzdGFydC0+ZG9jdW1lbnQoKSk7Ci0gICAgZm9yIChhdXRv
IGl0ID0gZGVzY2VuZGFudHMuZnJvbSgqc3RhcnQpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gKml0Owor
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxFbGVtZW50Pihz
dGFydC0+ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgaWYgKGlzPEhUTUxGb3JtRWxlbWVudD4oZWxl
bWVudCkpCiAgICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEhUTUxGb3JtRWxlbWVudD4oZWxl
bWVudCk7CiAgICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSkK
ICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVt
ZW50KS5mb3JtKCk7CiAgICAgICAgIGlmIChpczxIVE1MRnJhbWVFbGVtZW50QmFzZT4oZWxlbWVu
dCkpIHsKLSAgICAgICAgICAgIERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQgPSBkb3duY2FzdDxI
VE1MRnJhbWVFbGVtZW50QmFzZT4oZWxlbWVudCkuY29udGVudERvY3VtZW50KCk7Ci0gICAgICAg
ICAgICBpZiAoIWNvbnRlbnREb2N1bWVudCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGlmIChIVE1MRm9ybUVsZW1lbnQqIGZyYW1lUmVzdWx0ID0gc2NhbkZvckZvcm0o
Y29udGVudERvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZyYW1lUmVzdWx0OworICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRlbnREb2N1bWVudCA9
IGRvd25jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlPihlbGVtZW50KS5jb250ZW50RG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBmcmFtZVJlc3VsdCA9IHNjYW5Gb3JGb3Jt
KGNvbnRlbnREb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZnJhbWVSZXN1bHQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAg
ICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGNkZTlhNzhjOGZlN2RhMTMxZTExZjQ0
ZjRiYjA5MWM1ZmU2ZjAyZjMuLjFlNzYwZGU3MjMxNjA5ZDA1OTI5ODI4ZjdlMTNmM2QyMmJhMjUy
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBUeXBl
IHR5cGUgPSBUeXBlOjpJbmNsdWRlOwogICAgICAgICBSZWZQdHI8RWxlbWVudD4gbWF0Y2hpbmdF
bGVtZW50OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50TGluZWFnZShzdGFy
dGluZ0VsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpbmVh
Z2VPZlR5cGU8RWxlbWVudD4oKnN0YXJ0aW5nRWxlbWVudCkpIHsKICAgICAgICAgICAgIGlmIChh
dXRvIHR5cGVPck51bGxvcHQgPSB0eXBlRm9yRWxlbWVudChlbGVtZW50KSkgewogICAgICAgICAg
ICAgICAgIHR5cGUgPSAqdHlwZU9yTnVsbG9wdDsKICAgICAgICAgICAgICAgICBtYXRjaGluZ0Vs
ZW1lbnQgPSAmZWxlbWVudDsKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudExpbmVh
Z2Uoc3RhcnRpbmdFbGVtZW50LmdldCgpKSkgeworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiBsaW5lYWdlT2ZUeXBlPEVsZW1lbnQ+KCpzdGFydGluZ0VsZW1lbnQpKSB7CiAgICAgICAgICAg
ICBtX2NhY2hlLnNldChlbGVtZW50LCB0eXBlKTsKICAgICAgICAgICAgIGlmICgmZWxlbWVudCA9
PSBtYXRjaGluZ0VsZW1lbnQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBbGxDb2xsZWN0aW9uLmgKaW5kZXggMTM1ODQxNmZlMzg5MmE5OTg4NWE2ZjlmNDA0
OWNkZTFkOWQzN2QwYi4uZjZlZDMzN2M1YjdhYjEyNWVkYzQ3ODg5YWUzOWYxM2NjNTM0ZjYzNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uaApAQCAtNTQsNyArNTQsNyBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgSFRNTEFsbE5hbWVkU3ViQ29sbGVjdGlvbihEb2N1
bWVudCYgZG9jdW1lbnQsIENvbGxlY3Rpb25UeXBlIHR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIG5h
bWUpCi0gICAgICAgIDogQ2FjaGVkSFRNTENvbGxlY3Rpb248SFRNTEFsbE5hbWVkU3ViQ29sbGVj
dGlvbiwgQ29sbGVjdGlvblRyYXZlcnNhbFR5cGU6OkRlc2NlbmRhbnRzPihkb2N1bWVudCwgdHlw
ZSkKKyAgICAgICAgOiBDYWNoZWRIVE1MQ29sbGVjdGlvbihkb2N1bWVudCwgdHlwZSkKICAgICAg
ICAgLCBtX25hbWUobmFtZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IERvY3VtZW50
QWxsTmFtZWRJdGVtcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IDY4Y2Y1
NTNhYjQ5MGFlNGRmMDdjN2RmYjYyYjdkZGQwNjY5MDYwZWEuLjMyZWQ0YWQzMWJkMzBlY2Y0Y2Nj
NDhmYjE0MjQ0YTMyMzI0ZTA0YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgpAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIkhUTUxCRElFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEJSRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCdXR0b25FbGVtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MRWxlbWVudEZhY3RvcnkuaCIKICNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVt
ZW50LmgiCkBAIC02MCw2ICs1OSw3IEBACiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiU2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5o
IgogI2luY2x1ZGUgIlNpbXVsYXRlZENsaWNrLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVz
LmgiCkBAIC03NjcsMTQgKzc2NywxNiBAQCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIEhUTUxFbGVt
ZW50Ojphc0Zvcm1Bc3NvY2lhdGVkRWxlbWVudCgpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50QWZmZWN0c0RpcmVjdGlvbmFsaXR5KGNvbnN0IE5v
ZGUmIG5vZGUpCitzdGF0aWMgYm9vbCBlbGVtZW50QWZmZWN0c0RpcmVjdGlvbmFsaXR5KGNvbnN0
IEhUTUxFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG5vZGUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgSFRNTEVsZW1lbnQmIGVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSk7CiAgICAgcmV0dXJuIGlzPEhUTUxCRElFbGVt
ZW50PihlbGVtZW50KSB8fCBlbGVtZW50Lmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oZGlyQXR0cik7CiB9CiAKK3N0YXRpYyBib29sIGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxp
dHkoY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICByZXR1cm4gaXM8SFRNTEVsZW1lbnQ+KG5vZGUp
ICYmIGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHkoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5v
ZGUpKTsKK30KKwogc3RhdGljIHZvaWQgc2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseShOb2Rl
KiBmaXJzdE5vZGUsIGJvb2wgZmxhZywgTm9kZSogbGFzdE5vZGUgPSBudWxscHRyKQogewogICAg
IGZpcnN0Tm9kZS0+c2V0U2VsZk9yQW5jZXN0b3JIYXNEaXJBdXRvQXR0cmlidXRlKGZsYWcpOwpA
QCAtODg1LDEwICs4ODcsMTAgQEAgdm9pZCBIVE1MRWxlbWVudDo6YWRqdXN0RGlyZWN0aW9uYWxp
dHlJZk5lZWRlZEFmdGVyQ2hpbGRBdHRyaWJ1dGVDaGFuZ2VkKEVsZW1lbnQKICAgICBzZXRIYXNE
aXJBdXRvRmxhZ1JlY3Vyc2l2ZWx5KGNoaWxkLCBmYWxzZSk7CiAgICAgaWYgKCFyZW5kZXJlcigp
IHx8IHJlbmRlcmVyKCktPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gdGV4dERpcmVjdGlvbikKICAg
ICAgICAgcmV0dXJuOwotICAgIGZvciAoYXV0byYgZWxlbWVudFRvQWRqdXN0IDogZWxlbWVudExp
bmVhZ2UodGhpcykpIHsKLSAgICAgICAgaWYgKGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHko
ZWxlbWVudFRvQWRqdXN0KSkgewotICAgICAgICAgICAgZWxlbWVudFRvQWRqdXN0LmludmFsaWRh
dGVTdHlsZUZvclN1YnRyZWUoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBmb3IgKGF1dG8m
IGVsZW1lbnQgOiBsaW5lYWdlT2ZUeXBlPEhUTUxFbGVtZW50PigqdGhpcykpIHsKKyAgICAgICAg
aWYgKGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHkoZWxlbWVudCkpIHsKKyAgICAgICAgICAg
IGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKaW5kZXggMzk1
ZGIxZTYyZWVkZDFkOTAwZTllN2MzZWM4ODhjYjAwY2IyYTRhMy4uN2UwNzRlYjYxMjg5NzYyODkw
ZTExZTgxYWZjZDZhMDkzZTdmZGQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaApAQCAt
MjIsMTkgKzIyLDE3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiSW5wdXRNb2RlLmgi
CisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgorCiAjaWYgRU5BQkxFKEFVVE9DQVBJVEFMSVpF
KQogI2luY2x1ZGUgIkF1dG9jYXBpdGFsaXplLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgIklucHV0
TW9kZS5oIgotI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgRm9ybUFzc29jaWF0ZWRFbGVtZW50
OwogY2xhc3MgRm9ybU5hbWVkSXRlbTsKLWNsYXNzIEhUTUxDb2xsZWN0aW9uOwogY2xhc3MgSFRN
TEZvcm1FbGVtZW50OwogCiBlbnVtIGNsYXNzIEVudGVyS2V5SGludCA6IHVpbnQ4X3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAppbmRleCA4Y2RmOTAzMDlmNzBiNGRm
Mjc1NDg1OWJjZjM0NTI0ZTAyMTVjOWFmLi4zYmJjZTA4NzdhZDBhNDc0MzhjYzRiZjdiNjBjZTcy
OGU1OGNlYzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKQEAg
LTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSAoMVN0ZWluQGdt
eC5kZSkKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgpAQCAtNjYsMTUgKzY2LDEwIEBAIFJlZjxIVE1MRW1iZWRFbGVtZW50PiBIVE1MRW1iZWRF
bGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQogCiBzdGF0aWMgaW5saW5lIFJlbmRl
cldpZGdldCogZmluZFdpZGdldFJlbmRlcmVyKGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYg
KCFub2RlLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIH0gd2hpbGUgKG5vZGUgJiYgIWlzPEhUTUxPYmpl
Y3RFbGVtZW50Pigqbm9kZSkpOwotICAgIH0KLQorICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkK
KyAgICAgICAgbm9kZSA9IGFuY2VzdG9yc09mVHlwZTxIVE1MT2JqZWN0RWxlbWVudD4oKm5vZGUp
LmZpcnN0KCk7CiAgICAgaWYgKG5vZGUgJiYgaXM8UmVuZGVyV2lkZ2V0Pihub2RlLT5yZW5kZXJl
cigpKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlcldpZGdldD4obm9kZS0+cmVuZGVy
ZXIoKSk7Ci0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggZDYxMWJjMWIyMjUxZmY4ZjA4ODQ0
ZjY4ZDQyNGZiOWRjOTY2ODJmNC4uNThhYjg4NDI2ZTcyODVlYmMxZmRkZTJiZTZkNTc4YzQ2YmYx
ZmI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwCkBAIC02NDUsMTUgKzY0NSw2IEBAIEF1dG9jYXBpdGFsaXplVHlwZSBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjphdXRvY2FwaXRhbGl6ZVR5cGUoKSBjb25zdAogCiAjZW5kaWYKIAotSFRNTEZv
cm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZW5jbG9zaW5nRm9ybUNv
bnRyb2xFbGVtZW50KE5vZGUqIG5vZGUpCi17Ci0gICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2Rl
LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
KCpub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Pihub2RlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KIFN0cmluZyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjphdXRvY29tcGxldGUoKSBjb25zdAogewogICAgIHJldHVybiBh
dXRvZmlsbERhdGEoKS5pZGxFeHBvc2VkVmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sRWxlbWVudC5oCmluZGV4IDYxMzQwYmZhNzNhM2E5NjZiYTYzN2FkNDRmNTZj
YmQ4ZmNmYzk2ZjAuLjNhZGIzMTFjN2E2MWQ3OGQ4MGI5OTBhMTU2OWU2ODFkMGY2NTMwMGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCkBAIC0xMTYs
OCArMTE2LDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQXV0b2ZvY3VzZWQoKSB7IHJldHVybiBt
X2hhc0F1dG9mb2N1c2VkOyB9CiAgICAgdm9pZCBzZXRBdXRvZm9jdXNlZCgpIHsgbV9oYXNBdXRv
Zm9jdXNlZCA9IHRydWU7IH0KIAotICAgIHN0YXRpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBl
bmNsb3NpbmdGb3JtQ29udHJvbEVsZW1lbnQoTm9kZSopOwotCiAgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIGF1dG9jb21wbGV0ZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
QXV0b2NvbXBsZXRlKGNvbnN0IFN0cmluZyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCmluZGV4IGEyYjAwZThmODE2ZGExYzIy
MWIxYzM2NmVhNmU2ODljM2IxYzY4YjkuLjg0YTFjYjc5ZTM2MDE0M2VjM2Q0ODI5YzY1NzU3OGM4
MjgzN2QwZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24uY3BwCkBAIC00MCw3ICs0MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b24pOwogCiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6SFRNTEZvcm1Db250cm9sc0NvbGxl
Y3Rpb24oQ29udGFpbmVyTm9kZSYgb3duZXJOb2RlKQotICAgIDogQ2FjaGVkSFRNTENvbGxlY3Rp
b248SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24sIENvbGxlY3Rpb25UeXBlVHJhaXRzPEZvcm1D
b250cm9scz46OnRyYXZlcnNhbFR5cGU+KG93bmVyTm9kZSwgRm9ybUNvbnRyb2xzKQorICAgIDog
Q2FjaGVkSFRNTENvbGxlY3Rpb24ob3duZXJOb2RlLCBGb3JtQ29udHJvbHMpCiAgICAgLCBtX2Nh
Y2hlZEVsZW1lbnQobnVsbHB0cikKICAgICAsIG1fY2FjaGVkRWxlbWVudE9mZnNldEluQXJyYXko
MCkKIHsKQEAgLTExMSw3ICsxMTEsNyBAQCBIVE1MRWxlbWVudCogSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb246OmN1c3RvbUVsZW1lbnRBZnRlcihFbGVtZW50KiBjdXJyZW50KSBjbwogCiBIVE1M
Rm9ybUVsZW1lbnQmIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpvd25lck5vZGUoKSBjb25z
dAogewotICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KENhY2hlZEhUTUxDb2xs
ZWN0aW9uPEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLCBDb2xsZWN0aW9uVHlwZVRyYWl0czxG
b3JtQ29udHJvbHM+Ojp0cmF2ZXJzYWxUeXBlPjo6b3duZXJOb2RlKCkpOworICAgIHJldHVybiBk
b3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KENhY2hlZEhUTUxDb2xsZWN0aW9uOjpvd25lck5vZGUo
KSk7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OnVwZGF0ZU5hbWVkRWxl
bWVudENhY2hlKCkgY29uc3QKQEAgLTE1OCw3ICsxNTgsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uOjp1cGRhdGVOYW1lZEVsZW1lbnRDYWNoZSgpIGNvbnN0CiAKIHZvaWQgSFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb246OmludmFsaWRhdGVDYWNoZUZvckRvY3VtZW50KERvY3Vt
ZW50JiBkb2N1bWVudCkKIHsKLSAgICBDYWNoZWRIVE1MQ29sbGVjdGlvbjxIVE1MRm9ybUNvbnRy
b2xzQ29sbGVjdGlvbiwgQ29sbGVjdGlvblR5cGVUcmFpdHM8Rm9ybUNvbnRyb2xzPjo6dHJhdmVy
c2FsVHlwZT46OmludmFsaWRhdGVDYWNoZUZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAgICBDYWNo
ZWRIVE1MQ29sbGVjdGlvbjo6aW52YWxpZGF0ZUNhY2hlRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwog
ICAgIG1fY2FjaGVkRWxlbWVudCA9IG51bGxwdHI7CiAgICAgbV9jYWNoZWRFbGVtZW50T2Zmc2V0
SW5BcnJheSA9IDA7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRH
cm91cEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50
LmNwcAppbmRleCA5ZThjZmZkYjkxYTUxMDkwNDI4NDU5ZWZmZTg2NWE0OGUwN2Y0ODA4Li42NzY4
ZmUxMmExZTVlNzIyMGM1MzY5MGZlNmY5NzM1N2NhZTdjZGIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpA
QCAtMTA5LDE0ICsxMDksNyBAQCBTdHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVudDo6Z3JvdXBMYWJl
bFRleHQoKSBjb25zdAogICAgIAogSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRHcm91cEVsZW1l
bnQ6Om93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPENvbnRhaW5lck5v
ZGU+IHNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0ICYmICFpczxIVE1M
U2VsZWN0RWxlbWVudD4oKnNlbGVjdCkpCi0gICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50
Tm9kZSgpOwotICAgIAotICAgIGlmICghc2VsZWN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAKLSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KHNlbGVjdC5nZXQo
KSk7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihhbmNlc3RvcnNP
ZlR5cGU8SFRNTFNlbGVjdEVsZW1lbnQ+KCp0aGlzKS5maXJzdCgpKTsKIH0KIAogdm9pZCBIVE1M
T3B0R3JvdXBFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKaW5kZXggYzNkZDMwZDVkYzYyYmY4MzE3MDllNTcwMDQ2
ODhkNGE4OGIzZTJhNi4uM2MwMWU2OTVhZDEwMjY3N2FhZmYwMmRiMGYyMTFkYjg4ZjY5Mjg0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKQEAgLTMsNyArMyw3
IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29t
KQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMTY2LDggKzE2Niw4IEBAIHZvaWQgSFRNTE9wdGlv
bkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0
IEF0b21TdHJpCiB7CiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgaWYgKG5hbWUg
PT0gdmFsdWVBdHRyKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8SFRNTERhdGFMaXN0RWxlbWVudD4g
ZGF0YUxpc3QgPSBvd25lckRhdGFMaXN0RWxlbWVudCgpKQotICAgICAgICAgICAgZGF0YUxpc3Qt
Pm9wdGlvbkVsZW1lbnRDaGlsZHJlbkNoYW5nZWQoKTsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRh
TGlzdCA6IGFuY2VzdG9yc09mVHlwZTxIVE1MRGF0YUxpc3RFbGVtZW50PigqdGhpcykpCisgICAg
ICAgICAgICBkYXRhTGlzdC5vcHRpb25FbGVtZW50Q2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgfSBl
bHNlCiAjZW5kaWYKICAgICBpZiAobmFtZSA9PSBkaXNhYmxlZEF0dHIpIHsKQEAgLTIzOCwzOSAr
MjM4LDE3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUoYm9vbCBz
ZWxlY3RlZCkKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBD
aGlsZENoYW5nZSYgY2hhbmdlKQogewogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotICAg
IGlmIChSZWZQdHI8SFRNTERhdGFMaXN0RWxlbWVudD4gZGF0YUxpc3QgPSBvd25lckRhdGFMaXN0
RWxlbWVudCgpKQotICAgICAgICBkYXRhTGlzdC0+b3B0aW9uRWxlbWVudENoaWxkcmVuQ2hhbmdl
ZCgpOwotICAgIGVsc2UKKyAgICBmb3IgKGF1dG8mIGRhdGFMaXN0IDogYW5jZXN0b3JzT2ZUeXBl
PEhUTUxEYXRhTGlzdEVsZW1lbnQ+KCp0aGlzKSkKKyAgICAgICAgZGF0YUxpc3Qub3B0aW9uRWxl
bWVudENoaWxkcmVuQ2hhbmdlZCgpOwogI2VuZGlmCiAgICAgaWYgKFJlZlB0cjxIVE1MU2VsZWN0
RWxlbWVudD4gc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCkpCiAgICAgICAgIHNlbGVjdC0+
b3B0aW9uRWxlbWVudENoaWxkcmVuQ2hhbmdlZCgpOwogICAgIEhUTUxFbGVtZW50OjpjaGlsZHJl
bkNoYW5nZWQoY2hhbmdlKTsKIH0KIAotI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotSFRN
TERhdGFMaXN0RWxlbWVudCogSFRNTE9wdGlvbkVsZW1lbnQ6Om93bmVyRGF0YUxpc3RFbGVtZW50
KCkgY29uc3QKLXsKLSAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gZGF0YWxpc3QgPSBwYXJlbnRO
b2RlKCk7Ci0gICAgd2hpbGUgKGRhdGFsaXN0ICYmICFpczxIVE1MRGF0YUxpc3RFbGVtZW50Pigq
ZGF0YWxpc3QpKQotICAgICAgICBkYXRhbGlzdCA9IGRhdGFsaXN0LT5wYXJlbnROb2RlKCk7Ci0K
LSAgICBpZiAoIWRhdGFsaXN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biBkb3duY2FzdDxIVE1MRGF0YUxpc3RFbGVtZW50PihkYXRhbGlzdC5nZXQoKSk7Ci19Ci0jZW5k
aWYKLQogSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRpb25FbGVtZW50Ojpvd25lclNlbGVjdEVs
ZW1lbnQoKSBjb25zdAogewotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBzZWxlY3QgPSBwYXJl
bnROb2RlKCk7Ci0gICAgd2hpbGUgKHNlbGVjdCAmJiAhaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KCpz
ZWxlY3QpKQotICAgICAgICBzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5vZGUoKTsKLQotICAgIGlm
ICghc2VsZWN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBkb3duY2Fz
dDxIVE1MU2VsZWN0RWxlbWVudD4oc2VsZWN0LmdldCgpKTsKKyAgICByZXR1cm4gY29uc3RfY2Fz
dDxIVE1MU2VsZWN0RWxlbWVudCo+KGFuY2VzdG9yc09mVHlwZTxIVE1MU2VsZWN0RWxlbWVudD4o
KnRoaXMpLmZpcnN0KCkpOwogfQogCiBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OmxhYmVsKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAppbmRleCBmMGQ5NGM4
YTZiNWYzMDgzMzRlYWExMWRhOWU0MDIxYjVjMGU1N2U2Li45MWM1YWJjN2UwMTdjMTFmYTEzMmZk
MzFmMDFiZTFlMzI0ZTI2YjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxP
cHRpb25FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVu
dC5oCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVy
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MjgsNyArMjgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxEYXRhTGlz
dEVsZW1lbnQ7CiBjbGFzcyBIVE1MU2VsZWN0RWxlbWVudDsKIAogY2xhc3MgSFRNTE9wdGlvbkVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewpAQCAtNDksOSArNDgsNiBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZWxlY3RlZCgpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbCk7CiAKLSNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVO
VCkKLSAgICBXRUJDT1JFX0VYUE9SVCBIVE1MRGF0YUxpc3RFbGVtZW50KiBvd25lckRhdGFMaXN0
RWxlbWVudCgpIGNvbnN0OwotI2VuZGlmCiAgICAgV0VCQ09SRV9FWFBPUlQgSFRNTFNlbGVjdEVs
ZW1lbnQqIG93bmVyU2VsZWN0RWxlbWVudCgpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIGxhYmVsKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25zQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25z
Q29sbGVjdGlvbi5jcHAKaW5kZXggYTYwNzY2YmQ3ODU4NTk4NmEyMjlmZTg2ZmI0MmM2OGFmZDkx
YmE0OS4uMzBiYmNmMzY5ODQyNzYxZGQwYjUzNDQxNzhiNDcwMTA2MzU1NTIyMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcApAQCAtMjgsNyArMjgs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSFRN
TE9wdGlvbnNDb2xsZWN0aW9uKTsKIAogSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpIVE1MT3B0aW9u
c0NvbGxlY3Rpb24oSFRNTFNlbGVjdEVsZW1lbnQmIHNlbGVjdCkKLSAgICA6IENhY2hlZEhUTUxD
b2xsZWN0aW9uPEhUTUxPcHRpb25zQ29sbGVjdGlvbiwgQ29sbGVjdGlvblR5cGVUcmFpdHM8U2Vs
ZWN0T3B0aW9ucz46OnRyYXZlcnNhbFR5cGU+KHNlbGVjdCwgU2VsZWN0T3B0aW9ucykKKyAgICA6
IENhY2hlZEhUTUxDb2xsZWN0aW9uKHNlbGVjdCwgU2VsZWN0T3B0aW9ucykKIHsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAppbmRleCBmYmY4Zjcz
M2U0ODAwMDQ5MWVhZDg2MTY3M2I4NjMxOTIzZjk5MTg2Li5hNjAwMzhmZTk0ZjI5OGIwOGVhNGFi
NmVkYWNkN2QxNTU3YWE4NzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUNlbGxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNl
bGxFbGVtZW50LmNwcApAQCAtMTMxLDkgKzEzMSw5IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21T
CiAKIGNvbnN0IFN0eWxlUHJvcGVydGllcyogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmFkZGl0aW9u
YWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKFJlZlB0cjxI
VE1MVGFibGVFbGVtZW50PiB0YWJsZSA9IGZpbmRQYXJlbnRUYWJsZSgpKQorICAgIGlmIChhdXRv
IHRhYmxlID0gZmluZFBhcmVudFRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0YWJsZS0+YWRkaXRp
b25hbENlbGxTdHlsZSgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQog
CiBib29sIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1
dGUmIGF0dHJpYnV0ZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRhYmxlQ29sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVs
ZW1lbnQuY3BwCmluZGV4IDcyOGI1ZjNkMmI1NTIzYjA0YjM5OWYyY2M0YjU1YWE0ZjhiMWZjNzQu
LmY0ZDQ0NzU4MTFlOGE0MGNhMzJhNjdiY2Y2YjIxNmMyNTNhN2U3YTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcApAQCAtOTIsNyArOTIsNyBAQCBjb25z
dCBTdHlsZVByb3BlcnRpZXMqIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OmFkZGl0aW9uYWxQcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZQogewogICAgIGlmICghaGFzVGFnTmFtZShjb2xncm91cFRhZykp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChSZWZQdHI8SFRNTFRhYmxlRWxlbWVu
dD4gdGFibGUgPSBmaW5kUGFyZW50VGFibGUoKSkKKyAgICBpZiAoYXV0byB0YWJsZSA9IGZpbmRQ
YXJlbnRUYWJsZSgpKQogICAgICAgICByZXR1cm4gdGFibGUtPmFkZGl0aW9uYWxHcm91cFN0eWxl
KGZhbHNlKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUVsZW1lbnQuY3BwCmluZGV4IDc2N2EzZTM4YWY0ODJkZDkyYjE0OWM4ZjBlZThiODY2ZTdk
NGI3YmYuLmE1ZjgwZmUwYzkxZjg4ZDk2MGFiN2ZlN2FmMDY4YTQ4Yjg5NjQ1ZDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcApAQCAtNDczLDcgKzQ3Myw3IEBAIEhU
TUxUYWJsZUVsZW1lbnQ6OkNlbGxCb3JkZXJzIEhUTUxUYWJsZUVsZW1lbnQ6OmNlbGxCb3JkZXJz
KCkgY29uc3QKICAgICByZXR1cm4gTm9Cb3JkZXJzOwogfQogCi1SZWY8U3R5bGVQcm9wZXJ0aWVz
PiBIVE1MVGFibGVFbGVtZW50OjpjcmVhdGVTaGFyZWRDZWxsU3R5bGUoKQorUmVmPFN0eWxlUHJv
cGVydGllcz4gSFRNTFRhYmxlRWxlbWVudDo6Y3JlYXRlU2hhcmVkQ2VsbFN0eWxlKCkgY29uc3QK
IHsKICAgICBhdXRvIHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAK
QEAgLTUxNCw3ICs1MTQsNyBAQCBSZWY8U3R5bGVQcm9wZXJ0aWVzPiBIVE1MVGFibGVFbGVtZW50
OjpjcmVhdGVTaGFyZWRDZWxsU3R5bGUoKQogICAgIHJldHVybiBzdHlsZTsKIH0KIAotY29uc3Qg
U3R5bGVQcm9wZXJ0aWVzKiBIVE1MVGFibGVFbGVtZW50OjphZGRpdGlvbmFsQ2VsbFN0eWxlKCkK
K2NvbnN0IFN0eWxlUHJvcGVydGllcyogSFRNTFRhYmxlRWxlbWVudDo6YWRkaXRpb25hbENlbGxT
dHlsZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NoYXJlZENlbGxTdHlsZSkKICAgICAgICAgbV9z
aGFyZWRDZWxsU3R5bGUgPSBjcmVhdGVTaGFyZWRDZWxsU3R5bGUoKTsKQEAgLTUzOCwxMSArNTM4
LDEwIEBAIHN0YXRpYyBTdHlsZVByb3BlcnRpZXMqIGxlYWtHcm91cEJvcmRlclN0eWxlKGludCBy
b3dzKQogICAgIHJldHVybiAmc3R5bGUubGVha1JlZigpOwogfQogCi1jb25zdCBTdHlsZVByb3Bl
cnRpZXMqIEhUTUxUYWJsZUVsZW1lbnQ6OmFkZGl0aW9uYWxHcm91cFN0eWxlKGJvb2wgcm93cykK
K2NvbnN0IFN0eWxlUHJvcGVydGllcyogSFRNTFRhYmxlRWxlbWVudDo6YWRkaXRpb25hbEdyb3Vw
U3R5bGUoYm9vbCByb3dzKSBjb25zdAogewogICAgIGlmIChtX3J1bGVzQXR0ciAhPSBHcm91cHNS
dWxlcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
aWYgKHJvd3MpIHsKICAgICAgICAgc3RhdGljIFN0eWxlUHJvcGVydGllcyogcm93Qm9yZGVyU3R5
bGUgPSBsZWFrR3JvdXBCb3JkZXJTdHlsZSh0cnVlKTsKICAgICAgICAgcmV0dXJuIHJvd0JvcmRl
clN0eWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuaAppbmRleCBiMzY1NDIw
OWJkYTg1Nzg4NWM2OTMxYzgxYjRlZTNmOTg2ZjM4NDE2Li44MjQ2ODk2OGVjMmY2YmE3ZTEzNzcz
NTIxYjNlMzZiOTdjNmJhMzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQu
aApAQCAtNjUsOCArNjUsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXRvbVN0cmluZyYgcnVsZXMo
KSBjb25zdDsKICAgICBjb25zdCBBdG9tU3RyaW5nJiBzdW1tYXJ5KCkgY29uc3Q7CiAKLSAgICBj
b25zdCBTdHlsZVByb3BlcnRpZXMqIGFkZGl0aW9uYWxDZWxsU3R5bGUoKTsKLSAgICBjb25zdCBT
dHlsZVByb3BlcnRpZXMqIGFkZGl0aW9uYWxHcm91cFN0eWxlKGJvb2wgcm93cyk7CisgICAgY29u
c3QgU3R5bGVQcm9wZXJ0aWVzKiBhZGRpdGlvbmFsQ2VsbFN0eWxlKCkgY29uc3Q7CisgICAgY29u
c3QgU3R5bGVQcm9wZXJ0aWVzKiBhZGRpdGlvbmFsR3JvdXBTdHlsZShib29sIHJvd3MpIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIEhUTUxUYWJsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Jik7CkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAKICAgICBDZWxsQm9yZGVy
cyBjZWxsQm9yZGVycygpIGNvbnN0OwogCi0gICAgUmVmPFN0eWxlUHJvcGVydGllcz4gY3JlYXRl
U2hhcmVkQ2VsbFN0eWxlKCk7CisgICAgUmVmPFN0eWxlUHJvcGVydGllcz4gY3JlYXRlU2hhcmVk
Q2VsbFN0eWxlKCkgY29uc3Q7CiAKICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogbGFzdEJv
ZHkoKSBjb25zdDsKIApAQCAtOTUsNyArOTUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9mcmFt
ZUF0dHIgeyBmYWxzZSB9OyAvLyBJbXBsaWVzIGEgdGhpbiBib3JkZXIgd2lkdGggaWYgbm8gYm9y
ZGVyIGlzIHNldCBhbmQgdGhlbiBhIGNlcnRhaW4gc2V0IG9mIHNvbGlkL2hpZGRlbiBib3JkZXJz
IGJhc2VkIG9mZiB0aGUgdmFsdWUuCiAgICAgVGFibGVSdWxlcyBtX3J1bGVzQXR0ciB7IFVuc2V0
UnVsZXMgfTsgLy8gSW1wbGllcyBhIHRoaW4gYm9yZGVyIHdpZHRoLCBhIGNvbGxhcHNpbmcgYm9y
ZGVyIG1vZGVsLCBhbmQgYWxsIGJvcmRlcnMgb24gdGhlIHRhYmxlIGJlY29taW5nIHNldCB0byBo
aWRkZW4gKGlmIGZyYW1lL2JvcmRlciBhcmUgcHJlc2VudCwgdG8gbm9uZSBvdGhlcndpc2UpLgog
ICAgIHVuc2lnbmVkIHNob3J0IG1fcGFkZGluZyB7IDEgfTsKLSAgICBSZWZQdHI8U3R5bGVQcm9w
ZXJ0aWVzPiBtX3NoYXJlZENlbGxTdHlsZTsKKyAgICBtdXRhYmxlIFJlZlB0cjxjb25zdCBTdHls
ZVByb3BlcnRpZXM+IG1fc2hhcmVkQ2VsbFN0eWxlOwogfTsKIAogfSAvL25hbWVzcGFjZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmNwcAppbmRleCAzNTg3ODAx
NjIxMGZjYWFmZjYwOTBlNjk1Mzk0MTU1YzQ1NWFlYTdjLi4zNDliMDM1MTJhOGVjNTQwNTI0MWJi
YTZmYzNkNGE5ZmY3NDM2ZWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZVBhcnRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVBh
cnRFbGVtZW50LmNwcApAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OCBXYWxk
byBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTg1LDEyICs4NSw5IEBA
IHZvaWQgSFRNTFRhYmxlUGFydEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlbnRhdGlvbkF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROCiAgICAgICAgIEhUTUxFbGVtZW50Ojpjb2xsZWN0U3R5
bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHN0eWxlKTsKIH0KIAotUmVm
UHRyPEhUTUxUYWJsZUVsZW1lbnQ+IEhUTUxUYWJsZVBhcnRFbGVtZW50OjpmaW5kUGFyZW50VGFi
bGUoKSBjb25zdAorUmVmUHRyPGNvbnN0IEhUTUxUYWJsZUVsZW1lbnQ+IEhUTUxUYWJsZVBhcnRF
bGVtZW50OjpmaW5kUGFyZW50VGFibGUoKSBjb25zdAogewotICAgIFJlZlB0cjxDb250YWluZXJO
b2RlPiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKHBhcmVudCAmJiAhaXM8SFRN
TFRhYmxlRWxlbWVudD4oKnBhcmVudCkpCi0gICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50
Tm9kZSgpOwotICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50PihwYXJlbnQuZ2V0
KCkpOworICAgIHJldHVybiBhbmNlc3RvcnNPZlR5cGU8SFRNTFRhYmxlRWxlbWVudD4oKnRoaXMp
LmZpcnN0KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRh
YmxlUGFydEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1l
bnQuaAppbmRleCBkM2JjZjUwYmFlMjFjMzU4Y2RlMjNmMzM2M2U1YzY5MmQ1NmYxMWU2Li4wNGY5
NDcxYmFiYTI4NzdmNzU0NTQwYzliMWE1ODA5NzI3YmViNTcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGFibGVQYXJ0RWxlbWVudC5oCkBAIC00LDcgKzQsNyBAQAogICogICAgICAgICAg
IChDKSAxOTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
Ym9vbCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8SFRNTFRhYmxlRWxlbWVudD4gZmluZFBh
cmVudFRhYmxlKCkgY29uc3Q7CisgICAgUmVmUHRyPGNvbnN0IEhUTUxUYWJsZUVsZW1lbnQ+IGZp
bmRQYXJlbnRUYWJsZSgpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAppbmRleCA3
YTY3Yjc3M2FiMzk5ZWIzOTIzMDA4NDYwMjFlOWViYjA5YTI5MWFiLi4yM2VlY2RhMTU3NmM0YzNl
Yzc1NDBlM2FhMDYxNmYzZjIwNTBlMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcApAQCAtMTUyLDcgKzE1Miw3IEBAIEhUTUxUYWJsZVJv
d0VsZW1lbnQqIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpsYXN0Um93KEhUTUxUYWJsZUVsZW1l
bnQmIHRhYmxlKQogfQogCiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6SFRNTFRhYmxlUm93c0Nv
bGxlY3Rpb24oSFRNTFRhYmxlRWxlbWVudCYgdGFibGUpCi0gICAgOiBDYWNoZWRIVE1MQ29sbGVj
dGlvbjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbiwgQ29sbGVjdGlvblR5cGVUcmFpdHM8VGFibGVS
b3dzPjo6dHJhdmVyc2FsVHlwZT4odGFibGUsIFRhYmxlUm93cykKKyAgICA6IENhY2hlZEhUTUxD
b2xsZWN0aW9uKHRhYmxlLCBUYWJsZVJvd3MpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggOTljNTZlYmY1ZTA2
ZDc2NmJlMjcwYmFjM2FhMjk2MmJiNTlkMzQ4MC4uYTdiYTQxN2Q3ZDUxNzE0YzBlNTUyYzBkNTlh
MDExYjUxNTFiMGM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBB
bGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNzY0LDM0
ICs3NjQsMjQgQEAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIGVuY2xvc2luZ1RleHRGb3Jt
Q29udHJvbChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgcmV0dXJuIGFuY2VzdG9yICYm
IGFuY2VzdG9yLT5pc1RleHRGaWVsZCgpID8gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ+KGFuY2VzdG9yLmdldCgpKSA6IG51bGxwdHI7CiB9CiAKLXN0YXRpYyBjb25zdCBFbGVt
ZW50KiBwYXJlbnRIVE1MRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIHdo
aWxlIChlbGVtZW50KSB7Ci0gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50
KCk7Ci0gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQogU3Ry
aW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXJlY3Rpb25Gb3JGb3JtRGF0YSgpIGNv
bnN0CiB7Ci0gICAgZm9yIChjb25zdCBFbGVtZW50KiBlbGVtZW50ID0gdGhpczsgZWxlbWVudDsg
ZWxlbWVudCA9IHBhcmVudEhUTUxFbGVtZW50KGVsZW1lbnQpKSB7Ci0gICAgICAgIGNvbnN0IEF0
b21TdHJpbmcmIGRpckF0dHJpYnV0ZVZhbHVlID0gZWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihkaXJBdHRyKTsKLSAgICAgICAgaWYgKGRpckF0dHJpYnV0ZVZhbHVlLmlz
TnVsbCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGRpckF0dHJpYnV0ZVZhbHVlLCAicnRsIikgfHwgZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZGlyQXR0cmlidXRlVmFsdWUsICJsdHIiKSkKLSAgICAgICAg
ICAgIHJldHVybiBkaXJBdHRyaWJ1dGVWYWx1ZTsKLQotICAgICAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZGlyQXR0cmlidXRlVmFsdWUsICJhdXRvIikpIHsKLSAgICAgICAg
ICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9u
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihlbGVtZW50KS0+ZGlyZWN0aW9uYWxp
dHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0
RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCA/ICJydGwiIDogImx0ciI7CisgICAgYXV0
byBkaXJlY3Rpb24gPSBbdGhpc10geworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaW5l
YWdlT2ZUeXBlPEhUTUxFbGVtZW50PigqdGhpcykpIHsKKyAgICAgICAgICAgIGF1dG8mIHZhbHVl
ID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGRpckF0dHIpOworICAg
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAicnRsIikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImx0ciIpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJhdXRvIikpIHsKKyAgICAgICAgICAg
ICAgICBib29sIGlzQXV0bzsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5kaXJlY3Rp
b25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOworICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgfQorICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgIH0o
KTsKIAotICAgIHJldHVybiAibHRyIjsKKyAgICByZXR1cm4gZGlyZWN0aW9uID09IFRleHREaXJl
Y3Rpb246OkxUUiA/ICJsdHIiX3MgOiAicnRsIl9zOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0TWF4TGVuZ3RoKGludCBtYXhMZW5ndGgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRBY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRp
dEFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IGUxZTIzYTc2YTRkOTQ2ZjllYTI3ZjYyNmEy
MmIyY2M3NzhhOTRkMzEuLjQ0ODNkZjcwMDNmYjFlZDU0OTZkY2FiYjIzMDNlYWE1NTBjN2RmZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdEFjY2Vz
c2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JBdWRpdEFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC0zMiwxMCArMzIsOCBAQAogI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJDb250YWluZXJO
b2RlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5j
bHVkZSAiRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIgorI2luY2x1ZGUgIkVsZW1lbnRJdGVy
YXRvci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNs
dWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNzAsNyArNjgsNyBAQCBFeGNlcHRpb25PcjxW
ZWN0b3I8UmVmPE5vZGU+Pj4gSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0OjpnZXRF
bGVtZW50c0J5QwogCiAgICAgVmVjdG9yPFJlZjxOb2RlPj4gbm9kZXM7CiAKLSAgICBmb3IgKEVs
ZW1lbnQmIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFudHMoaXM8Q29udGFpbmVyTm9kZT4oY29u
dGFpbmVyKSA/IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpjb250YWluZXIpIDogZG9jdW1lbnQp
KSB7CisgICAgZm9yIChFbGVtZW50JiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVu
dD4oaXM8Q29udGFpbmVyTm9kZT4oY29udGFpbmVyKSA/IGRvd25jYXN0PENvbnRhaW5lck5vZGU+
KCpjb250YWluZXIpIDogZG9jdW1lbnQpKSB7CiAgICAgICAgIGlmIChBWENvcmVPYmplY3QqIGF4
T2JqZWN0ID0gYWNjZXNzaWJsaXR5T2JqZWN0Rm9yTm9kZShlbGVtZW50KSkgewogICAgICAgICAg
ICAgaWYgKGF4T2JqZWN0LT5jb21wdXRlZFJvbGVTdHJpbmcoKSA9PSByb2xlKQogICAgICAgICAg
ICAgICAgIG5vZGVzLmFwcGVuZChlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggMjkzMGI0NWY4ZjIw
NzUxZTg1NmNkYTNlMDUxODlhYTQ0NGUxODU1MS4uYWNlNWY5YWM1M2NiZTI2ZmQzYzRkOWQ0ZjIy
NDk0ZmQ4MDY1YTU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwOSwyMCArNTA5LDE4IEBAIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG5vCiAgICAgICAgIC8vIEluaGVyaXRlZCBzdHlsZXMuCiAgICAgICAgIGlm
ICghaW5jbHVkZUluaGVyaXRlZCB8fCAqaW5jbHVkZUluaGVyaXRlZCkgewogICAgICAgICAgICAg
YXV0byBlbnRyaWVzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Oklu
aGVyaXRlZFN0eWxlRW50cnk+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIEVsZW1lbnQqIHBhcmVu
dEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAgICB3aGlsZSAo
cGFyZW50RWxlbWVudCkgewotICAgICAgICAgICAgICAgIGF1dG8mIHBhcmVudFN0eWxlUmVzb2x2
ZXIgPSBwYXJlbnRFbGVtZW50LT5zdHlsZVJlc29sdmVyKCk7Ci0gICAgICAgICAgICAgICAgYXV0
byBwYXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRTdHlsZVJlc29sdmVyLnN0eWxlUnVsZXNGb3JF
bGVtZW50KHBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZXNvbHZlcjo6QWxsQ1NTUnVsZXMpOworICAg
ICAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxFbGVtZW50Pigq
ZWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBwYXJlbnRTdHlsZVJlc29sdmVyID0g
YW5jZXN0b3Iuc3R5bGVSZXNvbHZlcigpOworICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50TWF0
Y2hlZFJ1bGVzID0gcGFyZW50U3R5bGVSZXNvbHZlci5zdHlsZVJ1bGVzRm9yRWxlbWVudCgmYW5j
ZXN0b3IsIFN0eWxlOjpSZXNvbHZlcjo6QWxsQ1NTUnVsZXMpOwogICAgICAgICAgICAgICAgIGF1
dG8gZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk6
OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRNYXRjaGVkQ1NTUnVsZXMoYnVpbGRB
cnJheUZvck1hdGNoZWRSdWxlTGlzdChwYXJlbnRNYXRjaGVkUnVsZXMsIHN0eWxlUmVzb2x2ZXIs
ICpwYXJlbnRFbGVtZW50LCBQc2V1ZG9JZDo6Tm9uZSkpCisgICAgICAgICAgICAgICAgICAgIC5z
ZXRNYXRjaGVkQ1NTUnVsZXMoYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChwYXJlbnRNYXRj
aGVkUnVsZXMsIHN0eWxlUmVzb2x2ZXIsIGFuY2VzdG9yLCBQc2V1ZG9JZDo6Tm9uZSkpCiAgICAg
ICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPFN0eWxl
ZEVsZW1lbnQ+KCpwYXJlbnRFbGVtZW50KSAmJiBkb3duY2FzdDxTdHlsZWRFbGVtZW50PigqcGFy
ZW50RWxlbWVudCkuY3Nzb21TdHlsZSgpLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8mIHN0eWxlU2hlZXQgPSBhc0luc3BlY3RvclN0eWxlU2hlZXQoZG93bmNhc3Q8U3R5bGVk
RWxlbWVudD4oKnBhcmVudEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8U3R5bGVk
RWxlbWVudD4oYW5jZXN0b3IpICYmIGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGFuY2VzdG9yKS5j
c3NvbVN0eWxlKCkubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgc3R5bGVT
aGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChkb3duY2FzdDxTdHlsZWRFbGVtZW50PihhbmNl
c3RvcikpOwogICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c2V0SW5saW5lU3R5bGUoc3R5bGVT
aGVldC5idWlsZE9iamVjdEZvclN0eWxlKHN0eWxlU2hlZXQuc3R5bGVGb3JJZChJbnNwZWN0b3JD
U1NJZChzdHlsZVNoZWV0LmlkKCksIDApKSkpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIGVudHJpZXMtPmFkZEl0ZW0oV1RGTW92ZShlbnRyeSkpOwotICAgICAgICAgICAg
ICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGluaGVyaXRlZEVudHJpZXMgPSBXVEZNb3ZlKGVudHJp
ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTUFnZW50LmNwcAppbmRleCAwZjQ2YTMwMzNhZWY0MDA3ZjZlYjgzN2E2MTA1ZjA1YTBjNTkw
NjdmLi5kMmNhNWJiZTEwOWFhYWQxODJiYWUxODVjNGQ1MmQ4YWFlY2RhODRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGgg
UGVjb3Jhcm8KICAqCkBAIC0xMTE0LDcgKzExMTQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjppbnNwZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUpCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBp
bnNwZWN0ZWROb2RlOwogICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoaWdub3JlZCwgZmFsc2UsIG51
bGxwdHIsIGZhbHNlKTsKIAotICAgIGlmIChub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1F
TlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX05PREUpCisgICAg
aWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIW5vZGUtPmlzRG9jdW1lbnROb2RlKCkpCiAg
ICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgbV9ub2RlVG9Gb2N1cyA9IG5v
ZGU7CiAKQEAgLTExNTksNyArMTE1OSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRNb3VzZWRPdmVyTm9kZSgpCiB7CiAgICAgTm9k
ZSogbm9kZSA9IG1fbW91c2VkT3Zlck5vZGUuZ2V0KCk7Ci0gICAgd2hpbGUgKG5vZGUgJiYgbm9k
ZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUpCisgICAgaWYgKG5vZGUgJiYgbm9kZS0+
aXNUZXh0Tm9kZSgpKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIGlm
IChub2RlICYmIG1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcpCiAgICAgICAgIG1fb3Zlcmxh
eS0+aGlnaGxpZ2h0Tm9kZShub2RlLCAqbV9pbnNwZWN0TW9kZUhpZ2hsaWdodENvbmZpZyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IGRhZDAwMmIxOTY4YWQwYjQy
NmZiMTJiN2E2NWEwZjM3Mzg2YmU4YmIuLjA1OWY0NWQ2MjlmNTg4NjViNDA3Y2NiZTFhNzJhZDJl
ZGY1M2Q2YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI2
MCw2ICsxMjYwLDE1IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmJlZ2luRHJhZyhEcmFnSXRlbSBk
cmFnSXRlbSwgRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRQb2ludCYKICAgICBjbGllbnQoKS5iZWdp
bkRyYWcoV1RGTW92ZShkcmFnSXRlbSksIGZyYW1lLCBtb3VzZURvd25Qb2ludEluUm9vdFZpZXdD
b29yZGluYXRlcywgbW91c2VEcmFnZ2VkUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIGRhdGFU
cmFuc2ZlciwgZHJhZ1NvdXJjZUFjdGlvbik7CiB9CiAKK3N0YXRpYyBSZWZQdHI8RWxlbWVudD4g
Y29udGFpbmluZ0xpbmtFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgZm9yIChhdXRv
JiBjdXJyZW50RWxlbWVudCA6IGxpbmVhZ2VPZlR5cGU8RWxlbWVudD4oZWxlbWVudCkpIHsKKyAg
ICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmlzTGluaygpKQorICAgICAgICAgICAgcmV0dXJuICZj
dXJyZW50RWxlbWVudDsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIHZvaWQgRHJh
Z0NvbnRyb2xsZXI6OmRvU3lzdGVtRHJhZyhEcmFnSW1hZ2UgaW1hZ2UsIGNvbnN0IEludFBvaW50
JiBkcmFnTG9jLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIEZyYW1lJiBmcmFtZSwgY29uc3Qg
RHJhZ1N0YXRlJiBzdGF0ZSwgUHJvbWlzZWRBdHRhY2htZW50SW5mbyYmIHByb21pc2VkQXR0YWNo
bWVudEluZm8pCiB7CiAgICAgbV9kaWRJbml0aWF0ZURyYWcgPSB0cnVlOwpAQCAtMTI5NiwxOCAr
MTMwNSw3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvU3lzdGVtRHJhZyhEcmFnSW1hZ2UgaW1h
Z2UsIGNvbnN0IEludFBvaW50JiBkcmFnTG9jLCBjb25zCiAgICAgICAgICAgICBpdGVtLmRyYWdQ
cmV2aWV3RnJhbWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBlbGVtZW50LT5ib3VuZHNJblJvb3RW
aWV3U3BhY2UoKTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBsaW5rOwot
ICAgICAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgICAgICBsaW5rID0gZWxlbWVu
dDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnRFbGVtZW50
IDogZWxlbWVudExpbmVhZ2UoZWxlbWVudC5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudEVsZW1lbnQuaXNMaW5rKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbGluayA9ICZj
dXJyZW50RWxlbWVudDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChsaW5rKSB7CisgICAg
ICAgIGlmIChhdXRvIGxpbmsgPSBjb250YWluaW5nTGlua0VsZW1lbnQoKmVsZW1lbnQpKSB7CiAg
ICAgICAgICAgICBhdXRvIHRpdGxlQXR0cmlidXRlID0gbGluay0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnRpdGxlQXR0cik7CiAgICAgICAgICAgICBpdGVtLnRp
dGxlID0gdGl0bGVBdHRyaWJ1dGUuaXNFbXB0eSgpID8gbGluay0+aW5uZXJUZXh0KCkgOiB0aXRs
ZUF0dHJpYnV0ZS5zdHJpbmcoKTsKICAgICAgICAgICAgIGl0ZW0udXJsID0gZnJhbWUuZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGxpbmst
PmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggODhjYTNlNTAzNzM3
MzAxNWM1MjAzMGYwNTQ4YzBmYjMzMmUxMDc2ZC4uZmNhZjAwYzUwYmJmNjAzZWYzYTNhOWZkODM0
ZDNjOTllMzMzYjk1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuY3BwCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCisjaW5jbHVkZSAiRWxl
bWVudEFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNp
bmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5o
IgpAQCAtNDgxLDYgKzQ4Myw3IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6c3R5bGVDaGFuZ2Vk
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSoKIH0KIAogI2lmIEVO
QUJMRShDU1NfQ09NUE9TSVRJTkcpCisKIGJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6aXNvbGF0ZXNC
bGVuZGluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIHN0eWxlLnN2
Z1N0eWxlKCkuaXNvbGF0ZXNCbGVuZGluZygpIHx8IHN0eWxlLmhhc0ZpbHRlcigpIHx8IHN0eWxl
Lmhhc0JsZW5kTW9kZSgpIHx8IHN0eWxlLm9wYWNpdHkoKSA8IDEuMGY7CkBAIC00OTEsMjAgKzQ5
NCwxNiBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OnVwZGF0ZU1hc2tlZEFuY2VzdG9yU2hvdWxk
SXNvbGF0ZUJsZW5kaW5nKGNvbnN0IFJlbmRlckVsZQogICAgIEFTU0VSVChyZW5kZXJlci5lbGVt
ZW50KCkpOwogICAgIEFTU0VSVChyZW5kZXJlci5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKTsK
IAotICAgIGJvb2wgbWFza2VkQW5jZXN0b3JTaG91bGRJc29sYXRlQmxlbmRpbmcgPSByZW5kZXJl
ci5zdHlsZSgpLmhhc0JsZW5kTW9kZSgpOwotICAgIGZvciAoYXV0byogYW5jZXN0b3IgPSByZW5k
ZXJlci5lbGVtZW50KCktPnBhcmVudEVsZW1lbnQoKTsgYW5jZXN0b3IgJiYgYW5jZXN0b3ItPmlz
U1ZHRWxlbWVudCgpOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRFbGVtZW50KCkpIHsKLSAg
ICAgICAgaWYgKCFkb3duY2FzdDxTVkdFbGVtZW50PigqYW5jZXN0b3IpLmlzU1ZHR3JhcGhpY3NF
bGVtZW50KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25zdCBhdXRvKiBz
dHlsZSA9IGFuY2VzdG9yLT5jb21wdXRlZFN0eWxlKCk7CisgICAgZm9yIChhdXRvJiBhbmNlc3Rv
ciA6IGFuY2VzdG9yc09mVHlwZTxTVkdHcmFwaGljc0VsZW1lbnQ+KCpyZW5kZXJlci5lbGVtZW50
KCkpKSB7CisgICAgICAgIGF1dG8qIHN0eWxlID0gYW5jZXN0b3IuY29tcHV0ZWRTdHlsZSgpOwog
ICAgICAgICBpZiAoIXN0eWxlIHx8ICFpc29sYXRlc0JsZW5kaW5nKCpzdHlsZSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoYW5jZXN0b3ItPmNvbXB1dGVkU3R5bGUoKS0+
c3ZnU3R5bGUoKS5oYXNNYXNrZXIoKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFNWR0dyYXBoaWNz
RWxlbWVudD4oKmFuY2VzdG9yKS5zZXRTaG91bGRJc29sYXRlQmxlbmRpbmcobWFza2VkQW5jZXN0
b3JTaG91bGRJc29sYXRlQmxlbmRpbmcpOwotCisgICAgICAgIGlmIChzdHlsZS0+c3ZnU3R5bGUo
KS5oYXNNYXNrZXIoKSkKKyAgICAgICAgICAgIGFuY2VzdG9yLnNldFNob3VsZElzb2xhdGVCbGVu
ZGluZyhyZW5kZXJlci5zdHlsZSgpLmhhc0JsZW5kTW9kZSgpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIH0KKwogI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCmluZGV4IDk4ZmNm
ZmJjYTRkNzEyNjdlNzQ1ZmVkYjliMzBlODBkMGM5YjYyY2YuLjc2NmExMjhjZmM1ODUyYjdhNjUy
NzQwODNmZjY0YWIxOGEwYWZjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaApAQCAtMTQxLDYg
KzE0MSw4IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8U1ZHQXR0cmlidXRlQW5pbWF0b3I+IGNyZWF0
ZUFuaW1hdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBBbmltYXRpb25Nb2RlLCBDYWxjTW9kZSwg
Ym9vbCBpc0FjY3VtdWxhdGVkLCBib29sIGlzQWRkaXRpdmUpOwogICAgIHZvaWQgYW5pbWF0b3JX
aWxsQmVEZWxldGVkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAorICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkID0gUHNldWRvSWQ6Ok5vbmUpIGZpbmFsOworCiAg
ICAgLy8gVGhlc2UgYXJlIG5lZWRlZCBmb3IgdGhlIFJlbmRlclRyZWUsIGFuaW1hdGlvbiBhbmQg
RE9NLgogICAgIFN0cmluZyBjbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzTmFtZS0+
Y3VycmVudFZhbHVlKCk7IH0KICAgICBTVkdBbmltYXRlZFN0cmluZyYgY2xhc3NOYW1lQW5pbWF0
ZWQoKSB7IHJldHVybiBtX2NsYXNzTmFtZTsgfQpAQCAtMTczLDggKzE3NSw2IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIHdpbGxSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdlKSBvdmVycmlkZTsKIAog
cHJpdmF0ZToKLSAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9
IFBzZXVkb0lkOjpOb25lKSBmaW5hbDsKLQogICAgIHZpcnR1YWwgdm9pZCBjbGVhclRhcmdldCgp
IHsgfQogCiAgICAgdm9pZCBidWlsZFBlbmRpbmdSZXNvdXJjZXNJZk5lZWRlZCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCA3N2Q5
NGFmZTg1ZWJhMTY0MjZhNDE5N2Q3ZjkwNTY4YzNjMzZkMGFkLi5mNGVmZmVjOGVmNWQ0NzdlNDFj
N2ZiMDc4ZTYyOTMwMjI1ODczY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMjU5LDYgKzI1OSwzOCBAQCB2b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjpwYXVzZVBhcnNpbmcoKQogICAgIG1fcGFyc2VyUGF1c2VkID0gdHJ1ZTsKIH0K
IAorc3RydWN0IFhNTFBhcnNpbmdOYW1lc3BhY2VzIHsKKyAgICBBdG9tU3RyaW5nIGRlZmF1bHRO
YW1lc3BhY2U7CisgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBBdG9tU3RyaW5nPiBwcmVmaXhOYW1l
c3BhY2VzOworfTsKKworc3RhdGljIFhNTFBhcnNpbmdOYW1lc3BhY2VzIGZpbmRYTUxQYXJzaW5n
TmFtZXNwYWNlcyhFbGVtZW50KiBjb250ZXh0RWxlbWVudCkKK3sKKyAgICBpZiAoIWNvbnRleHRF
bGVtZW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgWE1MUGFyc2luZ05hbWVzcGFjZXMg
cmVzdWx0OworCisgICAgYm9vbCBzdG9wTG9va2luZ0ZvckRlZmF1bHROYW1lc3BhY2UgPSBmYWxz
ZTsKKworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpbmVhZ2VPZlR5cGU8RWxlbWVudD4oKmNv
bnRleHRFbGVtZW50KSkgeworICAgICAgICBpZiAoaXM8U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ+
KGVsZW1lbnQpKQorICAgICAgICAgICAgc3RvcExvb2tpbmdGb3JEZWZhdWx0TmFtZXNwYWNlID0g
dHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoIXN0b3BMb29raW5nRm9yRGVmYXVsdE5hbWVzcGFjZSkK
KyAgICAgICAgICAgIHJlc3VsdC5kZWZhdWx0TmFtZXNwYWNlID0gZWxlbWVudC5uYW1lc3BhY2VV
UkkoKTsKKworICAgICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlcygpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBlbGVtZW50LmF0
dHJpYnV0ZXNJdGVyYXRvcigpKSB7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlLnByZWZpeCgp
ID09IHhtbG5zQXRvbSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5wcmVmaXhOYW1lc3BhY2Vz
LnNldChhdHRyaWJ1dGUubG9jYWxOYW1lKCksIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIGJvb2wgWE1MRG9jdW1lbnRQYXJz
ZXI6OnBhcnNlRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmIGNodW5rLCBEb2N1bWVudEZy
YWdtZW50JiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIFBhcnNlckNvbnRlbnRQ
b2xpY3kgcGFyc2VyQ29udGVudFBvbGljeSkKIHsKICAgICBpZiAoIWNodW5rLmxlbmd0aCgpKQpA
QCAtMjcyLDI4ICszMDQsOCBAQCBib29sIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZURvY3VtZW50
RnJhZ21lbnQoY29uc3QgU3RyaW5nJiBjaHVuaywgRG9jdW1lbnRGcmFnbQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBIYXNoTWFwPEF0b21TdHJpbmcsIEF0b21TdHJpbmc+IHBy
ZWZpeFRvTmFtZXNwYWNlTWFwOwotICAgIEF0b21TdHJpbmcgZGVmYXVsdE5hbWVzcGFjZVVSSTsK
LSAgICBib29sIHN0b3BMb29raW5nRm9yRGVmYXVsdE5hbWVzcGFjZVVSSSA9IGZhbHNlOwotICAg
IAotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRMaW5lYWdlKGNvbnRleHRFbGVtZW50
KSkgewotICAgICAgICBpZiAoaXM8U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpKQot
ICAgICAgICAgICAgc3RvcExvb2tpbmdGb3JEZWZhdWx0TmFtZXNwYWNlVVJJID0gdHJ1ZTsKLSAg
ICAgICAgZWxzZSBpZiAoIXN0b3BMb29raW5nRm9yRGVmYXVsdE5hbWVzcGFjZVVSSSkKLSAgICAg
ICAgICAgIGRlZmF1bHROYW1lc3BhY2VVUkkgPSBlbGVtZW50Lm5hbWVzcGFjZVVSSSgpOwotCi0g
ICAgICAgIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogZWxlbWVudC5h
dHRyaWJ1dGVzSXRlcmF0b3IoKSkgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5wcmVmaXgo
KSA9PSB4bWxuc0F0b20oKSkKLSAgICAgICAgICAgICAgICBwcmVmaXhUb05hbWVzcGFjZU1hcC5z
ZXQoYXR0cmlidXRlLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmICghc3RvcExvb2tpbmdGb3JEZWZhdWx0TmFtZXNwYWNlVVJJICYmIGF0dHJpYnV0
ZS5wcmVmaXgoKSA9PSB4bWxuc0F0b20oKSkKLSAgICAgICAgICAgICAgICBkZWZhdWx0TmFtZXNw
YWNlVVJJID0gYXR0cmlidXRlLnZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRv
IHBhcnNlciA9IFhNTERvY3VtZW50UGFyc2VyOjpjcmVhdGUoZnJhZ21lbnQsIFdURk1vdmUocHJl
Zml4VG9OYW1lc3BhY2VNYXApLCBkZWZhdWx0TmFtZXNwYWNlVVJJLCBwYXJzZXJDb250ZW50UG9s
aWN5KTsKKyAgICBhdXRvIG5hbWVzcGFjZXMgPSBmaW5kWE1MUGFyc2luZ05hbWVzcGFjZXMoY29u
dGV4dEVsZW1lbnQpOworICAgIGF1dG8gcGFyc2VyID0gWE1MRG9jdW1lbnRQYXJzZXI6OmNyZWF0
ZShmcmFnbWVudCwgV1RGTW92ZShuYW1lc3BhY2VzLnByZWZpeE5hbWVzcGFjZXMpLCBuYW1lc3Bh
Y2VzLmRlZmF1bHROYW1lc3BhY2UsIHBhcnNlckNvbnRlbnRQb2xpY3kpOwogICAgIGJvb2wgd2Vs
bEZvcm1lZCA9IHBhcnNlci0+YXBwZW5kRnJhZ21lbnRTb3VyY2UoY2h1bmspOwogICAgIC8vIERv
IG5vdCBjYWxsIGZpbmlzaCgpLiBUaGUgZmluaXNoKCkgYW5kIGRvRW5kKCkgaW1wbGVtZW50YXRp
b25zIHRvdWNoIHRoZSBtYWluIGRvY3VtZW50IGFuZCBsb2FkZXIgYW5kIGNhbiBjYXVzZSBjcmFz
aGVzIGluIHRoZSBmcmFnbWVudCBjYXNlLgogICAgIHBhcnNlci0+ZGV0YWNoKCk7IC8vIEFsbG93
cyB+RG9jdW1lbnRQYXJzZXIgdG8gYXNzZXJ0IGl0IHdhcyBkZXRhY2hlZCBiZWZvcmUgZGVzdHJ1
Y3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCmluZGV4IDNmNWI2MTgxZTA2
ZTBhODQ2ODhiZGE5MTZmMTBkODdhNjFkMTRiZTcuLjZiMjc3M2VjOTczNTE4YTAxZTE0NTU0MDUy
NzI1ZTU1OTQwNmJjMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCkBAIC01
NTksMTIgKzU1OSwxMSBAQCBzdGF0aWMgV2ViQ29yZTo6RWxlbWVudCogY29udGFpbmVyRWxlbWVu
dEZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCYgZWxlbWVudCkKICAgICAvLyDCpzEzLiBFbGVt
ZW50IFN0YXRlLgogICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJp
dmVyLXNwZWMuaHRtbCNkZm4tY29udGFpbmVyLgogICAgIGlmIChpczxXZWJDb3JlOjpIVE1MT3B0
aW9uRWxlbWVudD4oZWxlbWVudCkpIHsKLSAgICAgICAgYXV0byYgb3B0aW9uRWxlbWVudCA9IGRv
d25jYXN0PFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KTsKICNpZiBFTkFCTEUo
REFUQUxJU1RfRUxFTUVOVCkKLSAgICAgICAgaWYgKGF1dG8qIHBhcmVudEVsZW1lbnQgPSBvcHRp
b25FbGVtZW50Lm93bmVyRGF0YUxpc3RFbGVtZW50KCkpCisgICAgICAgIGlmIChhdXRvKiBwYXJl
bnRFbGVtZW50ID0gV2ViQ29yZTo6YW5jZXN0b3JzT2ZUeXBlPFdlYkNvcmU6OkhUTUxEYXRhTGlz
dEVsZW1lbnQ+KGVsZW1lbnQpLmZpcnN0KCkpCiAgICAgICAgICAgICByZXR1cm4gcGFyZW50RWxl
bWVudDsKICNlbmRpZgotICAgICAgICBpZiAoYXV0byogcGFyZW50RWxlbWVudCA9IG9wdGlvbkVs
ZW1lbnQub3duZXJTZWxlY3RFbGVtZW50KCkpCisgICAgICAgIGlmIChhdXRvKiBwYXJlbnRFbGVt
ZW50ID0gZG93bmNhc3Q8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQpLm93bmVy
U2VsZWN0RWxlbWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHBhcmVudEVsZW1lbnQ7CiAKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJGcmFtZS5jcHAKaW5kZXggNzFhNzg2MGQ1OGY2ZDUyMTUxNGQzMzdiOGMwNzIxNjY4ODJm
MDZmMC4uZDQ1ZDE1MjUyOWEyMjQ4ZjIyZmZmOTlhMDMwNDBkMDczODFkZGQxOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9j
dW1lbnRMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0VkaXRvci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRWxlbWVudENoaWxkSXRlcmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50SGFu
ZGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWUuaD4KQEAgLTcxLDcgKzcyLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0pTRWxlbWVudC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSlNGaWxlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU1JhbmdlLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob2RlVHJhdmVyc2FsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
YWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5Eb2N1bWVudC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyVHJlZUFzVGV4dC5oPgpAQCAtNjY2LDE3ICs2NjYsOCBAQCBib29sIFdlYkZy
YW1lOjpjb250YWluc0FueUZvcm1FbGVtZW50cygpIGNvbnN0CiAgICAgaWYgKCFtX2NvcmVGcmFt
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IG1fY29yZUZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAg
ICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChpczxIVE1MRm9ybUVsZW1lbnQ+KCpub2RlKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byogZG9jdW1lbnQgPSBtX2Nv
cmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQgJiYgY2hpbGRyZW5PZlR5
cGU8SFRNTEZvcm1FbGVtZW50PigqZG9jdW1lbnQpLmZpcnN0KCk7CiB9CiAKIGJvb2wgV2ViRnJh
bWU6OmNvbnRhaW5zQW55Rm9ybUNvbnRyb2xzKCkgY29uc3QKQEAgLTY4NCwxNCArNjc1LDEyIEBA
IGJvb2wgV2ViRnJhbWU6OmNvbnRhaW5zQW55Rm9ybUNvbnRyb2xzKCkgY29uc3QKICAgICBpZiAo
IW1fY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gbV9jb3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgYXV0byogZG9jdW1lbnQg
PSBtX2NvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAg
ICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpIHx8IGlzPEhUTUxTZWxlY3RFbGVt
ZW50Pigqbm9kZSkgfHwgaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKm5vZGUpKQorICAgIGZvciAo
YXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxFbGVtZW50PigqZG9jdW1lbnQpKSB7CisgICAg
ICAgIGlmIChpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oY2hpbGQpIHx8IGlzPEhUTUxT
ZWxlY3RFbGVtZW50PihjaGlsZCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCA5NzkxMzA5ZWY4ZWUzNWIzYWY4ZTNmNjYwMzQ2MTU0
NGY5M2M4MzliLi4wMzYyODhhMjdmMzlhM2E0M2E3YmM3MDVjMjcwYjc2ZGFkYmNhM2I2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQpAQCAtMjUxNCwxMSArMjUxNCwxMiBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVj
dGlvbkNvbnRleHQoKQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SGFuZGxlQXV0
b2NvcnJlY3Rpb25Db250ZXh0KGF1dG9jb3JyZWN0aW9uQ29udGV4dCgpKSk7CiB9CiAKLXN0YXRp
YyBIVE1MQW5jaG9yRWxlbWVudCogY29udGFpbmluZ0xpbmtFbGVtZW50KEVsZW1lbnQqIGVsZW1l
bnQpCitzdGF0aWMgSFRNTEFuY2hvckVsZW1lbnQqIGNvbnRhaW5pbmdMaW5rQW5jaG9yRWxlbWVu
dChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGZvciAoYXV0byYgY3VycmVudEVsZW1lbnQgOiBl
bGVtZW50TGluZWFnZShlbGVtZW50KSkgewotICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuaXNM
aW5rKCkgJiYgaXM8SFRNTEFuY2hvckVsZW1lbnQ+KGN1cnJlbnRFbGVtZW50KSkKLSAgICAgICAg
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oJmN1cnJlbnRFbGVtZW50KTsK
KyAgICAvLyBGSVhNRTogVGhlcmUgaXMgY29kZSBpbiB0aGUgZHJhZyBjb250cm9sbGVyIHRoYXQg
c3VwcG9ydHMgYW55IGxpbmssIGV2ZW4gaWYgaXQncyBub3QgYW4gSFRNTEFuY2hvckVsZW1lbnQu
IFdoeSBpcyB0aGlzIGRpZmZlcmVudD8KKyAgICBmb3IgKGF1dG8mIGN1cnJlbnRFbGVtZW50IDog
bGluZWFnZU9mVHlwZTxIVE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkpIHsKKyAgICAgICAgaWYg
KGN1cnJlbnRFbGVtZW50LmlzTGluaygpKQorICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50RWxl
bWVudDsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0yNjg4LDcgKzI2ODksNyBA
QCBzdGF0aWMgdm9pZCBlbGVtZW50UG9zaXRpb25JbmZvcm1hdGlvbihXZWJQYWdlJiBwYWdlLCBF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBJbgogewogICAgIEVsZW1lbnQqIGxpbmtFbGVtZW50ID0g
bnVsbHB0cjsKICAgICBpZiAoZWxlbWVudC5yZW5kZXJlcigpICYmIGVsZW1lbnQucmVuZGVyZXIo
KS0+aXNSZW5kZXJJbWFnZSgpKQotICAgICAgICBsaW5rRWxlbWVudCA9IGNvbnRhaW5pbmdMaW5r
RWxlbWVudCgmZWxlbWVudCk7CisgICAgICAgIGxpbmtFbGVtZW50ID0gY29udGFpbmluZ0xpbmtB
bmNob3JFbGVtZW50KGVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNMaW5rKCkpCiAg
ICAgICAgIGxpbmtFbGVtZW50ID0gJmVsZW1lbnQ7CiAKQEAgLTI5NTcsNyArMjk1OCw3IEBAIHZv
aWQgV2ViUGFnZTo6cGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1aW50MzJfdCBhY3Rpb24pCiAgICAg
ICAgIGlmIChpczxSZW5kZXJJbWFnZT4oKmVsZW1lbnQucmVuZGVyZXIoKSkpIHsKICAgICAgICAg
ICAgIFVSTCB1cmw7CiAgICAgICAgICAgICBTdHJpbmcgdGl0bGU7Ci0gICAgICAgICAgICBpZiAo
YXV0byogbGlua0VsZW1lbnQgPSBjb250YWluaW5nTGlua0VsZW1lbnQoJmVsZW1lbnQpKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byogbGlua0VsZW1lbnQgPSBjb250YWluaW5nTGlua0FuY2hvckVs
ZW1lbnQoZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICB1cmwgPSBsaW5rRWxlbWVudC0+aHJl
ZigpOwogICAgICAgICAgICAgICAgIHRpdGxlID0gbGlua0VsZW1lbnQtPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjp0aXRsZUF0dHIpOwogICAgICAgICAgICAgICAg
IGlmICghdGl0bGUubGVuZ3RoKCkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>